Add plugins API V4 #69
Workflow file for this run
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: | |
branches: ["main"] | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
test_plugins_linux_v1: | |
name: Build and Test Plugins API v1 (Linux) | |
runs-on: ubuntu-latest | |
container: ubuntu:24.04 | |
env: | |
# Hash of v1 | |
QEMU_COMMIT_HASH: fb691b8cbabf5bde7d25a7f720d5ec7d5b1341e1 | |
steps: | |
- name: Set up Sources List | |
run: | | |
cat <<EOF > /etc/apt/sources.list.d/ubuntu.sources | |
Types: deb | |
URIs: http://archive.ubuntu.com/ubuntu/ | |
Suites: noble noble-updates noble-backports | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb | |
URIs: http://security.ubuntu.com/ubuntu/ | |
Suites: noble-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb-src | |
URIs: http://archive.ubuntu.com/ubuntu/ | |
Suites: noble noble-updates noble-backports | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb | |
URIs: http://security.ubuntu.com/ubuntu/ | |
Suites: noble-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
EOF | |
- name: Install QEMU Build Dependencies | |
run: | | |
apt -y update && \ | |
apt -y install git curl build-essential && \ | |
apt -y source qemu && \ | |
apt -y build-dep qemu | |
# Clone without history | |
- name: Clone QEMU | |
run: | | |
git clone https://gitlab.com/qemu/qemu qemu-upstream | |
cd qemu-upstream | |
git checkout "${QEMU_COMMIT_HASH}" | |
- name: Build QEMU | |
run: | | |
cd qemu-upstream | |
./configure --enable-plugins | |
cd build | |
make -j$(nproc) | |
make install | |
cd ../.. | |
- uses: dtolnay/rust-toolchain@nightly | |
- uses: actions/checkout@v4 | |
- name: Test QEMU Install | |
run: | | |
qemu-x86_64 --help | |
- name: Build and Test Tracer | |
run: | | |
cd plugins/tracer | |
cargo build -r --features=plugin-api-v1 --no-default-features || exit 0 | |
cargo build -r --features=plugin-api-v1 --no-default-features | |
cargo run --features=plugin-api-v1 --no-default-features -r --bin tracer -- -a /bin/ls -- -lah | |
cd ../.. | |
- name: Build and Test Tiny | |
run: | | |
cd plugins/tiny | |
cargo build -r --features=plugin-api-v1 --no-default-features | |
qemu-x86_64 -plugin ../../target/release/libtiny.so /bin/ls -lah | |
cd ../.. | |
test_plugins_linux_v2: | |
name: Build and Test Plugins API v2 (Linux) | |
runs-on: ubuntu-latest | |
container: ubuntu:24.04 | |
env: | |
# Hash of v2 | |
QEMU_COMMIT_HASH: fba3b490a26cb278dfa183d7fcc375746e312980 | |
steps: | |
- name: Set up Sources List | |
run: | | |
cat <<EOF > /etc/apt/sources.list.d/ubuntu.sources | |
Types: deb | |
URIs: http://archive.ubuntu.com/ubuntu/ | |
Suites: noble noble-updates noble-backports | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb | |
URIs: http://security.ubuntu.com/ubuntu/ | |
Suites: noble-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb-src | |
URIs: http://archive.ubuntu.com/ubuntu/ | |
Suites: noble noble-updates noble-backports | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb | |
URIs: http://security.ubuntu.com/ubuntu/ | |
Suites: noble-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
EOF | |
- name: Install QEMU Build Dependencies | |
run: | | |
apt -y update && \ | |
apt -y install git curl build-essential && \ | |
apt -y source qemu && \ | |
apt -y build-dep qemu | |
# Clone without history | |
- name: Clone QEMU | |
run: | | |
git clone https://gitlab.com/qemu/qemu qemu-upstream | |
cd qemu-upstream | |
git checkout "${QEMU_COMMIT_HASH}" | |
- name: Build QEMU | |
run: | | |
cd qemu-upstream | |
./configure --enable-plugins | |
cd build | |
make -j$(nproc) | |
make install | |
cd ../.. | |
- uses: dtolnay/rust-toolchain@nightly | |
- uses: actions/checkout@v4 | |
- name: Test QEMU Install | |
run: | | |
qemu-x86_64 --help | |
- name: Build and Test Tracer | |
run: | | |
cd plugins/tracer | |
cargo build -r --features=plugin-api-v2 --no-default-features || exit 0 | |
cargo build -r --features=plugin-api-v2 --no-default-features | |
cargo run --features=plugin-api-v2 --no-default-features -r --bin tracer -- -a /bin/ls -- -lah | |
cd ../.. | |
- name: Build and Test Tiny | |
run: | | |
cd plugins/tiny | |
cargo build -r --features=plugin-api-v2 --no-default-features | |
qemu-x86_64 -plugin ../../target/release/libtiny.so /bin/ls -lah | |
cd ../.. | |
test_plugins_linux_v3: | |
name: Build and Test Plugins API V3 (Linux) | |
runs-on: ubuntu-latest | |
container: ubuntu:24.04 | |
env: | |
# Hash of v3 | |
QEMU_COMMIT_HASH: 7de77d37880d7267a491cb32a1b2232017d1e545 | |
steps: | |
- name: Set up Sources List | |
run: | | |
cat <<EOF > /etc/apt/sources.list.d/ubuntu.sources | |
Types: deb | |
URIs: http://archive.ubuntu.com/ubuntu/ | |
Suites: noble noble-updates noble-backports | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb | |
URIs: http://security.ubuntu.com/ubuntu/ | |
Suites: noble-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb-src | |
URIs: http://archive.ubuntu.com/ubuntu/ | |
Suites: noble noble-updates noble-backports | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb | |
URIs: http://security.ubuntu.com/ubuntu/ | |
Suites: noble-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
EOF | |
- name: Install QEMU Build Dependencies | |
run: | | |
apt -y update && \ | |
apt -y install git curl build-essential && \ | |
apt -y source qemu && \ | |
apt -y build-dep qemu | |
# Clone without history | |
- name: Clone QEMU | |
run: | | |
git clone https://gitlab.com/qemu/qemu qemu-upstream | |
cd qemu-upstream | |
git checkout "${QEMU_COMMIT_HASH}" | |
- name: Build QEMU | |
run: | | |
cd qemu-upstream | |
./configure --enable-plugins | |
cd build | |
make -j$(nproc) | |
make install | |
cd ../.. | |
- uses: dtolnay/rust-toolchain@nightly | |
- uses: actions/checkout@v4 | |
- name: Test QEMU Install | |
run: | | |
qemu-x86_64 --help | |
- name: Build and Test Tracer | |
run: | | |
cd plugins/tracer | |
cargo build -r --features=plugin-api-v3 --no-default-features || exit 0 | |
cargo build -r --features=plugin-api-v3 --no-default-features | |
cargo run --features=plugin-api-v3 --no-default-features -r --bin tracer -- -a /bin/ls -- -lah | |
cd ../.. | |
- name: Build and Test Tiny | |
run: | | |
cd plugins/tiny | |
cargo build -r --features=plugin-api-v3 --no-default-features | |
qemu-x86_64 -plugin ../../target/release/libtiny.so /bin/ls -lah | |
cd ../.. | |
test_plugins_linux_v4: | |
name: Build and Test Plugins API v4 (Linux) | |
runs-on: ubuntu-latest | |
container: ubuntu:24.04 | |
env: | |
# Hash of v4 | |
QEMU_COMMIT_HASH: cfa3a6c54511374e9ccee26d9c38ac1698fc7af2 | |
steps: | |
- name: Set up Sources List | |
run: | | |
cat <<EOF > /etc/apt/sources.list.d/ubuntu.sources | |
Types: deb | |
URIs: http://archive.ubuntu.com/ubuntu/ | |
Suites: noble noble-updates noble-backports | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb | |
URIs: http://security.ubuntu.com/ubuntu/ | |
Suites: noble-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb-src | |
URIs: http://archive.ubuntu.com/ubuntu/ | |
Suites: noble noble-updates noble-backports | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
Types: deb | |
URIs: http://security.ubuntu.com/ubuntu/ | |
Suites: noble-security | |
Components: main universe restricted multiverse | |
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg | |
EOF | |
- name: Install QEMU Build Dependencies | |
run: | | |
apt -y update && \ | |
apt -y install git curl build-essential && \ | |
apt -y source qemu && \ | |
apt -y build-dep qemu | |
# Clone without history | |
- name: Clone QEMU | |
run: | | |
git clone https://gitlab.com/qemu/qemu qemu-upstream | |
cd qemu-upstream | |
git checkout "${QEMU_COMMIT_HASH}" | |
- name: Build QEMU | |
run: | | |
cd qemu-upstream | |
./configure --enable-plugins | |
cd build | |
make -j$(nproc) | |
make install | |
cd ../.. | |
- uses: dtolnay/rust-toolchain@nightly | |
- uses: actions/checkout@v4 | |
- name: Test QEMU Install | |
run: | | |
qemu-x86_64 --help | |
- name: Build and Test Tracer | |
run: | | |
cd plugins/tracer | |
cargo build -r --features=plugin-api-v4 --no-default-features || exit 0 | |
cargo build -r --features=plugin-api-v4 --no-default-features | |
cargo run --features=plugin-api-v4 --no-default-features -r --bin tracer -- -a /bin/ls -- -lah | |
cd ../.. | |
- name: Build and Test Tiny | |
run: | | |
cd plugins/tiny | |
cargo build -r --features=plugin-api-v4 --no-default-features | |
qemu-x86_64 -plugin ../../target/release/libtiny.so /bin/ls -lah | |
cd ../.. | |
test_plugins_windows: | |
name: Build and Test Plugins (Windows) | |
runs-on: windows-latest | |
env: | |
# QEMU 9.0.0 | |
# NOTE: This installer does not work headless | |
# QEMU_URL: "https://qemu.weilnetz.de/w64/2023/qemu-w64-setup-20231224.exe" | |
RUSTUP_URL: "https://win.rustup.rs/x86_64" | |
FEDORA_CLOUDIMG_URL: "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Cloud/x86_64/images/Fedora-Cloud-Base-39-1.5.x86_64.qcow2" | |
steps: | |
- uses: msys2/setup-msys2@v2 | |
with: | |
msystem: UCRT64 | |
update: true | |
install: git mingw-w64-ucrt-x86_64-gcc | |
location: C:\msys-custom | |
- name: Download and Install Rust | |
run: | | |
$ProgressPreference = 'SilentlyContinue' | |
Invoke-WebRequest -Uri ${{ env.RUSTUP_URL }} -OutFile rustup-init.exe | |
./rustup-init.exe --default-toolchain nightly --default-host x86_64-pc-windows-gnu -y | |
- name: Install QEMU | |
shell: msys2 {0} | |
run: | | |
pacman -Syu --noconfirm | |
pacman -Sy mingw-w64-ucrt-x86_64-qemu --noconfirm | |
- name: Test QEMU | |
run: | | |
C:\msys-custom\msys64\ucrt64\bin\qemu-system-x86_64.exe --version | |
- uses: actions/checkout@v4 | |
- name: Download Cloud Image | |
run: | | |
$ProgressPreference = 'SilentlyContinue' | |
Invoke-WebRequest -Uri ${{ env.FEDORA_CLOUDIMG_URL }} -OutFile Fedora-Cloud-Base-39-1.5.x86_64.qcow2 | |
ls | |
- name: Build and Test Tiny | |
run: | | |
cd plugins/tiny-system | |
cargo build -r --features=plugin-api-v3 --no-default-features | |
cd ../.. | |
$process = Start-Process PowerShell.exe -NoNewWindow -RedirectStandardOutput out.txt -RedirectStandardError err.txt -PassThru -ArgumentList "-Command", "C:\msys-custom\msys64\ucrt64\bin\qemu-system-x86_64.exe -machine type=q35 -m 2G -nographic -device virtio-net-pci,netdev=net0 -netdev user,id=net0,hostfwd=tcp::2222-:22 -drive if=virtio,format=qcow2,file=Fedora-Cloud-Base-39-1.5.x86_64.qcow2 -drive if=virtio,format=raw,file=.github/rsrc/seed.img -plugin target/release/tiny_system.dll" | |
echo "Sleeping 180.0 seconds until booted (boot process took 118s first time)" | |
Start-Sleep -Seconds 180.0 | |
echo "Stopping process" | |
Stop-Process -Id $process.id -ErrorAction SilentlyContinue | |
cat out.txt | |
cat err.txt |