Skip to content

Add skill-runtime evals: execute an exported SKILL.md in a real runtime #88

Add skill-runtime evals: execute an exported SKILL.md in a real runtime

Add skill-runtime evals: execute an exported SKILL.md in a real runtime #88

Workflow file for this run

name: Non-Windows
on:
push:
branches:
- main
pull_request:
permissions:
contents: read
jobs:
build:
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
os:
- macos-latest
- ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24.19.0
cache: npm
- name: Validate lockfile portability
run: npm run check:lockfile
- name: Validate source installer guardrails
run: |
bash -n install.sh
set +e
output="$(SKILL_RECORDER_COMMIT=main bash install.sh 2>&1)"
status=$?
set -e
if [ "$status" -eq 0 ]; then
echo "install.sh accepted a mutable source reference" >&2
exit 1
fi
printf '%s\n' "$output" | grep -q "full 40-character"
- name: Test commit-pinned source installation
env:
SKILL_RECORDER_COMMIT: ${{ github.event.pull_request.head.sha || github.sha }}
SKILL_RECORDER_INSTALL_ROOT: ${{ runner.temp }}/skill-recorder-source
SKILL_RECORDER_NO_LAUNCH: "1"
run: bash install.sh
- name: Verify macOS relaunch app bundle
if: runner.os == 'macOS'
run: |
app="$HOME/Applications/Skill Recorder (Source).app"
stub="$app/Contents/MacOS/skill-recorder-source"
plist="$app/Contents/Info.plist"
test -d "$app"
test -x "$stub"
plutil -lint "$plist"
- run: npm ci --ignore-scripts=false --dangerously-allow-all-scripts=false --strict-allow-scripts
- name: Cache compliance source downloads
uses: actions/cache@v4
with:
path: .compliance-cache
key: compliance-${{ runner.os }}-${{ hashFiles('third_party/compliance-policy.json') }}
restore-keys: compliance-${{ runner.os }}-
# macOS arm64 is a release target, so it must be able to produce the complete
# corresponding-source bundle. Linux installs from source and only needs the
# license inventory.
- name: Prepare compliance materials (release target)
if: runner.os == 'macOS'
run: npm run compliance:prepare
- name: Prepare compliance licenses (source-install platform)
if: runner.os != 'macOS'
run: npm run compliance:licenses
- name: Verify platform license coverage
run: |
node --input-type=module -e "
import { existsSync, readFileSync } from 'node:fs';
const inventory = JSON.parse(readFileSync('.compliance/LICENSE-INVENTORY.json'));
const libvips = inventory.packages.find(({ name }) =>
name.startsWith('@img/sharp-libvips-'));
if (!libvips || !libvips.licenseSource.includes('licenses/LGPL-3.0.txt'))
throw new Error('Platform Sharp/libvips LGPL coverage is missing');
if (!existsSync('.compliance/licenses/LGPL-3.0.txt'))
throw new Error('Canonical LGPL-3.0 text is missing');
const wasm = inventory.packages.find(({ name }) => name === '@img/sharp-wasm32');
if (wasm) {
for (const term of ['LICENSE', 'licenses/LGPL-3.0.txt', 'canonical SPDX MIT text'])
if (!wasm.licenseSource.includes(term))
throw new Error('@img/sharp-wasm32 license term ' + term + ' is unresolved');
}
const native = JSON.parse(readFileSync('.compliance/NATIVE-COMPONENTS.json'));
if (native.packages.length !== 1)
throw new Error('Exactly one native payload must be selected');
if (!native.packages[0].name.endsWith('-' + process.arch))
throw new Error('Native payload does not match the runner architecture');
for (const excluded of native.excludedFromArtifacts)
if (native.packages[0].name === excluded)
throw new Error('An excluded WASM package was selected as the native payload');
"
- name: Verify optional window provider
run: >-
node --input-type=module -e
"const m = await import('get-windows');
if (typeof m.activeWindow !== 'function')
throw new Error('get-windows activeWindow export is unavailable')"
- run: npm test
- run: npm run build