pvh 0.1.0

Xen's x86/HVM direct boot ABI (PVH).
Documentation
name: CI

on:
  push:
  pull_request:
  merge_group:

permissions: {}

env:
  GH_TOKEN: ${{ github.token }}
  RUSTFLAGS: -Dwarnings
  RUSTDOCFLAGS: -Dwarnings

jobs:
  clippy:
    name: Clippy
    runs-on: ubuntu-24.04
    steps:
      - &checkout
        name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false
      - name: Install Rust toolchain
        run: |
          rustup show
          rustup component add clippy rust-src
          rustup target add x86_64-unknown-none
      - &install-cargo_hack
        name: Install cargo-hack
        uses: taiki-e/install-action@94cb46f8d6e437890146ffbd78a778b78e623fb2 # v2.74.0
        with:
          tool: cargo-hack
          fallback: none
      - run: cargo hack clippy --feature-powerset --no-dev-deps
      - run: cargo clippy --lib --examples --target examples/i686-unknown-none.json -Zjson-target-spec -Zbuild-std=core
      - run: cargo clippy --lib --examples --target x86_64-unknown-none

  doc:
    name: Document
    runs-on: ubuntu-24.04
    steps:
      - *checkout
      - name: Install Rust toolchain
        run: |
          rustup show
          rustup target add x86_64-unknown-none
      - run: cargo install cargo-docs-rs
      - run: cargo docs-rs
      - run: cargo doc --examples

  fmt:
    name: Format
    runs-on: ubuntu-24.04
    steps:
      - *checkout
      - name: Install Rust toolchain
        run: |
          rustup show
          rustup component add rustfmt
      - run: cargo fmt -- --check

  msrv:
    name: MSRV
    runs-on: ubuntu-24.04
    steps:
      - *checkout
      - name: Install Rust toolchain
        run: rustup override set 1.85
      - *install-cargo_hack
      - run: cargo hack check --feature-powerset --no-dev-deps

  run:
    name: Run
    runs-on: ubuntu-24.04
    steps:
      - *checkout
      - name: Install Rust toolchain
        run: |
          rustup show
          rustup component add rust-src
          rustup target add x86_64-unknown-none
      - name: Install QEMU
        run: |
          sudo apt-get update
          sudo apt-get install --no-install-recommends qemu-system-x86
      - name: Set up ~/.local/bin
        run: |
          mkdir -p ~/.local/bin
          echo ~/.local/bin >> "$GITHUB_PATH"
      - name: Install Firecracker
        run: |
          version=v1.15.0

          gh release download --repo firecracker-microvm/firecracker "$version" --pattern "firecracker-$version-x86_64.tgz"
          tar --extract --file "firecracker-$version-x86_64.tgz" "release-$version-x86_64/firecracker-$version-x86_64"
          mv "release-$version-x86_64/firecracker-$version-x86_64" ~/.local/bin/firecracker
          rmdir "release-$version-x86_64"

          firecracker --version
      - name: Install Cloud Hypervisor
        run: |
          version=v51.1

          gh release download --repo cloud-hypervisor/cloud-hypervisor "$version" --pattern cloud-hypervisor-static
          chmod +x cloud-hypervisor-static
          mv cloud-hypervisor-static ~/.local/bin/cloud-hypervisor

          cloud-hypervisor --version
      # Test compilation as position-independent executable
      - run: cargo build --examples --target x86_64-unknown-none
      - run: ./examples/run.sh print x86 dev qemu
      - run: ./examples/run.sh print x86 dev qemu-kvm
      - run: ./examples/run.sh print x86 dev firecracker
      - run: ./examples/run.sh print x86 dev cloud-hypervisor
      - run: ./examples/run.sh print x86 release qemu
      - run: ./examples/run.sh print x86 release qemu-kvm
      - run: ./examples/run.sh print x86 release firecracker
      - run: ./examples/run.sh print x86 release cloud-hypervisor
      - run: ./examples/run.sh print x86_64 dev qemu
      - run: ./examples/run.sh print x86_64 dev qemu-kvm
      - run: ./examples/run.sh print x86_64 dev firecracker
      - run: ./examples/run.sh print x86_64 dev cloud-hypervisor
      - run: ./examples/run.sh print x86_64 release qemu
      - run: ./examples/run.sh print x86_64 release qemu-kvm
      - run: ./examples/run.sh print x86_64 release firecracker
      - run: ./examples/run.sh print x86_64 release cloud-hypervisor

  test:
    name: Test
    runs-on: ubuntu-24.04
    steps:
      - *checkout
      - name: Install Rust toolchain
        run: rustup show
      - run: cargo test --lib --bins --tests --benches
      - run: cargo test --doc

  zizmor:
    name: Zizmor
    runs-on: ubuntu-24.04
    permissions:
      security-events: write # Required for upload-sarif (used by zizmor-action) to upload SARIF files.
    steps:
      - *checkout
      - name: Run zizmor
        uses: zizmorcore/zizmor-action@71321a20a9ded102f6e9ce5718a2fcec2c4f70d8 # v0.5.2