Skip to content

Add plugins API V4

Add plugins API V4 #70

Workflow file for this run

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