Preskoči na sadržaj

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:

{
  "version": "0.1.0",
  "sha256": {
    "aarch64-apple-darwin": "abc123..."
  }
}

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