Merge pull request #21 from novafacing/plugins-v4 #75
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: | |
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 |