Kako se distribuira bozana launcher?¶
TL;DR
ci/cargo/publish.py gradi bozana + bozana-install binare
iz launcher-rs/, računa sha256, upload-uje na Bitbucket Downloads,
i ispisuje bozana.json pin za trenutnu platformu. Radi u
custom: release pipeline-u na macOS runner-u (Linux još nije
wire-an — Linux runner nema Rust toolchain; vidi D9 / baby-step 5).
Pozadina¶
bozana je Rust launcher za CI alate (ranije poznat kao ci).
Binarni se distribuiraju kroz Bitbucket Downloads — ne kroz
Docker image ili package registry.
Svaki platform-specific build emituje pin sa sha256 hash-om.
Operator kombinuje pina oba platforme u jedan bozana.json
fajl u consumer repozitoriju.
Publish flow¶
sequenceDiagram
participant Operator
participant Publish as ci/cargo/publish.py
participant Cargo as cargo build
participant BB as Bitbucket Downloads
Operator->>Publish: ci/cargo/publish.py [project_dir] [--dry-run]
Publish->>Cargo: cargo build --release
Cargo-->>Publish: binari u target/release/
Publish->>Publish: sha256(bozana) + sha256(bozana-install)
Publish->>Publish: bozana self --info → target triple
Publish->>BB: upload bozana-{ver}-{triple}
Publish->>BB: upload bozana-install-{ver}-{triple}
Publish-->>Operator: bozana.json pin (stdout)
Kako se koristi¶
# Standardni poziv (default project: launcher-rs)
ci/cargo/publish.py
# Dry-run (build + sha256, bez upload-a)
ci/cargo/publish.py --dry-run
CI_DRY_RUN=1 ci/cargo/publish.py
# Custom project dir
ci/cargo/publish.py /path/to/launcher-rs
CI placement¶
Publish radi u custom: release pipeline-u, NAKON bump + build + deploy
(Release Invariant pattern 2 — ci/git/checkout_release_commit.py prefix).
Korak je &publish-launcher-rs (Publish bozana (macos)).
Danas radi samo na macOS runner-u (runs-on: *self-hosted--macos,
triple aarch64-apple-darwin). Linux runner nema Rust toolchain, pa je
Linux publish odložen (D9 / baby-step 5) — publish.py je cross-platform,
samo taj step još nije wire-an na Linux runner.
| Runner (danas) | Target triple | Pin |
|---|---|---|
| macOS (self-hosted) | aarch64-apple-darwin |
bozana.json mac unos |
Kad Linux publish bude wire-an (D9), svaki runner emituje svoj pin;
operator ih spaja u jedan bozana.json (vidi pin format ispod).
Auth¶
Upload koristi Bitbucket REST API (ci/git/api/api.py:upload_download()).
Drugačiji auth path od git push-a
REST upload koristi BITBUCKET_USER_EMAIL + BITBUCKET_API_TOKEN
(HTTP Basic). Ovo NIJE isto kao git push auth, koji se resolve-a
redoslijedom: BITBUCKET_API_TOKEN + BITBUCKET_USERNAME (primarno),
pa fallback BITBUCKET_WORKSPACE_TOKEN sa username-om x-token-auth.
Vidi ci/git/credentials_setup.py
i ci/git/CLAUDE.md za detalje.
Obavezni env var-ovi (samo za upload path — --dry-run / CI_DRY_RUN
preskače cijeli upload blok, pa tada nisu potrebni):
| Env var | Svrha |
|---|---|
BITBUCKET_USER_EMAIL |
HTTP Basic username |
BITBUCKET_API_TOKEN |
HTTP Basic lozinka |
BITBUCKET_REPO_FULL_NAME |
ciljni repo (workspace/repo) |
Opcioni:
| Env var | Svrha |
|---|---|
CI_BIN_VERSION |
override verzije (default: iz Cargo.toml) |
CI_DRY_RUN |
ako je set, preskače upload |
CI_CARGO_TIMEOUT |
timeout za cargo build (default: 600s) |
bozana.json pin format¶
Svaki platform build emituje pin za svoju platformu:
Operator spaja oba pina:
{
"version": "0.1.0",
"sha256": {
"aarch64-apple-darwin": "abc123...",
"x86_64-unknown-linux-gnu": "def456..."
}
}
Rollback = git revert commita koji je promijenio bozana.json
(Bitbucket Downloads zadržava sve verzije).
Exit kodovi¶
| Kod | Značenje |
|---|---|
| 0 | Uspjeh (built + uploaded + pin emitovan) |
| 1 | Greška (build, upload, usage) |
| 2 | Auth greška — VendorAuthError na HTTP 401/403 iz upload_download() (SystemExit(2), token je loš — retry je uzaludan) |
Vidi i¶
ci/cargo/CLAUDE.md— gate.py + publish.py detaljici/git/api/api.py—upload_download()implementacijalauncher-rs/CLAUDE.md— Cargo projekt02-systems/11-vendor-api-contract.md— HTTP-call invariant