Skip to content

feat: test against wit-bingen tests (#16) #194

feat: test against wit-bingen tests (#16)

feat: test against wit-bingen tests (#16) #194

Workflow file for this run

name: Ubuntu
on:
push:
branches:
- trunk
- main
pull_request:
branches:
- trunk
- main
workflow_dispatch:
env:
CTEST_OUTPUT_ON_FAILURE: 1
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
permissions:
contents: read
pull-requests: write
issues: write
jobs:
build:
strategy:
matrix:
include:
- os: "ubuntu-24.04"
fail-fast: false
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Cache Cargo registry
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Cache vcpkg registry
if: always()
uses: actions/cache@v4
with:
path: |
build/vcpkg_installed/
build/vcpkg_packages/
key: ${{ runner.os }}-vcpkg-${{ hashFiles('./vcpkg*.json') }}
restore-keys: |
${{ runner.os }}-vcpkg-
- name: install dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
autoconf \
autoconf-archive \
automake \
build-essential \
ninja-build
- name: Install rust dependencies
run: |
cargo install wasm-tools wit-bindgen-cli || true
- name: configure
run: |
cmake --preset linux-ninja-Debug
- name: build
run: |
cmake --build --preset linux-ninja-Debug
- name: test
working-directory: build
run: |
ctest -VV -E "wit-stub-generation-test"
- name: test-stubs-full (allowed to fail)
working-directory: build
continue-on-error: true
run: |
echo "Running wit-stub-generation-test (failures expected and will be reported)..."
ctest -VV -R "wit-stub-generation-test" > test_output.txt 2>&1 || true
cat test_output.txt
../.github/scripts/summarize-test-failures.sh test_output.txt test_summary.md
- name: Comment PR with test summary
if: github.event_name == 'pull_request'
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
const path = require('path');
// Check if summary file exists
const summaryPath = path.join('build', 'test_summary.md');
if (!fs.existsSync(summaryPath)) {
console.log('Test summary file not found, skipping PR comment');
return;
}
const summary = fs.readFileSync(summaryPath, 'utf8');
// Find existing comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const botComment = comments.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('wit-stub-generation-test Results')
);
const commentBody = `### Ubuntu Test Results\n\n${summary}\n\n---\n*Updated: ${new Date().toISOString()}*`;
if (botComment) {
// Update existing comment
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: commentBody
});
} else {
// Create new comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: commentBody
});
}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5.4.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload error logs
if: ${{ failure() || cancelled() }}
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }}-logs
path: ./**/*.log