From ca0d4b7682d90a6a58db069093fa41399662e59e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kr=C3=B6ning?= Date: Thu, 22 Aug 2024 18:19:56 +0200 Subject: [PATCH] f MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Kröning --- .github/workflows/ci.yml | 175 +++++++++++++++++++++++++-------------- 1 file changed, 112 insertions(+), 63 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c0d793b2ba..9fcc66906b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -115,8 +115,8 @@ jobs: env: RUSTFLAGS: - run-hermit: - name: Run + qemu: + name: QEMU runs-on: ubuntu-latest env: HERMIT_CAREFUL: ${{ matrix.hermit-careful }} @@ -232,70 +232,119 @@ jobs: - run: cargo xtask ci qemu --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} ${{ matrix.flags }} --package mioudp --features hermit/udp,hermit/dhcpv4 --netdev rtl8139 --features hermit/rtl8139 if: matrix.arch == 'x86_64' - run-x86_64-kvm: - name: Run (x86_64, kvm) + uhyve: + name: Uhyve runs-on: ubuntu-latest + env: + HERMIT_CAREFUL: ${{ matrix.hermit-careful }} defaults: run: working-directory: kernel + strategy: + matrix: + arch: [x86_64] + profile: [dev, release] + include: + - profile: dev + hermit-careful: 1 + steps: - - name: Checkout hermit-rs - uses: actions/checkout@v4 - with: - repository: hermit-os/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 - run: | - sudo apt-get update - sudo apt-get install qemu-system-x86 - - name: Check KVM availability - shell: bash - run: | - lscpu - kvm-ok - - name: Download loader (x86_64, x86_64-fc) - run: gh release download --repo hermit-os/loader --pattern hermit-loader-x86_64 --pattern hermit-loader-x86_64-fc - - name: Install firecracker - run: | - # https://github.com/firecracker-microvm/firecracker/blob/v1.5.1/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 - - mkdir -p $HOME/.local/bin - mv release-${latest}-$(uname -m)/firecracker-${latest}-${ARCH} $HOME/.local/bin/firecracker - echo $HOME/.local/bin >> $GITHUB_PATH + - name: Checkout hermit-rs + uses: actions/checkout@v4 + with: + repository: hermit-os/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 + - uses: dtolnay/rust-toolchain@stable + - uses: dtolnay/rust-toolchain@nightly + with: + components: rust-src + - uses: mkroening/rust-toolchain-toml@main + - run: rustup component add llvm-tools + working-directory: . + - uses: mkroening/rust-toolchain-toml@main + with: + toolchain-file: 'kernel/rust-toolchain.toml' + - uses: Swatinem/rust-cache@v2 + with: + key: ${{ matrix.arch }}-${{ matrix.profile }} + save-if: ${{ github.ref == 'refs/heads/main' }} + workspaces: | + . + kernel + kernel/hermit-builtins + - run: cargo +stable install --locked uhyve + - run: cargo +stable install cargo-careful + if: matrix.profile == 'dev' + - run: UHYVE=$CARGO_HOME/bin/uhyve cargo xtask ci uhyve --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --sudo --package rusty_demo + + firecracker: + name: Firecracker + runs-on: ubuntu-latest + env: + HERMIT_CAREFUL: ${{ matrix.hermit-careful }} + defaults: + run: + working-directory: kernel + strategy: + matrix: + arch: [x86_64] + profile: [dev, release] + include: + - profile: dev + hermit-careful: 1 - $HOME/.local/bin/firecracker --version - - uses: dtolnay/rust-toolchain@stable - - run: cargo +stable install --locked 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 - with: - save-if: ${{ github.ref == 'refs/heads/main' }} - workspaces: | - . - kernel - kernel/hermit-builtins - - name: rusty_demo on Uhyve - run: UHYVE=$CARGO_HOME/bin/uhyve cargo xtask ci uhyve --arch x86_64 --package rusty_demo --sudo - - name: rusty_demo on Uhyve (release) - run: UHYVE=$CARGO_HOME/bin/uhyve cargo xtask ci uhyve --arch x86_64 --package rusty_demo --sudo --release - - name: rusty_demo on QEMU (with KVM) - run: cargo xtask ci qemu --arch x86_64 --package rusty_demo --accel --sudo - - name: rusty_demo on QEMU (with KVM, release) - run: cargo xtask ci qemu --arch x86_64 --package rusty_demo --accel --sudo --release - - name: hello_world on Firecracker - run: FIRECRACKER=$HOME/.local/bin/firecracker cargo xtask ci firecracker --arch x86_64 --package hello_world --sudo --no-default-features + steps: + - name: Checkout hermit-rs + uses: actions/checkout@v4 + with: + repository: hermit-os/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 + - uses: dtolnay/rust-toolchain@stable + - uses: dtolnay/rust-toolchain@nightly + with: + components: rust-src + - uses: mkroening/rust-toolchain-toml@main + - run: rustup component add llvm-tools + working-directory: . + - uses: mkroening/rust-toolchain-toml@main + with: + toolchain-file: 'kernel/rust-toolchain.toml' + - uses: Swatinem/rust-cache@v2 + with: + key: ${{ matrix.arch }}-${{ matrix.profile }} + save-if: ${{ github.ref == 'refs/heads/main' }} + workspaces: | + . + kernel + kernel/hermit-builtins + - run: cargo +stable install cargo-careful + if: matrix.profile == 'dev' + - name: Install firecracker + run: | + # https://github.com/firecracker-microvm/firecracker/blob/v1.5.1/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 + + mkdir -p $HOME/.local/bin + mv release-${latest}-$(uname -m)/firecracker-${latest}-${ARCH} $HOME/.local/bin/firecracker + echo $HOME/.local/bin >> $GITHUB_PATH + + $HOME/.local/bin/firecracker --version + - run: FIRECRACKER=$HOME/.local/bin/firecracker cargo xtask ci firecracker --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --sudo --package hello_world --no-default-features