diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index cabd3ce..1759a58 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -9,10 +9,17 @@ # 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 -# ici, ou les images messense/rust-musl-cross:x86_64-musl / :aarch64-musl) et -# le secret GITEA_TOKEN (jeton avec droit 'write:release') positionné sur le -# dépôt. La release existante est écrasée (release_overwrite). +# 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) : +# - 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: @@ -20,34 +27,41 @@ on: 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 - run: apk add --no-cache build-base zip + - 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: Add musl targets - run: rustup target add x86_64-unknown-linux-musl aarch64-unknown-linux-musl - - - name: Build linux x86_64 (static musl) - run: cargo build --release --locked --target x86_64-unknown-linux-musl - - - name: Build linux aarch64 (static musl) - run: cargo build --release --locked --target aarch64-unknown-linux-musl + - 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 target/x86_64-unknown-linux-musl/release/am dist/am-linux-x86_64 - cp target/aarch64-unknown-linux-musl/release/am dist/am-linux-aarch64 + 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-*.tar.gz > checksums.txt + sha256sum am-linux-*.tar.gz > checksums.txt - name: Publish release uses: https://gitea.com/actions/gitea-release-action@v1 @@ -60,6 +74,9 @@ jobs: windows: runs-on: windows-latest + env: + CARGO_TARGET_DIR: C:/am-target + CARGO_INCREMENTAL: "0" steps: - uses: actions/checkout@v4 @@ -69,7 +86,7 @@ jobs: - name: Stage archive run: | New-Item -ItemType Directory -Force dist | Out-Null - Compress-Archive -Path target/release/am.exe -DestinationPath dist/am-windows-x86_64.zip -Force + 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 @@ -82,6 +99,9 @@ jobs: macos: runs-on: macos-latest + env: + CARGO_TARGET_DIR: /tmp/am-target + CARGO_INCREMENTAL: "0" steps: - uses: actions/checkout@v4 @@ -94,8 +114,8 @@ jobs: - name: Stage archives run: | mkdir -p dist - cp target/x86_64-apple-darwin/release/am dist/am-macos-x86_64 - cp target/aarch64-apple-darwin/release/am dist/am-macos-aarch64 + 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