pcbjam/.github/workflows/ci.yml
Istvan Matejcsok d677ffca51 ci: 🎡 add ci
2026-06-05 14:12:09 +02:00

98 lines
3.4 KiB
YAML

# Cold build of all KiCad WASM apps (with deps) + full e2e suites, on Ubicloud.
#
# Runs on Ubicloud's managed GitHub Actions runners. Premium runners (AMD Ryzen 9
# 7950X3D, ~2x faster) are enabled at the ACCOUNT level in the Ubicloud Console
# (GitHub Runners -> Settings -> Enable Premium Runners); jobs on the
# `ubicloud-standard-*` labels below are then auto-routed to the premium fleet with
# no change needed here.
#
# One-time setup required:
# The kicad/wxwidgets submodules are private SSH repos in the VV-EE org, which the
# default GITHUB_TOKEN cannot read. Add a repo secret `SUBMODULES_TOKEN` (a PAT with
# read access to VV-EE/kicad-source-mirror and VV-EE/wxWidgets); actions/checkout
# rewrites the SSH submodule URLs to token-authenticated HTTPS.
name: CI
on:
push:
branches: [main]
workflow_dispatch:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
build-and-test:
runs-on: ubicloud-standard-16
timeout-minutes: 240 # cold --build-deps dominates; + wx build + both suites
env:
# Stream build-script output straight to the Actions log instead of redirecting
# it to logs/<script>/<ts>.log (see scripts/common/logging.sh). Nothing consumes
# KICAD_LOG_FILE, so this is safe and gives live, greppable CI output.
KICAD_LOG_NESTED: "1"
steps:
- name: Checkout (with submodules)
uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ secrets.SUBMODULES_TOKEN }}
- name: Show disk space
run: df -h
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: 20
# 1) Cold build every KiCad WASM app + all dependencies (Docker; longest step).
# Output lands in ./output/.
- name: Build KiCad WASM (all, --build-deps)
run: ./docker/build.sh all --build-deps
# 2) Host-side wxWidgets build that produces the wxWidgets test apps consumed by
# `npm run test` (NOT produced by docker/build.sh). Auto-installs emsdk.
- name: Build wxWidgets (wxUniversal WASM)
run: ./scripts/build-wxuniversal-wasm.sh
- name: Build wxWidgets test apps
run: ./scripts/build-wasm-test.sh
# 3) Test deps + browsers (firefox for KiCad headless, chromium for wxWidgets).
- name: Install test deps
working-directory: tests
run: npm ci
- name: Install Playwright browsers
working-directory: tests
run: npx playwright install --with-deps firefox chromium
# 4) Stage KiCad artifacts from ./output into tests/apps/kicad.
- name: Setup KiCad WASM for tests
working-directory: tests
run: npm run setup:kicad
# 5) Both e2e suites. GitHub sets CI=true automatically -> workers:1, retries,
# fresh per-run web server (see playwright configs).
- name: wxWidgets e2e (npm run test)
working-directory: tests
run: npm run test
- name: KiCad e2e (npm run test:kicad)
working-directory: tests
run: npm run test:kicad
# 6) Always capture logs/screenshots for post-mortem.
- name: Upload test logs & results
if: always()
uses: actions/upload-artifact@v4
with:
name: e2e-logs
path: |
tests/logs/**
tests/test-results/**
tests/playwright-report/**
logs/**
if-no-files-found: ignore