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>
- Add example/alpine-base project that uses Alpine Linux as base image
- Update CI extended-platforms job to use the example directory
- Simplifies CI configuration by moving test project to examples
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add support for linux/386 (i686-unknown-linux-musl)
- Add support for linux/arm/v6 (arm-unknown-linux-musleabihf)
- Add support for linux/ppc64le (powerpc64le-unknown-linux-musl)
- Add support for linux/s390x (s390x-unknown-linux-musl)
- Add support for linux/riscv64 (riscv64gc-unknown-linux-musl)
- Update platform detection to include all new platforms
- Add tests for all new platform mappings
- Update documentation with installation instructions for all targets
- Add CI job to test extended platform support
- Update development setup docs to mention cargo-zigbuild for full platform support
This allows krust to build images for all platforms supported by Alpine Linux,
making it more versatile for multi-architecture container deployments.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit eliminates test flakiness by building to unique temporary
directories and updates the README to reflect all changes in this branch.
Code changes:
- Modified RustBuilder to use tempfile::tempdir() for each build
- Added BuildResult struct to keep temp directory alive during image build
- Each build now gets its own isolated target directory
- Removed clean_example_dir() and all cleanup logic - no longer needed
- Tests can now run concurrently without interfering with each other
Documentation updates:
- Added "Isolated builds" and "Concurrent builds" to key features
- Added comprehensive "Build Process" section explaining the temp directory approach
- Updated multi-arch documentation to reflect default behavior (builds both platforms)
- Added "Multi-Architecture Images" section explaining how multi-arch works
- Documented that manifest list support is planned for future release
Benefits:
- No more "Built binary not found" errors
- Tests run reliably every time
- Concurrent test execution is now safe
- Simpler test code without cleanup logic
- Clear documentation of build isolation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>