# Gitea Actions : pipeline de release (issue #42). # # Sur chaque tag v* : construit les binaires de toutes les plateformes, # archive + publie la release Gitea avec les artefacts. Les installateurs # (install.sh / install.ps1) et 'am self-update' consomment ces artefacts. # # Labels de runners attendus : ubuntu-latest, windows-latest, macos-latest. # Un runner manquant laisse son job en attente ; le job linux couvre la # majorite des cas (les artefacts windows/macos peuvent aussi etre produits # par les scripts locaux documentes dans RELEASING.md). # # Prérequis du runner : pouvoir tirer les images docker.io (rust:1.94-alpine, # ~300 Mo) et le secret GITEA_TOKEN (jeton avec droit 'write:release') # positionné sur le dépôt. La release existante est écrasée # (release_overwrite). # # Note disque (runner avec espace limite) : # - il faut ~1 Go libres sur / pour tirer l'image (rust:1.94-alpine) ; # en cas de 'no space left on device' : docker system prune -af --volumes # sur l'HOTE du runner (pas une autre machine !) ; # - les builds compilent dans CARGO_TARGET_DIR=/tmp (hors du volume # workspace) avec l'incremental desactive, donc rien ne persiste ; # - le job linux utilise cargo-zigbuild : zig (~50 Mo) fournit le linker # croise pour les DEUX cibles musl statiques dans une seule image legere # (rust:1.94-alpine n'embarque pas de compilateur croise aarch64). name: release on: push: tags: - "v*" concurrency: group: release-${{ github.ref }} cancel-in-progress: true jobs: linux: runs-on: ubuntu-latest container: rust:1.94-alpine env: CARGO_TARGET_DIR: /tmp/am-target CARGO_INCREMENTAL: "0" steps: - uses: actions/checkout@v4 - name: Install build tools (zig + cargo-zigbuild) run: | apk add --no-cache build-base zip curl rustup target add x86_64-unknown-linux-musl aarch64-unknown-linux-musl curl -fsSL https://ziglang.org/download/0.14.1/zig-x86_64-linux-0.14.1.tar.xz -o /tmp/zig.tar.xz tar -xf /tmp/zig.tar.xz -C /opt echo "/opt/zig-x86_64-linux-0.14.1" >> "$GITHUB_PATH" cargo install cargo-zigbuild --locked - name: Build linux x86_64 + aarch64 (static musl, zig) run: cargo zigbuild --release --locked --target x86_64-unknown-linux-musl --target aarch64-unknown-linux-musl - name: Stage archives run: | mkdir -p dist cp "$CARGO_TARGET_DIR/x86_64-unknown-linux-musl/release/am" dist/am-linux-x86_64 cp "$CARGO_TARGET_DIR/aarch64-unknown-linux-musl/release/am" dist/am-linux-aarch64 cd dist tar -czf am-linux-x86_64.tar.gz am-linux-x86_64 tar -czf am-linux-aarch64.tar.gz am-linux-aarch64 sha256sum am-linux-*.tar.gz > checksums.txt - name: Publish release uses: https://gitea.com/actions/gitea-release-action@v1 with: files: dist/am-linux-x86_64.tar.gz dist/am-linux-aarch64.tar.gz dist/checksums.txt GITHUB_TOKEN: ${{ secrets.GITEA_TOKEN }} release_overwrite: true windows: runs-on: windows-latest env: CARGO_TARGET_DIR: C:/am-target CARGO_INCREMENTAL: "0" steps: - uses: actions/checkout@v4 - name: Build windows x86_64 run: cargo build --release --locked - name: Stage archive run: | New-Item -ItemType Directory -Force dist | Out-Null Compress-Archive -Path C:/am-target/release/am.exe -DestinationPath dist/am-windows-x86_64.zip -Force (Get-FileHash dist/am-windows-x86_64.zip -Algorithm SHA256).Hash.ToLower() | Out-File dist/checksums.txt - name: Publish release uses: https://gitea.com/actions/gitea-release-action@v1 with: files: dist/am-windows-x86_64.zip dist/checksums.txt GITHUB_TOKEN: ${{ secrets.GITEA_TOKEN }} release_overwrite: true macos: runs-on: macos-latest env: CARGO_TARGET_DIR: /tmp/am-target CARGO_INCREMENTAL: "0" steps: - uses: actions/checkout@v4 - name: Build macos x86_64 + aarch64 run: | rustup target add x86_64-apple-darwin aarch64-apple-darwin cargo build --release --locked --target x86_64-apple-darwin cargo build --release --locked --target aarch64-apple-darwin - name: Stage archives run: | mkdir -p dist cp "$CARGO_TARGET_DIR/x86_64-apple-darwin/release/am" dist/am-macos-x86_64 cp "$CARGO_TARGET_DIR/aarch64-apple-darwin/release/am" dist/am-macos-aarch64 cd dist tar -czf am-macos-x86_64.tar.gz am-macos-x86_64 tar -czf am-macos-aarch64.tar.gz am-macos-aarch64 shasum -a 256 am-*.tar.gz > checksums.txt - name: Publish release uses: https://gitea.com/actions/gitea-release-action@v1 with: files: dist/am-macos-x86_64.tar.gz dist/am-macos-aarch64.tar.gz dist/checksums.txt GITHUB_TOKEN: ${{ secrets.GITEA_TOKEN }} release_overwrite: true