Skip to main content
Version: 028-rc10

CI Overview

The CI system builds Yocto images for all supported machines, runs integration tests, mirrors release tags, and publishes artifacts to S3. All behavior is driven from a single source of truth — .github/machines.json — from which most workflow files are generated.

Workflow Map

TAG PUSH (0* or *-rc*)
tag-scarthgap.yaml
├── sync → sync-pantavisor.yaml mirror tag to pantavisor/pantavisor
└── release → release.yaml (after sync)
├── build × N machines → buildkas-upload.yaml (kas build + S3 upload)
├── pvtest-local → call-pvtests.yaml
├── pvtest-remote → call-pvtests.yaml (after local)
└── summary upload per-machine badges to S3

tag-changelogs.yaml (workflow_run, fires after tag-scarthgap completes)
└── changelog render CHANGELOG-NNN.md, update GitHub Release, open PR to master


ON PUSH (master)
onpush-scarthgap.yaml
└── build × onpush machines → buildkas-target.yaml (kas build, artifacts only)


MANUAL (workflow_dispatch)
manual-scarthgap.yaml
└── build × all manual machines → buildkas-target.yaml

manual-pvtests.yaml
├── build docker-x86_64-scarthgap → buildkas-target.yaml
└── start-pvtest → call-pvtests.yaml


SCHEDULED
schedule-pvtests.yaml daily 02:00
├── build docker-x86_64-scarthgap → buildkas-target.yaml
├── local → call-pvtests.yaml
└── remote → call-pvtests.yaml (after local)

schedule-updates.yaml every 8 h
└── check-and-update bump SRCREVs via update-components.sh, open PR if changed

schedule-updatemachines.yaml every 8 h + 15 min
└── updaterelease run makemachines + makeworkflows, open PR if changed

Workflow Files

FileTriggerRole
tag-scarthgap.yamltag pushOrchestrator: sync → release
release.yamlworkflow_callBuild matrix + pvtests + badge upload
tag-changelogs.yamlworkflow_run after tag-scarthgapChangelog generation and GitHub Release
sync-pantavisor.yamlworkflow_callMirror tag to pantavisor/pantavisor
onpush-scarthgap.yamlpush to masterBuild matrix for onpush machines
manual-scarthgap.yamlworkflow_dispatchBuild any machine on demand
manual-pvtests.yamlworkflow_dispatchBuild + run pvtests on demand
schedule-pvtests.yamlcron daily 02:00Nightly build + full pvtest run
schedule-updates.yamlcron every 8 hSRCREV bump PRs
schedule-updatemachines.yamlcron every 8 h + 15 minkas config + workflow regen PRs
buildkas-upload.yamlworkflow_callReusable: build + S3 upload (tag builds)
buildkas-target.yamlworkflow_callReusable: build + GitHub artifacts (dev builds)
call-pvtests.yamlworkflow_callReusable: run pvtests suite

Scripts

ScriptPurpose
makemachinesFlatten KAS config fragments into kas/build-configs/release/*.yaml
makeworkflowsRegenerate onpush-*, manual-*, and release.yaml from machines.json
make-tag-matrix.pyGenerate release.yaml (build matrix + pvtests + summary)
make-onpush-matrix.pyGenerate onpush-scarthgap.yaml
make-manual-dispatch.pyGenerate manual-scarthgap.yaml
makecommitAudit layer changes and draft PR description
update-components.shFetch latest SRCREVs for tracked components
upload.shPush build artifacts and update releases.json on S3
upload-badgesWrite per-machine badge JSON to S3 after a tag build
sync-pantavisor-tag.shPush the tag to pantavisor/pantavisor via PAT
make-changelog.shRender a CHANGELOG section for a given tag
update-readme-board.pyRegenerate the workflow status table in docs/ci/status.md

Runners and Container

All builds run on self-hosted runners inside the ghcr.io/pantacor/kas/kas:next-v7 container. Shared sstate-cache and download directories are mounted at /shared/sstate and /shared/dldir to speed up incremental builds. Summary and badge jobs run on GitHub-hosted ubuntu-latest.

  • machines.mdmachines.json schema, adding boards, workflow generation
  • builds.md — build engines, artifact types, S3 layout, pvtests
  • changelog.md — changelog generator and release notes
  • tag-sync.md — tag mirror to pantavisor/pantavisor
  • status.md — live CI status badges