Implement the per-target build steps inside pdftract-ci for all five
release target triples. Each target produces a stripped release binary
uploaded as an Argo artifact (named pdftract-<triple>).
Changes:
- Added workspace volumeClaimTemplate (10Gi) to share cloned repo
- Implemented build-matrix DAG with 5 target build tasks
- Added continueOn: failed to each build task for fault tolerance
- Implemented build-target template using ghcr.io/cross-rs images
- Configured cargo-cache volume mount with CARGO_HOME and TARGET_DIR
- Added SOURCE_DATE_EPOCH and --locked flag for reproducible builds
- Added binary stripping and artifact upload (pdftract-<target>{.exe})
Targets:
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-musl
- x86_64-apple-darwin
- aarch64-apple-darwin
- x86_64-pc-windows-gnu
Acceptance criteria:
- PASS: All five build steps in build-matrix DAG
- PASS: Binaries upload as artifacts with correct pattern
- WARN: Build time <= 8 min (cannot verify without running pipeline)
- WARN: Stripped binary <= 4 MB (cannot verify without running pipeline)
- PASS: Failure isolation with continueOn: failed
Verification note: notes/pdftract-1bn.md
Refs: pdftract-1bn, Phase 0 lines 1001-1009, ADR-009
3.7 KiB
pdftract-1bn: Cross-compilation build matrix implementation
Summary
Implemented the cross-compilation build matrix for all 5 release target triples in the pdftract-ci WorkflowTemplate. Each target produces a stripped release binary uploaded as an Argo artifact.
Changes Made
File: /home/coding/declarative-config/k8s/iad-ci/argo-workflows/pdftract-ci.yaml
- Added workspace volumeClaimTemplate (10Gi) to share cloned repo between setup and all build steps
- Implemented build-matrix DAG with 5 target build tasks:
x86_64-unknown-linux-musl(Linux x86_64 musl)aarch64-unknown-linux-musl(Linux ARM64 musl)x86_64-apple-darwin(macOS x86_64)aarch64-apple-darwin(macOS ARM64)x86_64-pc-windows-gnu(Windows x86_64)
- Added
continueOn: failedto each build task for fault tolerance (one failure doesn't cancel others) - Implemented build-target template using
ghcr.io/cross-rs/<target>:mainimages directly - Configured cargo-cache volume mount at
/cache/cargowithCARGO_HOMEandCARGO_TARGET_DIRenvironment variables - Added SOURCE_DATE_EPOCH for reproducible builds
- Added
--lockedflag to cargo build for reproducible builds - Added binary stripping using target-appropriate strip commands
- Added artifact upload with pattern
pdftract-<target>{.exe} - Updated setup placeholder to include workspace volume mount
File: /home/coding/pdftract/.ci/argo-workflows/pdftract-ci.yaml
Synced all changes from declarative-config to keep the local copy in sync.
Acceptance Criteria Status
| Criteria | Status | Notes |
|---|---|---|
| All five build steps in build-matrix DAG | PASS | All 5 targets implemented |
| Binaries upload as artifacts with correct pattern | PASS | Artifact name: pdftract-<target>{.exe} |
| Build time <= 8 min for slowest step | WARN | Cannot verify without running pipeline |
| Stripped binary <= 4 MB | WARN | Cannot verify without running pipeline |
| Failure isolation (continueOn) | PASS | Added continueOn: failed to all 5 tasks |
Technical Details
Build Matrix Structure
build-matrix (DAG)
├── build-linux-x86_64-musl (continueOn: failed)
├── build-linux-aarch64-musl (continueOn: failed)
├── build-darwin-x86_64 (continueOn: failed)
├── build-darwin-aarch64 (continueOn: failed)
└── build-windows-x86_64-gnu (continueOn: failed)
Docker Images Used
- Linux:
ghcr.io/cross-rs/x86_64-unknown-linux-musl:main - Linux ARM64:
ghcr.io/cross-rs/aarch64-unknown-linux-musl:main - macOS x64:
ghcr.io/cross-rs/x86_64-apple-darwin:main - macOS ARM64:
ghcr.io/cross-rs/aarch64-apple-darwin:main - Windows:
ghcr.io/cross-rs/x86_64-pc-windows-gnu:main
Build Features
Default feature set: default,serve,decrypt (OCR feature excluded per plan)
Resource Limits
- Requests: 2 CPU, 4Gi memory
- Limits: 4 CPU, 8Gi memory
- Active deadline: 3600s (1 hour)
Known Limitations
-
Setup step is placeholder: The workspace clone and cargo cache warming logic will be implemented by a sibling Phase 0 bead. Currently, the build-target template expects
/workspaceto contain the cloned repo. -
Cannot verify build time: The 8-minute wall-clock requirement for the slowest step cannot be verified without running the pipeline on iad-ci.
-
Cannot verify binary size: The 4 MB budget for stripped binaries cannot be verified without running the pipeline.
-
macOS/Windows runtime verification: Per KU-12, these binaries are built but never run in CI. Manual quarterly smoke tests are the verification path (out of scope for this bead).
References
- Plan section: Phase 0, lines 1001-1009
- ADR-009 (Argo Workflows only)
- Bead ID: pdftract-1bn