ref:98c330db77d3ea0c53c6ec2c487a5fb9e6ffe366

feat(ci): publish cross-compiled runner binaries as release assets (#1)

## Summary - Adds `publish-runner` CI step that builds the CLI for linux_arm64 (native on Pi) and linux_amd64 (cross-compiled), then uploads both as release assets under a `latest` tag - Fixes the broken `/runner/download` endpoint — currently returns `{"platforms":[]}` because the old Burrito/Elixir build was silently failing ## Prerequisites (one-time on Pi runner) ```bash rustup target add x86_64-unknown-linux-gnu sudo apt-get install -y gcc-x86-64-linux-gnu ``` ## Test plan - [ ] Install cross-compilation toolchain on Pi runner - [ ] Merge and verify CI `publish-runner` step succeeds - [ ] Verify `anvil release assets latest fangorn/anvil-cli` shows both binaries - [ ] Server-side consumption of these assets is a separate task Closes #1
SHA: 98c330db77d3ea0c53c6ec2c487a5fb9e6ffe366
Author: Anvil <noreply@anvil.fangorn.io>
Date: 2026-04-10 04:25
Parents: 9b0ea17
10 files changed +330 -160
Type
.anvil.yml +33 −1
@@ -18,8 +18,9 @@
- target/
- name: coverage
timeout_seconds: 1800
run: |
cargo install cargo-tarpaulin --version 0.32.7 2>&1
cargo install cargo-tarpaulin 2>&1
cargo tarpaulin --out lcov --output-dir coverage/ 2>&1
depends_on: [check]
cache:
@@ -55,3 +56,34 @@
artifacts:
- name: anvil-binary
path: target/release/anvil
- name: build-runner
timeout_seconds: 1800
run: |
set -e
apt-get update && apt-get install -y gcc-x86-64-linux-gnu 2>&1
# Build arm64 natively (CI runner is aarch64)
echo "==> Building arm64 binary (native)..."
cargo build --release 2>&1
# Cross-compile amd64
echo "==> Cross-compiling amd64 binary..."
rustup target add x86_64-unknown-linux-gnu 2>&1
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-linux-gnu-gcc \
cargo build --release --target x86_64-unknown-linux-gnu 2>&1
# Stage for artifact upload
mkdir -p runner-dist
cp target/release/anvil runner-dist/anvil_runner_linux_arm64
cp target/x86_64-unknown-linux-gnu/release/anvil runner-dist/anvil_runner_linux_amd64
depends_on: [test, clippy, fmt]
cache:
key: Cargo.lock
paths:
- target/
artifacts:
- name: anvil_runner_linux_arm64
path: runner-dist/anvil_runner_linux_arm64
- name: anvil_runner_linux_amd64
path: runner-dist/anvil_runner_linux_amd64