Merge pull request #23 from novafacing/no-symbol-file-dependency #80
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 | |
- 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 | |
- name: Cache QEMU | |
id: qemu-cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
qemu-upstream | |
key: ${{ runner.os }}-qemu-v${{ matrix.version }}-${{ matrix.commit }} | |
- 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}" | |
- 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 | |
- 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: | |
# Cache MSYS2 | |
- name: Cache MSYS2 packages | |
id: msys2-cache | |
uses: actions/cache@v3 | |
with: | |
path: C:\msys-custom | |
key: ${{ runner.os }}-msys2-${{ env.QEMU_VERSION }} | |
- name: Install MSYS2 and QEMU | |
uses: msys2/setup-msys2@v2 | |
if: steps.msys2-cache.outputs.cache-hit != 'true' | |
with: | |
msystem: UCRT64 | |
update: true | |
install: git mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-qemu=${{ env.QEMU_VERSION }} | |
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: Test QEMU | |
run: | | |
C:\msys-custom\msys64\ucrt64\bin\qemu-system-x86_64.exe --version | |
- uses: actions/checkout@v4 | |
- 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 | |
- 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 |