Merge pull request #917 from stlankes/fuse #1717
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
merge_group: | |
env: | |
RUSTFLAGS: -Dwarnings | |
RUSTDOCFLAGS: -Dwarnings | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
check: | |
name: Check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: taiki-e/install-action@cargo-hack | |
- name: Install NASM | |
run: | | |
sudo apt-get update | |
sudo apt-get install nasm | |
- uses: mkroening/rust-toolchain-toml@main | |
- uses: Swatinem/rust-cache@v2 | |
- name: Check each feature | |
run: cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target x86_64-unknown-none | |
env: | |
RUSTFLAGS: | |
clippy: | |
name: Clippy | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install NASM | |
run: | | |
sudo apt-get update | |
sudo apt-get install nasm | |
- uses: mkroening/rust-toolchain-toml@main | |
- run: rustup component add clippy | |
- uses: Swatinem/rust-cache@v2 | |
- run: cargo xtask clippy | |
format: | |
name: Format | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: mkroening/rust-toolchain-toml@main | |
- run: rustup component add rustfmt | |
- run: cargo fmt -- --check | |
check-docs: | |
name: Check docs | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install NASM | |
run: | | |
sudo apt-get update | |
sudo apt-get install nasm | |
- uses: mkroening/rust-toolchain-toml@main | |
- run: rustup target add aarch64-unknown-none-softfloat | |
- uses: Swatinem/rust-cache@v2 | |
- name: Check docs | |
run: | | |
cargo doc --package hermit-kernel --no-deps --document-private-items --target x86_64-unknown-none | |
cargo doc --package hermit-kernel --no-deps --document-private-items --target aarch64-unknown-none-softfloat --no-default-features | |
build: | |
name: Build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install NASM | |
run: | | |
sudo apt-get update | |
sudo apt-get install nasm | |
- uses: mkroening/rust-toolchain-toml@main | |
- uses: Swatinem/rust-cache@v2 | |
- name: Build minimal kernel | |
run: | | |
cargo xtask build --arch x86_64 --no-default-features | |
cargo xtask build --arch aarch64 --no-default-features | |
test: | |
name: Test | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install QEMU, NASM | |
run: | | |
sudo apt-get update | |
sudo apt-get install qemu-system-x86 nasm | |
- uses: mkroening/rust-toolchain-toml@main | |
- uses: Swatinem/rust-cache@v2 | |
- name: Unit tests | |
run: cargo test --lib | |
env: | |
RUSTFLAGS: -Awarnings | |
- name: Download loader | |
uses: dsaltares/fetch-gh-release-asset@master | |
with: | |
repo: hermitcore/rusty-loader | |
file: rusty-loader-x86_64 | |
- name: Integration tests | |
run: cargo test --tests --no-fail-fast --target x86_64-unknown-none -- --bootloader_path=rusty-loader-x86_64 | |
env: | |
RUSTFLAGS: | |
run-x86_64: | |
name: Run Hermit for Rust (x86_64) | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: kernel | |
steps: | |
- name: Checkout hermit-rs | |
uses: actions/checkout@v4 | |
with: | |
repository: hermitcore/hermit-rs | |
submodules: true | |
- name: Remove hermit-kernel submodule | |
run: git rm -r kernel | |
working-directory: . | |
- name: Checkout hermit-kernel | |
uses: actions/checkout@v4 | |
with: | |
path: kernel | |
- name: Install QEMU, NASM | |
run: | | |
sudo apt-get update | |
sudo apt-get install qemu-system-x86 nasm libcap-ng-dev libseccomp-dev socat | |
- uses: mkroening/rust-toolchain-toml@main | |
- uses: mkroening/rust-toolchain-toml@main | |
with: | |
toolchain-file: 'kernel/rust-toolchain.toml' | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: | | |
. | |
kernel | |
- name: Download loader | |
uses: dsaltares/fetch-gh-release-asset@master | |
with: | |
repo: hermitcore/rusty-loader | |
file: rusty-loader-x86_64 | |
- name: Install virtiofsd | |
run: cargo install virtiofsd | |
- name: rusty_demo with pci-ids and virtiofsd | |
run: cargo xtask ci qemu --arch x86_64 --package rusty_demo --features pci-ids --virtiofsd | |
- name: rusty_demo with pci-ids and virtiofsd (release) | |
run: cargo xtask ci qemu --arch x86_64 --package rusty_demo --features pci-ids --virtiofsd --release | |
- name: httpd with virtio-net-pci and dhcpv4 | |
run: cargo xtask ci qemu --arch x86_64 --package httpd --features ci,dhcpv4 --netdev virtio-net-pci | |
- name: httpd with virtio-net-pci and dhcpv4 (release) | |
run: cargo xtask ci qemu --arch x86_64 --package httpd --features ci,dhcpv4 --netdev virtio-net-pci --release | |
- name: httpd with rtl8139 and dhcpv4 | |
run: cargo xtask ci qemu --arch x86_64 --package httpd --features ci,dhcpv4,rtl8139 --netdev rtl8139 | |
- name: httpd with rtl8139 and dhcpv4 (release) | |
run: cargo xtask ci qemu --arch x86_64 --package httpd --features ci,dhcpv4,rtl8139 --netdev rtl8139 --release | |
- name: hello_world on microVM (release) | |
run: cargo xtask ci qemu --arch x86_64 --package hello_world --no-default-features --microvm --release | |
- name: testudp with virtio-net-pci and dhcpv4 | |
run: cargo xtask ci qemu --arch x86_64 --package testudp --features udp,dhcpv4 --netdev virtio-net-pci | |
- name: testudp with virtio-net-pci and dhcpv4 (release) | |
run: cargo xtask ci qemu --arch x86_64 --package testudp --features udp,dhcpv4 --netdev virtio-net-pci --release | |
run-aarch64: | |
name: Run Hermit for Rust (aarch64) | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: kernel | |
steps: | |
- name: Checkout hermit-rs | |
uses: actions/checkout@v4 | |
with: | |
repository: hermitcore/hermit-rs | |
submodules: true | |
- name: Remove hermit-kernel submodule | |
run: git rm -r kernel | |
working-directory: . | |
- name: Checkout hermit-kernel | |
uses: actions/checkout@v4 | |
with: | |
path: kernel | |
- name: Download loader | |
uses: dsaltares/fetch-gh-release-asset@master | |
with: | |
repo: hermitcore/rusty-loader | |
file: rusty-loader-aarch64 | |
- uses: mkroening/rust-toolchain-toml@main | |
- uses: mkroening/rust-toolchain-toml@main | |
with: | |
toolchain-file: 'kernel/rust-toolchain.toml' | |
- name: Install QEMU | |
run: | | |
sudo apt-get update | |
sudo apt-get install qemu-system-aarch64 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: | | |
. | |
kernel | |
kernel/hermit-builtins | |
- name: rusty_demo with pci-ids | |
run: cargo xtask ci qemu --arch aarch64 --package rusty_demo --features pci-ids | |
- name: rusty_demo with pci-ids (release) | |
run: cargo xtask ci qemu --arch aarch64 --package rusty_demo --features pci-ids --release | |
- name: httpd with dhcpv4 | |
run: cargo xtask ci qemu --arch aarch64 --package httpd --features ci,dhcpv4 --netdev virtio-net-pci | |
- name: httpd with dhcpv4 (release) | |
run: cargo xtask ci qemu --arch aarch64 --package httpd --features ci,dhcpv4 --netdev virtio-net-pci --release | |
run-x86_64-kvm: | |
name: Run Hermit for Rust (x86_64 + kvm) | |
runs-on: [self-hosted] | |
defaults: | |
run: | |
working-directory: kernel | |
steps: | |
- name: Checkout hermit-rs | |
uses: actions/checkout@v4 | |
with: | |
repository: hermitcore/hermit-rs | |
submodules: true | |
- name: Remove hermit-kernel submodule | |
run: git rm -r kernel | |
working-directory: . | |
- name: Checkout hermit-kernel | |
uses: actions/checkout@v4 | |
with: | |
path: kernel | |
- name: Install QEMU, NASM | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends qemu-system-x86 nasm | |
- name: Check KVM availability | |
shell: bash | |
run: | | |
lscpu | |
kvm-ok | |
- name: Download loader (x86_64) | |
uses: dsaltares/fetch-gh-release-asset@master | |
with: | |
file: rusty-loader-x86_64 | |
repo: hermitcore/rusty-loader | |
- name: Download loader (x86_64-fc) | |
uses: dsaltares/fetch-gh-release-asset@master | |
with: | |
file: rusty-loader-x86_64-fc | |
repo: hermitcore/rusty-loader | |
- name: Install firecracker | |
run: | | |
# https://github.com/firecracker-microvm/firecracker/blob/7c5fc8707f26c4244d48a747631ab0fb31fc4c39/docs/getting-started.md#getting-a-firecracker-binary | |
ARCH="$(uname -m)" | |
release_url="https://github.com/firecracker-microvm/firecracker/releases" | |
latest=$(basename $(curl -fsSLI -o /dev/null -w %{url_effective} ${release_url}/latest)) | |
curl -L ${release_url}/download/${latest}/firecracker-${latest}-${ARCH}.tgz \ | |
| tar -xz | |
# Rename the binary to "firecracker" | |
mv release-${latest}-$(uname -m)/firecracker-${latest}-${ARCH} firecracker | |
echo "$PWD" >> $GITHUB_PATH | |
- uses: dtolnay/rust-toolchain@stable | |
- run: cargo install uhyve | |
- uses: mkroening/rust-toolchain-toml@main | |
- uses: mkroening/rust-toolchain-toml@main | |
with: | |
toolchain-file: 'kernel/rust-toolchain.toml' | |
- uses: Swatinem/rust-cache@v2 | |
- name: rusty_demo on Uhyve | |
run: cargo xtask ci uhyve --arch x86_64 --package rusty_demo | |
- name: rusty_demo on Uhyve (release) | |
run: cargo xtask ci uhyve --arch x86_64 --package rusty_demo --release | |
- name: rusty_demo on QEMU (with KVM) | |
run: cargo xtask ci qemu --arch x86_64 --package rusty_demo --accel | |
- name: rusty_demo on QEMU (with KVM, release) | |
run: cargo xtask ci qemu --arch x86_64 --package rusty_demo --accel --release | |
- name: hello_world on Firecracker | |
run: cargo xtask ci firecracker --arch x86_64 --package hello_world --no-default-features |