Files
distribution/.agents/subplans/03-cli-and-ci.md

2.0 KiB

Subplan 03 - CLI And CI Integration

Goal

Make dist useful from CI before the admin UI exists.

Commands

dist server:

  • starts distd
  • accepts config file and env overrides

dist doctor:

  • checks config, database, storage directory, HTTPS base URL, and platform tools

dist app create:

  • creates an app
  • accepts slug, display name, owner, platform ids

dist token create:

  • creates scoped CI tokens
  • prints raw token once

dist ci publish:

  • validates manifest
  • creates/fetches app
  • creates draft release
  • uploads artifacts
  • validates artifacts
  • publishes release
  • optionally promotes a channel
  • prints JSON output

dist release promote:

  • promotes a release to a channel
  • checks policy gates

dist release rollback:

  • moves a channel pointer to the previous valid release

Manifest Shape

Required fields:

  • app slug
  • version
  • channel
  • artifacts list

Artifact fields:

  • platform
  • path
  • filename override
  • content type override
  • metadata

Slice 1 - Parser And Help

Deliver:

  • Top-level parser.
  • Subcommand parser.
  • Help text.
  • Exit code contract.

Acceptance:

  • Unknown commands produce readable errors.
  • --json never emits human-only text on stdout.

Slice 2 - Local Publish

Deliver:

  • dist ci publish --manifest dist.json --local-store .dist
  • In-memory or file-backed local mode for early testing.

Acceptance:

  • CI flow can be dogfooded without a running HTTP server.

Slice 3 - Remote Publish

Deliver:

  • HTTP client integration.
  • Token auth.
  • Streaming uploads with SHA-256.
  • Retry policy for safe requests.

Acceptance:

  • Upload output includes release id, artifact ids, digests, and URLs.

Slice 4 - CI Templates

Deliver:

  • GitHub Actions example.
  • GitLab CI example.
  • Generic shell example.

Acceptance:

  • Users can copy the command and only set server, token, and manifest path.

Slice 5 - Observability

Deliver:

  • Structured logs.
  • --verbose.
  • Machine-readable errors under --json.

Acceptance:

  • CI logs explain what failed without leaking tokens.