Skip to content

Add plugins API V4

Add plugins API V4 #74

Workflow file for this run

name: CI
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
env:
CARGO_TERM_COLOR: always
jobs:
test_plugins_linux:
name: Build and Test Plugins API v${{ matrix.version }} (Linux)
runs-on: ubuntu-latest
container: ubuntu:24.04
strategy:
matrix:
include:
- version: 1
commit: fb691b8cbabf5bde7d25a7f720d5ec7d5b1341e1
- version: 2
commit: fba3b490a26cb278dfa183d7fcc375746e312980
- version: 3
commit: 7de77d37880d7267a491cb32a1b2232017d1e545
- version: 4
commit: cfa3a6c54511374e9ccee26d9c38ac1698fc7af2
env:
QEMU_COMMIT_HASH: ${{ matrix.commit }}
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
# Cache apt packages
- name: Cache APT packages
id: apt-cache
uses: actions/cache@v3
with:
path: /var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('/etc/apt/sources.list.d/ubuntu.sources') }}
- 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
# Cache QEMU source and build
- name: Cache QEMU
id: qemu-cache
uses: actions/cache@v3
with:
path: |
qemu-upstream
qemu-upstream/build
key: ${{ runner.os }}-qemu-v${{ matrix.version }}-${{ matrix.commit }}
# Clone only if cache miss
- name: Clone QEMU
if: steps.qemu-cache.outputs.cache-hit != 'true'
run: |
git clone https://gitlab.com/qemu/qemu qemu-upstream
cd qemu-upstream
git checkout "${QEMU_COMMIT_HASH}"
# Build only if cache miss
- name: Build QEMU
if: steps.qemu-cache.outputs.cache-hit != 'true'
run: |
cd qemu-upstream
./configure --enable-plugins
cd build
make -j$(nproc)
make install
cd ../..
- uses: dtolnay/rust-toolchain@nightly
- uses: actions/checkout@v4
# Cache Rust dependencies
- name: Cache Rust dependencies
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-rust-v${{ matrix.version }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-rust-v${{ matrix.version }}-
- name: Test QEMU Install
run: |
qemu-x86_64 --help
- name: Build and Test Tracer
run: |
cd plugins/tracer
cargo build -r --features=plugin-api-v${{ matrix.version }} --no-default-features || exit 0
cargo build -r --features=plugin-api-v${{ matrix.version }} --no-default-features
cargo run --features=plugin-api-v${{ matrix.version }} --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-v${{ matrix.version }} --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_VERSION: 9.1.2-1
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
# Cache MSYS2 packages
- name: Cache MSYS2 packages
uses: actions/cache@v3
with:
path: C:\msys-custom\msys64\var\cache\pacman\pkg
key: ${{ runner.os }}-msys2-${{ env.QEMU_VERSION }}
- 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=${QEMU_VERSION} --noconfirm
- name: Test QEMU
run: |
C:\msys-custom\msys64\ucrt64\bin\qemu-system-x86_64.exe --version
- uses: actions/checkout@v4
# Cache downloaded Fedora image
- name: Cache Fedora Cloud Image
id: fedora-cache
uses: actions/cache@v3
with:
path: Fedora-Cloud-Base-39-1.5.x86_64.qcow2
key: fedora-cloud-39-1.5
- name: Download Cloud Image
if: steps.fedora-cache.outputs.cache-hit != 'true'
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri ${{ env.FEDORA_CLOUDIMG_URL }} -OutFile Fedora-Cloud-Base-39-1.5.x86_64.qcow2
ls
# Cache Rust dependencies for Windows
- name: Cache Rust dependencies
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-rust-
- 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