039-release-and-out-of-tree-packaging
Releases and out-of-tree packaging: a tagged version a consumer pins, images that exist under the names the manifests use, and a runtime image a cell in another repository builds on
The thesis says consumers depend on published crates and pin a version (002 D5), and nothing is published: no tag, no release, no crate, no image. The one route that works is a git dependency pinned to a sha. cargo package fails on rahi-ops because it includes a template from outside the crate, which also blocks rahi-cli, the crate that carries Cell. The deploy manifests name ghcr.io/bartekus/rahi:latest, a namespace and a tag no workflow produces. The image recipe builds only a package of this workspace, and a cell's static directory named under CARGO_MANIFEST_DIR does not exist in the image (hello-cell's page answers 404 there). This spec defines the version and the release, publishes the images a tag builds under the names the manifests use, adds a runtime image an out-of-tree cell builds on, makes static assets exist in the image, makes the crates packageable, and proves the consumer stanza on every release.
Read the full pinned specification ↗Relationships
depends on
depended on by
Claimed units
- establishes
{ "kind": "file", "path": "docker/runtime.Dockerfile" } - establishes
{ "kind": "file", "path": ".github/workflows/release.yml" } - establishes
{ "kind": "file", "path": ".github/publish-crate.sh" } - establishes
{ "kind": "file", "path": "crates/rahi-ops/rauthy.env.template" } - establishes
{ "kind": "file", "path": "CHANGELOG.md" } - establishes
{ "kind": "file", "path": ".github/consumer-cell/" } - extends
{ "nature": "additive", "spec": "010-workspace-and-core-types", "unit": { "anchor": "workspace.package", "file": "Cargo.toml", "kind": "section" } } - extends
{ "nature": "additive", "spec": "010-workspace-and-core-types", "unit": { "anchor": "workspace.dependencies", "file": "Cargo.toml", "kind": "section" } } - extends
{ "nature": "additive", "spec": "031-single-container-packaging", "unit": { "kind": "file", "path": ".github/workflows/image.yml" } } - extends
{ "nature": "additive", "spec": "031-single-container-packaging", "unit": { "kind": "file", "path": "docker/Dockerfile" } } - extends
{ "nature": "additive", "spec": "031-single-container-packaging", "unit": { "kind": "file", "path": "crates/rahi-ops/src/rauthy_env.rs" } } - extends
{ "nature": "additive", "spec": "032-cluster-topology", "unit": { "kind": "file", "path": "deploy/k8s/kustomization.yaml" } } - extends
{ "nature": "additive", "spec": "032-cluster-topology", "unit": { "kind": "file", "path": "deploy/k8s/statefulset.yaml" } } - extends
{ "nature": "additive", "spec": "032-cluster-topology", "unit": { "kind": "file", "path": "deploy/k8s/migrate-job.yaml" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-cli/src/serve.rs" } } - extends
{ "nature": "additive", "spec": "034-hello-cell", "unit": { "kind": "file", "path": "apps/hello-cell/src/cell.rs" } } - extends
{ "nature": "additive", "spec": "032-cluster-topology", "unit": { "kind": "file", "path": "deploy/README.md" } } - extends
{ "nature": "additive", "spec": "034-hello-cell", "unit": { "kind": "file", "path": "apps/hello-cell/README.md" } } - extends
{ "nature": "additive", "spec": "015-kernel-manifest-and-adjudication", "unit": { "kind": "file", "path": "crates/rahi-kernel/src/manifest.rs" } } - extends
{ "nature": "additive", "spec": "015-kernel-manifest-and-adjudication", "unit": { "kind": "file", "path": "crates/rahi-kernel/tests/manifest.rs" } } - extends
{ "nature": "additive", "spec": "015-kernel-manifest-and-adjudication", "unit": { "kind": "file", "path": "crates/rahi-kernel/testdata/manifests/" } } - extends
{ "nature": "additive", "spec": "034-hello-cell", "unit": { "kind": "file", "path": "apps/hello-cell/manifest.toml" } } - extends
{ "nature": "additive", "spec": "010-workspace-and-core-types", "unit": { "kind": "file", "path": "crates/rahi-types/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "011-store-hiqlite", "unit": { "kind": "file", "path": "crates/rahi-store/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "015-kernel-manifest-and-adjudication", "unit": { "kind": "file", "path": "crates/rahi-kernel/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "020-edge-server", "unit": { "kind": "file", "path": "crates/rahi-edge/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "021-idp-proxy-and-discovery", "unit": { "kind": "file", "path": "crates/rahi-idp/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-ops/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-cli/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "033-dev-substrate-and-harness", "unit": { "kind": "file", "path": "crates/rahi-harness/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "034-hello-cell", "unit": { "kind": "file", "path": "apps/hello-cell/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-cli/src/cell.rs" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-ops/tests/common/mod.rs" } } - extends
{ "nature": "additive", "spec": "020-edge-server", "unit": { "kind": "file", "path": "crates/rahi-edge/testdata/manifest.toml" } } - extends
{ "nature": "additive", "spec": "022-session-and-principal", "unit": { "kind": "file", "path": "crates/rahi-idp/testdata/oidc/" } } - extends
{ "nature": "additive", "spec": "035-denials-survive-shutdown", "unit": { "kind": "file", "path": "crates/rahi-cli/tests/shutdown.rs" } } - extends
{ "nature": "additive", "spec": "043-patched-dependency-adoption", "unit": { "kind": "file", "path": "crates/rahi-cli/tests/stop_outcome.rs" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-cli/tests/cli.rs" } } - extends
{ "nature": "additive", "spec": "031-single-container-packaging", "unit": { "kind": "file", "path": "docker/smoke.sh" } } - extends
{ "nature": "additive", "spec": "032-cluster-topology", "unit": { "kind": "file", "path": "scripts/k8s-validate.sh" } } - extends
{ "nature": "additive", "spec": "032-cluster-topology", "unit": { "kind": "file", "path": "deploy/k8s/secret.example.yaml" } } - extends
{ "nature": "additive", "spec": "001-agentic-harness", "unit": { "kind": "file", "path": "spec-spine.toml" } }
Source headings
- 039: Releases and out-of-tree packaging
- 1. Purpose
- 2. Territory
- 3. Behavior
- 4. Functional requirements
- 5. Acceptance criteria
- 6. Out of scope
- 7. Resolved decisions
- Verification
Frozen anchors
No frozen anchors declared.