146 lines
5.5 KiB
YAML
146 lines
5.5 KiB
YAML
# 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:
|
|
# actions/checkout (et son post-step) s'execute via node, absent de
|
|
# l'image rust:alpine : sans nodejs le job echoue des le checkout.
|
|
- name: Prepare container (node for checkout action)
|
|
run: apk add --no-cache nodejs
|
|
|
|
- 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:
|
|
# L'action splitte 'files' sur les retours a la ligne (pas les
|
|
# espaces) : un bloc YAML plie en une seule ligne et ne trouve
|
|
# alors aucun fichier -> 'not include valid file', rien n'upload.
|
|
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
|