# Deploy and manage releases
URL: https://openship.io/docs/cli/deploy.md

Deploy a linked project or local folder, follow logs, and control releases.

First [connect to an installation](/docs/cli/access) or configure [native mode](/docs/cli/native).

## Deploy a Git project

From your repository, link an existing Openship project whose source is configured:

```bash
openship init --project proj_123
openship deploy --watch
```

Use `--project` to select a project without changing the local link. Select a branch, commit,
variable set, or registered server when needed:

```bash
openship deploy --project proj_123 --branch main --env production --watch
openship deploy --project proj_123 --server srv_123 --watch
```

For a preview, first create or select a **non-production project environment** with
`openship project environment create <project-id> Preview --type preview`,
then deploy its project ID. That row owns its own routes, runtime and active release:

```bash
openship deploy --project proj_preview --env preview --watch
```

`--env` selects stored variables within that project. It does not create a preview runtime or switch
project IDs. Preview variables are refused on a production target before deployment starts.
The explicit `--env` option overrides the default saved by `init --environment`. When using a directory
link, its saved default is used next; otherwise the fallback is `production`. An explicit `--project`
does not inherit a different project's linked branch or variable set.

## Deploy a folder

Upload the current directory explicitly, including from a Git checkout:

```bash
openship deploy --folder --name my-site --watch
```

The CLI stages the directory through the shared SDK source workflow. Outside Git, `--name` also
opts into a folder upload for existing scripts. A project ID alone never opts into uploading the
current directory. Use `--project <id>` to redeploy from outside the checkout; the stored branch is
used unless `--branch` is supplied.

`--branch`, `--commit`, `--smart-route`, and `--refresh` select the Git path and cannot be combined
with `--folder`. `--service-ids` works for both paths. Archive staging must remain outside the source
tree: the system temporary directory and its ancestors are refused. Select your project directory,
or set `TMPDIR` outside the source tree.

Native directory deployment requires the directory to be inside `policy.sourceRoots`. See
[folder deployment](/docs/guides/deploy-local-folder) for packaging behavior.

## Select what changes

| Option | Behavior |
| --- | --- |
| `--force-all` | Rebuild all enabled services. |
| `--service-ids svc_a,svc_b` | Select services to deploy. |
| `--smart-route` | Use source changes to select affected services. |
| `--refresh` | Reapply environment configuration without pulling source or rebuilding. |

See the [deploy reference](/docs/cli/reference/deploy) for every option.

## Inspect progress

```bash
openship deployment list --project proj_123
openship deployment get dep_123
openship logs dep_123 --follow
openship deployment wait dep_123 --timeout 600000
```

Without `--watch`, deployment submission returns an ID that you can inspect later. A submitted build
is not yet a successful release. Follow the final status and any requested decisions.

Watching or waiting returns a failed exit status for failed releases and pending decisions. Inspect a
decision with `deployment pending`, then use `deployment respond --action <offered-action>` and wait
again. The CLI never chooses a decision for you. `--watch`, `logs --follow` and `deployment wait` have a
ten-minute default deadline, adjustable with `--timeout` in milliseconds. A timeout stops observation;
it does not cancel the deployment.

`project server-logs <id> --follow` follows request logs using the SDK's authorized self-hosted or
Cloud stream. Unavailable streaming exits nonzero; omit `--follow` to request a recent snapshot.

## Control a release

```bash
openship deployment cancel dep_123
openship deployment redeploy dep_123 --use-existing-commit
openship deployment rollback dep_previous
```

Rollback availability depends on retained artifacts or rebuild support. `pin` retains a deployment's
rollback artifacts; `keep` and `reject` settle releases waiting for a decision.

Use the [deployment command reference](/docs/cli/reference/deployment) for controls and
[rollback guide](/docs/guides/rollback-redeploy) for recovery behavior.
