From ac56851e4d8c823f642c1ee847f5a5326b9e8380 Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 29 Mar 2026 12:52:58 -0500 Subject: [PATCH] docs: remove broken arm64 CI step, document Woodpecker 0.15.4 limitation when: platform: is evaluated at compile time (server=amd64) and silently drops the arm64 step. Per-step platform routing requires Woodpecker 2.x. Document the make release-arm64 workaround for linux/arm64 builds. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- .woodpecker/release.yml | 20 +++---------------- docs/wiki/CICD-Pipeline.md | 39 ++++++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml index 07fe5abc..28a01eff 100644 --- a/.woodpecker/release.yml +++ b/.woodpecker/release.yml @@ -54,23 +54,9 @@ pipeline: - mkdir -p artifacts/windows-amd64 - find src-tauri/target/$TARGET/release/bundle -name "*.exe" -o -name "*.msi" | xargs -I{} cp {} artifacts/windows-amd64/ 2>/dev/null || true - build-linux-arm64: - image: rust:1.88-slim - environment: - TARGET: aarch64-unknown-linux-gnu - when: - event: tag - platform: linux/arm64 - commands: - - apt-get update -qq && apt-get install -y -qq libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config curl perl - - curl -fsSL https://deb.nodesource.com/setup_22.x | bash - - - apt-get install -y nodejs - - npm ci --legacy-peer-deps - - rustup target add $TARGET - - cargo install tauri-cli --version "^2" --locked - - CI=true cargo tauri build --target $TARGET - - mkdir -p artifacts/linux-arm64 - - find src-tauri/target/$TARGET/release/bundle -name "*.deb" -o -name "*.rpm" -o -name "*.AppImage" | xargs -I{} cp {} artifacts/linux-arm64/ + # NOTE: linux/arm64 is built locally via 'make release-arm64 GOGS_TOKEN=' + # Woodpecker 0.15.4 does not support per-step agent platform routing — + # when: platform: is evaluated at compile time (server=amd64) and drops the step. upload-release: image: curlimages/curl:latest diff --git a/docs/wiki/CICD-Pipeline.md b/docs/wiki/CICD-Pipeline.md index 0f332222..6802e48a 100644 --- a/docs/wiki/CICD-Pipeline.md +++ b/docs/wiki/CICD-Pipeline.md @@ -65,13 +65,13 @@ pipeline: ``` Pipeline steps: 1. clone → alpine/git with explicit tag fetch + checkout - 2. build-linux-amd64 → cargo tauri build (x86_64-unknown-linux-gnu) [amd64 agent] + 2. build-linux-amd64 → cargo tauri build (x86_64-unknown-linux-gnu) → artifacts/linux-amd64/{.deb, .rpm, .AppImage} - 3. build-windows-amd64 → cargo tauri build (x86_64-pc-windows-gnu) [amd64 agent] + 3. build-windows-amd64 → cargo tauri build (x86_64-pc-windows-gnu) → artifacts/windows-amd64/{.exe, .msi} - 4. build-linux-arm64 → cargo tauri build (aarch64-unknown-linux-gnu) [arm64 agent] - → artifacts/linux-arm64/{.deb, .rpm, .AppImage} - 5. upload-release → Create Gogs release + upload all artifacts + 4. upload-release → Create Gogs release + upload all artifacts + +linux/arm64 (manual): make release-arm64 GOGS_TOKEN= (see below) ``` **Clone override (release.yml):** @@ -101,7 +101,23 @@ environment: **Artifacts per platform:** - Linux amd64: `.deb`, `.rpm`, `.AppImage` - Windows amd64: `.exe` (NSIS installer), `.msi` -- Linux arm64: `.deb`, `.rpm`, `.AppImage` (native build on local arm64 agent) +- Linux arm64: `.deb`, `.rpm`, `.AppImage` — built via `make release-arm64` (see below) + +**Linux arm64 build (Woodpecker 0.15.4 workaround):** + +Woodpecker 0.15.4 evaluates `when: platform:` at compile time against the server's +platform (amd64), dropping arm64 steps before any agent can claim them. Per-step +agent routing is a Woodpecker 2.x feature. + +To build and upload arm64 artifacts from the local aarch64 machine: +```bash +# On the local arm64 machine (Fedora Asahi 42) +cd ~/Documents/tftsr-devops_investigation +make release-arm64 TAG=v0.1.0-alpha GOGS_TOKEN= +``` + +`make build-arm64` runs the full Tauri build inside a `rust:1.88-slim` ARM64 Docker +container. `make upload-arm64` uploads the resulting artifacts to the Gogs release. **Important:** Artifacts must be written to the **workspace** (relative paths like `artifacts/linux-amd64/`), not to absolute paths like `/artifacts/`. Only the workspace is shared between pipeline steps via Docker volume. @@ -249,6 +265,17 @@ docker volume rm $(docker volume ls -q | grep '0_') docker restart woodpecker_agent ``` +### Per-Step Agent Platform Routing Not Supported +Woodpecker 0.15.4 evaluates `when: platform:` conditions at pipeline compile time +against the **server's** platform (amd64). Steps filtered by platform are dropped +before any agent can claim them, so arm64 steps never reach the arm64 agent. + +The `platform:` step-level key (e.g. `platform: linux/arm64`) is treated as a plugin +attribute and causes `Cannot configure both commands and custom attributes [platform]`. + +Workaround: build arm64 artifacts locally via `make release-arm64`. This is fixed in +Woodpecker 2.x which supports proper per-step label-based agent routing. + ### Windows DLL Export Ordinal Too Large `/usr/bin/x86_64-w64-mingw32-ld: error: export ordinal too large: 106290`