name: Build
on: [push, pull_request]
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, windows-2025, macos-26]
steps:
- uses: actions/checkout@v7
- name: Build
run: cargo build --verbose --all-targets
- name: Run tests
run: cargo test --verbose
if: runner.os != 'macOS'
- name: Run tests (macos)
run: sudo "PATH=$PATH" cargo test --verbose
if: runner.os == 'macOS'
build-freebsd:
name: build (FreeBSD)
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30
- name: Install cross
run: |
if [ ! -f "$HOME/.cargo/bin/cross" ]; then
cargo install cross --git https://github.com/cross-rs/cross --rev 51f46f296253d8122c927c5bb933e3c4f27cc317
fi
cross --version
cross build --release --target x86_64-unknown-freebsd
cross test --release --no-run --target x86_64-unknown-freebsd
- name: Launch Firecracker VM
uses: acj/freebsd-firecracker-action@v0.10.4
with:
verbose: false
pre-run: |
rm -rf .cargo
ln -s $HOME/.cargo .cargo
include_path="$(mktemp)"
cat <<EOF > $include_path
target
target/x86_64-unknown-freebsd
target/x86_64-unknown-freebsd/release
target/x86_64-unknown-freebsd/release/deps
target/x86_64-unknown-freebsd/release/deps/read_process_memory-*
target/x86_64-unknown-freebsd/release/test
EOF
rsync -r -e "ssh" \
--relative \
--copy-links \
--include-from "$include_path" \
--exclude "*" \
. firecracker:
rm -f "$exclude_path"
run-in-vm: |
mkdir -p /home/runner
ln -s $(pwd)/.cargo /home/runner/.cargo
failed=0
for testbin in $(find target/x86_64-unknown-freebsd/release/deps -type f -perm -u+x ! -name "*.d" -print); do
if ! $testbin; then
failed=1
fi
done
if [ $failed -ne 0 ]; then
exit 1
fi
post-run: ""