# Use the CLI in scripts and CI

Source: https://docs.sliplane.io/cli/automation

Authenticate the Sliplane CLI with an API key, read JSON output, and deploy from CI pipelines.

The [Sliplane CLI](/cli/getting-started) works in scripts and CI pipelines as well as in your terminal. Outside a terminal it never prompts, so every choice must come from flags or your configuration.

## Authenticate with an API key

Create an [API key](/teams/api-keys) and set it as `SLIPLANE_TOKEN`. The CLI uses it instead of a saved login:

```sh
export SLIPLANE_TOKEN=yourapikeyhere
sliplane auth status
```

Give the key only the [permissions](/teams/api-keys#permissions) the job needs. A pipeline that only redeploys a service, for example, needs **Write** on Services. Commands that change resources need write access.

You can also pass `--token`, but an environment variable keeps the key out of your shell history and process list.

## Read JSON output

Add `-o json` to any command for structured output:

```sh
sliplane service list -o json
sliplane logs api --follow -o json   # one JSON object per line
```

To use JSON by default, run `sliplane config set output json`.

## Confirm changes without prompts

Commands that delete resources ask for confirmation in a terminal. In scripts, pass `--yes` to confirm. Pass names and IDs explicitly, for example with `--project` and `--server`, so the CLI does not have to choose.

## Deploy from GitHub Actions

This workflow installs the CLI and redeploys an image-based service with the image tag of the current commit. Store your API key as the `SLIPLANE_TOKEN` secret in your repository's Actions settings.

```yaml title=".github/workflows/deploy.yml"
name: Deploy to Sliplane

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Install the Sliplane CLI
        run: |
          curl -fsSL https://sliplane.io/install.sh | sh
          echo "$HOME/.sliplane/bin" >> "$GITHUB_PATH"

      - name: Redeploy the service
        env:
          SLIPLANE_TOKEN: ${{ secrets.SLIPLANE_TOKEN }}
        run: sliplane service redeploy api --project production --tag ${{ github.sha }}
```

Replace `api` and `production` with your service and project. Build and push the image before this step, as shown in the [GitHub Actions guide](/guides/github-actions). For a repository-based service, drop `--tag`.

`service redeploy` returns once Sliplane accepts the deployment. Use `sliplane service events api` or `sliplane logs api` to follow its progress.

## Pin a version

The installer installs the latest release by default. To install a specific version, pass it to the script:

```sh
curl -fsSL https://sliplane.io/install.sh | sh -s -- 0.8.0
```

The CLI also updates itself in the background. Set `SLIPLANE_NO_AUTO_UPDATE=1` to keep the pinned version.
