1
0
Fork 0
mirror of https://github.com/imjasonh/krust synced 2026-07-08 14:55:35 +00:00
Commit graph

14 commits

Author SHA1 Message Date
Jason Hall
1f730645c3
feat: Expand platform support to match Alpine's supported architectures
- 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>
2025-06-08 00:07:56 -04:00
Jason Hall
d4b7b216df
Fix flaky tests with temp directories and update documentation
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>
2025-06-07 23:13:45 -04:00
Jason Hall
068ad65477
Improve platform detection and add multi-arch run test
- Updated get_test_platform() to detect runtime architecture in CI
  - CI tests use native platform (linux/amd64 on x86_64, linux/arm64 on aarch64)
  - Local development always uses linux/amd64 for consistency

- Added test_multi_arch_build_and_run() test
  - Builds multi-arch image and pushes to ttl.sh
  - Verifies the image runs correctly on the current architecture
  - Gracefully handles missing toolchain scenarios

- Updated CI integration test to verify multi-arch images can run
  - Builds for both linux/amd64 and linux/arm64
  - Runs the image to ensure Docker selects the correct architecture

This ensures we properly test both single and multi-arch scenarios.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-07 22:58:06 -04:00
Jason Hall
90c871f24d
Fix CI: Robust cross-compilation setup and tests
This commit fixes CI failures by:

1. Added cargo config setup to all test jobs:
   - Ensures correct linkers are configured before running tests
   - Uses x86_64-linux-musl-gcc for x86_64 targets
   - Uses aarch64-linux-gnu-gcc for ARM64 targets

2. Updated tests to handle cross-compilation gracefully:
   - Single-platform tests always use linux/amd64
   - Multi-platform tests attempt to build for both architectures
   - Tests verify the appropriate error messages if targets are missing
   - No tests are skipped - they either pass or fail with expected errors

3. Enhanced CI verification:
   - Added verification of aarch64-linux-gnu-gcc availability
   - Shows the cargo config being used

This ensures tests run consistently across all environments without skipping.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-07 22:52:38 -04:00
Jason Hall
6153452303
feat: Add multi-arch support
- Support building for multiple platforms with --platform flag
- Accept comma-separated platforms or multiple --platform flags
- Default to building for linux/amd64 and linux/arm64
- Add ARM runner (ubuntu-24.04-arm) to CI matrix
- Create manifest list for multi-arch images (TODO: push to registry)
- Update integration tests to handle multi-platform builds
- Add cross-compilation setup instructions to README
- Add .cargo/config.toml for local development

Breaking changes:
- Default behavior now builds for multiple platforms (amd64+arm64)
- Use --platform linux/amd64 to build for single platform
2025-06-07 22:28:15 -04:00
Jason Hall
5d254c7eca
Add tests to pre-commit hooks and simplify CI matrix
- Add cargo test and e2e tests to pre-commit hooks
- Temporarily disable macOS CI to focus on Linux
- Ensure all tests pass locally before committing
2025-06-07 22:03:28 -04:00
Jason Hall
40dbb7053e
Disable Windows CI temporarily
Remove Windows from the CI matrix to focus on getting Linux and macOS
working reliably first. Windows cross-compilation and Docker support
can be added back once the core functionality is stable.
2025-06-07 21:53:38 -04:00
Jason Hall
2e51f0ad49
Use douglascamata/setup-docker-macos-action for macOS Docker setup
This action properly installs and starts Docker daemon on macOS runners,
which is required for our integration tests.
2025-06-07 21:51:57 -04:00
Jason Hall
7a7f49c4a3
Ensure Docker is available on all platforms and fix Windows cross-compilation
- Use docker/setup-buildx-action for consistent Docker setup across all platforms
- Fix Windows rust-lld configuration by using full path instead of command name
- Make Docker-dependent tests fail explicitly when Docker is not available
- Add proper Docker availability check in integration tests

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-07 21:47:46 -04:00
Jason Hall
06b9e37db9
Fix cross-compilation and ensure all tests run on all platforms
- Add detailed error logging for cargo build failures (show both stdout and stderr)
- Install Docker on Windows and macOS CI runners
- Remove continue-on-error from test matrix - tests should fail properly
- Add detailed verification of cross-compilation setup in CI
- Improve Docker availability check in tests

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-07 21:39:18 -04:00
Jason Hall
5dc87b282e
Fix cross-compilation toolchain installation for all platforms
- macOS: Use messense/macos-cross-toolchains tap for musl toolchain
- Windows: Fix PowerShell syntax for creating cargo config
- Add verification step to check musl target installation
- Update builder to try platform-specific linker names
- Fix YAML syntax error in Windows config generation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-07 21:22:32 -04:00
Jason Hall
642472c548
Ensure all tests run on all platforms without skipping
- Remove test skipping based on target availability
- Install cross-compilation toolchains for all platforms in CI:
  - Ubuntu: musl-tools
  - macOS: musl-cross with proper cargo config
  - Windows: rust-lld linker
- Update builder to use platform-appropriate linkers
- Make full build/run workflow test mandatory in CI
- Add Docker setup and local registry for integration tests
- Set RUSTFLAGS with --cfg ci to enable CI-specific test behavior

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-07 21:17:30 -04:00
Jason Hall
93bb4561fc
Add e2e tests and CI integration for docker run workflow
- Add comprehensive e2e tests for build functionality
- Add integration job to CI that tests `docker run $(krust build)`
- Test KRUST_REPO environment variable usage
- Test --no-push flag and clean stdout for command substitution
- Add tests for verbose logging
- Remove outdated basic_test.rs

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-07 21:03:33 -04:00
Jason Hall
5e89023925
Initial commit: krust - container image build tool for Rust
krust builds container images for Rust applications without Docker:
- Builds static binaries using musl libc
- Creates minimal OCI container images
- Pushes to any OCI-compliant registry
- Outputs digest to stdout for composability

Inspired by ko.build for Go applications.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-07 20:46:08 -04:00