The cargo-zigbuild cache was shared between x86 and ARM runners
(cache key only used runner.os), causing "Exec format error" when
an ARM binary was restored on x86 or vice versa. Added runner.arch
to all cache keys and use --force install to overwrite stale binaries.
https://claude.ai/code/session_01EcsZDNeWn56wFqryb4Wq7r
cargo-zigbuild --version doesn't work reliably in all PATH configs.
Use cargo zigbuild --help instead, which uses cargo's subcommand
discovery to find the cargo-zigbuild binary. Also verify zigbuild
actually works in CI after installation.
https://claude.ai/code/session_01EcsZDNeWn56wFqryb4Wq7r
Integration tests now skip instead of panicking when Docker or
cargo-zigbuild aren't available. Also removed redundant make test-e2e
step from CI since make test already includes e2e tests.
https://claude.ai/code/session_01EcsZDNeWn56wFqryb4Wq7r
- Make zigbuild a hard requirement instead of optional with fallback
- Remove configure_cross_linker and all system linker detection logic
- Remove apt-get install of system cross-linkers from CI
- Remove unused `which` dependency
- Fail fast with clear install instructions if zigbuild is missing
https://claude.ai/code/session_01EcsZDNeWn56wFqryb4Wq7r
The snap install was unreliable and the apt fallback used a
non-existent package name. pip install ziglang is the recommended
way to install zig in CI environments.
https://claude.ai/code/session_01EcsZDNeWn56wFqryb4Wq7r
- Integrate cargo-zigbuild as the default build backend, falling back
to cargo build with best-effort linker detection if not installed
- Auto-install rustup targets when missing (rustup target add)
- Use persistent target/krust/ directory instead of temp dirs so
incremental compilation works across runs
- Remove .cargo/config.toml from repo (add to .gitignore) since
zigbuild handles cross-linker configuration
- Improve error messages: suggest cargo-zigbuild when linker not found
- Simplify CI to use zigbuild instead of per-target system linkers
- Simplify Makefile by removing setup-cross-compile/verify targets
- Update README and CLAUDE.md to reflect new approach
https://claude.ai/code/session_01EcsZDNeWn56wFqryb4Wq7r
- Only run make run-built-image on ubuntu-latest (x86_64) runners
- ARM64 runners cannot cross-compile for x86_64 due to linker architecture mismatch
- Prevents 'file in wrong format' errors when ARM64 musl-gcc tries to link x86_64 objects
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Change from x86_64-linux-musl-gcc to musl-gcc (provided by musl-tools package)
- Keep aarch64-linux-gnu-gcc for ARM64 cross-compilation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Move cross-compilation setup to CI workflow for better portability
- Remove local .cargo/config.toml to avoid conflicts
- Add cross-compilation config directly in CI test matrix
- Re-enable make run-built-image in main test job
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Restore integration job with CI-compatible linker configuration
- Use aarch64-linux-gnu-gcc instead of aarch64-linux-musl-gcc for CI
- Enable make run-built-image test in dedicated ubuntu-latest environment
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Temporarily enable run-built-image in CI to see what specific
cross-compilation tools are missing in the ubuntu environment.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update Makefile to use --verbose flag by default for build and test targets
- Simplify CI workflow to use standard make targets instead of verbose variants
- Improve debugging visibility in CI by showing detailed cargo output
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add matrix testing across ubuntu-latest and ubuntu-24.04-arm
- Test both stable and beta Rust toolchains
- Add comprehensive caching for cargo registry, index, and build
- Include cross-compilation verification steps
- Use make targets for consistent build and test execution
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove complex cross-compilation setup that was causing linker
errors. The simplified approach should work with the available
system linkers and musl-tools package.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Restore support for the --image flag that was accidentally removed
in the previous refactoring. This ensures all existing tests and
workflows continue to work while maintaining the digest-only approach.
- Restore image reference parsing with tag/digest stripping
- Maintain backward compatibility with existing CLI interface
- All integration tests now pass
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Images are now pushed by digest only by default, with optional tagging
via the new --tag flag. This addresses issue #27 by ensuring:
- No automatic :latest tags are applied during build
- Platform-specific images are never tagged for external use
- Only manifest lists can receive tags when explicitly requested
- Default behavior outputs digest-only references for reproducibility
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add setup-cross-compile target to create cargo config
- Add verify-cross-compile target to check setup
- Update CI to use make verify-cross-compile
- Simplifies CI workflow and centralizes cross-compile logic
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add TEST_FLAGS variable for single-threaded test execution
- Create verbose targets for CI usage
- Update pre-commit hooks to use make targets
- Update CI workflow to use make targets
- This ensures consistency between local and CI test execution
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update pre-commit hooks to use --test-threads=1
- Update CI workflow to run tests single-threaded
- This prevents test failures due to concurrent environment variable modifications
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Instead of changing directories, pass the path directly to krust.
This ensures the command runs from the correct working directory
where the krust binary is located.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The dtolnay/rust-toolchain action requires an explicit toolchain
parameter when pinned to a specific SHA.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Pin all GitHub Actions to specific commit SHAs for immutability
- Add cargo-audit job to CI pipeline for vulnerability scanning
- Create SECURITY.md with vulnerability reporting guidelines
- Add Dependabot configuration for automated dependency updates
- Weekly updates for both Cargo and GitHub Actions
- Grouped patch and minor updates for Cargo dependencies
- Update job dependencies to run security checks before integration tests
This improves the project's security posture by:
1. Preventing action hijacking through SHA pinning
2. Catching known vulnerabilities early with cargo-audit
3. Providing clear security reporting channels
4. Automating dependency updates to reduce security debt
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>