Start with the overview. This page covers the repository.
| Path | Responsibility |
|---|---|
apps/cli/ |
CLI, engine child process, console output, built-in manual. |
crates/engine/ |
Config, local builds, bundles, SSH, deploy and rollback flows. |
crates/agent/ |
Linux server helper: files, services, locks, backups, events. |
crates/protocol/ |
Typed messages shared by engine, clients, and agent. |
crates/tui/ |
Terminal screens, dialogs, and input. |
docs/website/content/docs/ |
Published user docs; also exported as Markdown. |
The engine reports through the protocol. CLI and TUI show those reports. The agent speaks JSON-RPC on stdin/stdout over SSH; diagnostics go to stderr. See agent behavior for its safety boundaries.
Run just for all recipes:
just build # whole workspace, including the agent
just build release # optimized workspace
just run --help
just test
just verify # fmt, check, strict Clippy, workspace tests
just build-doc # website, with installed pnpm
python3 tests/release_artifacts_test.pyA CLI-only build does not build the agent. For development connections, point
SHIPDECK_AGENT_BINARY at your matching Linux agent binary. Published builds
download the release for the connecting CLI; an installed agent with the same
major version is reused even when its minor or patch differs. Do not treat the
development path as a download fallback.
The agent is installed under /opt/shipdeck/agent/v<version>/agent by root.
The SSH account must be root or have password-free sudo. A development binary
is uploaded to a private user folder, copied into root staging, checked, and run
only from the root-owned copy.
To install both programs from this checkout on Linux:
just install
just install-agent
shipdeck-agent --versionThen connect using the SSH host, user, and key in your deployment config:
SHIPDECK_AGENT_BINARY="$(command -v shipdeck-agent)" shipdeck server-info ./scripts/deploy my-apiReplace the deployment root and name with your own. Shipdeck uploads the agent,
checks its checksum and version, and starts it over SSH. You do not need to log
in and install it by hand. The binary must match the server's Linux CPU and libc.
Its version must have your Shipdeck's major version. For another server target,
build the matching Linux agent and set SHIPDECK_AGENT_BINARY to that file.
Config types generate the editor schema. Run just schema after config changes.
Run just protocol after protocol changes. The manual lives in
apps/cli/manual/; keep it consistent with behavior.
SHIPDECK_DUMP=/tmp/frames cargo test -p shipdeck-tui exports screen captures.
Local Lefthook hooks run the version check before commits and Rust checks before pushes. They do not replace release verification.
The version tool is an independent Cargo project in scripts/version_bump/, outside
the application workspace. It has no dependencies. From the repository root,
run just version NEW_VERSION or:
cargo run --quiet --manifest-path scripts/version_bump/Cargo.toml -- NEW_VERSION-
Inspect the changes since the last published tag and the relevant reviews. Run
just verify, build the docs, and check generated schemas. -
If the workspace version has not already been raised, run
just version NEW_VERSION. It updates manifests, lockfile, examples, README URLs, and schema URLs. Cargo builds only the version tool. Update website examples and changelog notes too. Regenerate schemas separately after type changes. -
Run
dist plananddist generate --check. After changing dist config, rundist generateand inspect its changes. The pinned tool version is in dist-workspace.toml. -
Commit with a conventional title, for example
chore(release): prepare v0.7.1. Tag that verified commit and push:git tag v0.7.1 git push origin main v0.7.1
The release workflow builds six CLI archives (Linux x86_64/arm64, GNU/musl; macOS x86_64/arm64) and four Linux agent archives. The agent is archive-only, with no user installer.
Before publication, the artifact gate requires all four agent archives and their SHA-256 files, checks each checksum, executable member, and ELF CPU, then checks the GNU binaries' glibc floors. CLI GNU needs at most glibc 2.28; agent GNU needs at most 2.31. Older Linux uses musl. A failure blocks publication.
The workflow creates the GitHub Release after these checks. Do not create it by hand first. Stable publication then calls the docs deployment workflow. Watch the complete workflow, verify the public assets and binary versions, and confirm the live docs before calling the release complete.
32-bit ARM and prebuilt Windows binaries are not shipped. Disk-full behavior has not been verified. Upload speed has no measured gain over direct SSH/SFTP.