Workflow Triggers

All workflows in .github/workflows/. Grouped by function, with every trigger listed.

Plain-text version: docs/workflow-triggers.txt
Auto-generated on 2026-06-09 from .github/workflows/ and config/workflow-quota-costs.yml


Mirror Chain

WorkflowSynopsisFileScheduleAlso triggers on
Mirror Artifacts ▶ RunMirrors GitHub Releases, Flatpak packages, and RPM packages from Interested-Deving-1896 repos to their OSP and OOC counterparts.mirror-artifacts.ymlEvery 8h at :10dispatch
Mirror Orgs ▶ RunMirrors all repos from Interested-Deving-1896 to OpenOS-Project-OSP and OpenOS-Project-Ecosystem-OOC using bare clone + push --mirror.mirror-orgs-full.ymlDaily 02:17dispatch
Mirror Watchdog ▶ RunTriggers when any mirror workflow fails — waits 5 minutes then retries once. Surfaces persistent failures in the Actions tab without consuming quota on repeated retries.mirror-orgs-watchdog.ymlMirror Interested-Deving-1896 → OSP completes · Mirror Orgs completes · Mirror OSP → GitLab completes · Mirror Releases completes · Mirror Artifacts completes
Mirror OSP → GitLab ▶ RunMirrors every repo in OpenOS-Project-OSP to its GitLab counterpart under openos-project, creating the GitLab project in the correct subgroup if it does not exist yet.mirror-osp-to-gitlab.ymlEvery 8h at :23Add Mirror Repo completes · dispatch
Mirror to OpenOS-Project-Ecosystem-OOC ▶ RunBare-clones every repo in OpenOS-Project-OSP and git push --mirror into OpenOS-Project-Ecosystem-OOC, completing the second hop of the three-org mirror chain.mirror-osp-to-ooc.yamlEvery 6h at :15dispatch
Mirror Releases ▶ RunMirrors GitHub Releases (tags + release notes + assets) from Interested-Deving-1896 repos to their OSP and OOC counterparts.mirror-releases.ymlEvery 6h at :03dispatch
Mirror Interested-Deving-1896 → OSP ▶ RunBare-clones every repo in Interested-Deving-1896 and git push --mirror into OpenOS-Project-OSP, syncing all branches, tags, and refs exactly.mirror-to-osp.ymlEvery 6h at :13dispatch

OSP-Bound Repo Management

WorkflowSynopsisFileScheduleAlso triggers on
Add Mirror Repo ▶ RunAdds a new repo to the three-org mirror chain (Interested-Deving-1896 → OSP → OOC) by creating the repo in each org, setting up webhooks, and registering it in gitlab-subgroups.yml.add-mirror-repo.ymldispatch
Check OSP-Bound CI Status ▶ RunChecks CI status across all OSP-bound repos and reports failing workflows. Triggers resolve-failures when failures are detected.check-osp-ci.ymlDaily 09:05Mirror Interested-Deving-1896 → OSP completes · Add Mirror Repo completes · dispatch
Setup OSP Mirror Workflows ▶ RunEnsures all repos in OpenOS-Project-OSP have the correct mirror workflow files and secrets configured for the OSP→OOC mirror chain.setup-osp-mirrors.ymlEvery 6h at :45dispatch

Fork & Import Sync

WorkflowSynopsisFileScheduleAlso triggers on
Import Repository ▶ RunPlatform-agnostic repo importer — clones any public or authenticated git URL into Interested-Deving-1896, optionally mirrors through the OSP→OOC chain and registers for ongoing sync.import-repo.ymldispatch
Sync btrfs-devel Branches ▶ RunSyncs tracked btrfs-devel branches from the upstream kernel tree into the btrfs-dwarfs-framework fork.sync-btrfs-devel-branches.ymlEvery 6h at :02dispatch
Sync All Forks ▶ RunSyncs all branches of every fork owned by Interested-Deving-1896 with their upstream via the GitHub merge-upstream API, falling back to force-reset on divergence.sync-forks.ymlDaily 06:07dispatch
Sync from GitLab ▶ RunPulls changes from the GitLab mirror back to GitHub when GitLab CI has committed changes (e.g. generated files, CI artifacts).sync-from-gitlab.ymlDaily 04:22dispatch
Sync pieroproietti Forks ▶ RunSyncs all penguins-eggs forks owned by Interested-Deving-1896 with their upstream pieroproietti sources via merge-upstream.sync-pieroproietti-forks.ymlEvery 8h at :07dispatch
Sync Registered Imports ▶ RunRe-syncs all repos listed in registered-imports.json — bare-clones each source URL and pushes all branches and tags to Interested-Deving-1896.sync-registered-imports.ymlEvery 6h at :55dispatch
Sync Registry Sources ▶ RunRegistry-driven upstream sync — reads a JSON registry of upstream sources and syncs each repo via merge-upstream or force-reset. Agnostic generalisation of sync-pieroproietti-forks.sync-registry-sources.ymlDaily 03:05dispatch
Sync Upstream Sources ▶ RunReads the Origins section of every OSP-bound repo and syncs each referenced external fork to its upstream HEAD via merge-upstream or force-reset.sync-upstream-sources.ymlDaily 01:37dispatch
Upstream Direct Commits from OSP + OOC ▶ RunDetects commits pushed directly to OSP/OOC default branches (without a PR) and opens PRs against Interested-Deving-1896 to reconcile them.upstream-commits.ymlEvery 6h at :47dispatch
Upstream PRs from OSP + OOC ▶ RunDetects commits on OSP and OOC default branches that are not present in Interested-Deving-1896 and opens PRs to bring them upstream.upstream-prs.ymlEvery 6h at :33dispatch

GitLab Sync

WorkflowSynopsisFileScheduleAlso triggers on
Sync to GitLab Variant ▶ RunVariant of Sync to GitLab that uses a different token and push strategy — used when the primary sync is blocked or for testing.sync-to-gitlab-variant.ymlEvery 8h at :50push to config/ota-registry.yml, config/ota-blocklist.yml, .ota/schema.yml (+2 more) · dispatch
Sync to GitLab ▶ RunPushes the Interested-Deving-1896/fork-sync-all repo to its GitLab mirror at openos-project/ops/fork-sync-all.sync-to-gitlab.ymlDaily 09:17dispatch

README Management

WorkflowSynopsisFileScheduleAlso triggers on
Create Missing READMEs ▶ RunCreates README.md from the standard template for OSP-bound repos that have no README, with placeholder sections for human-owned content.create-readmes.ymlDaily 07:08Add Mirror Repo completes · Import Repository completes · Clone Org completes · Merge Repos into Monorepo completes · dispatch
Inject Built-with-Ona Badges ▶ RunAdds a Built-with-Ona badge to README.md for all repos in Interested-Deving-1896 that are missing it. Skips repos that already have the badge.inject-badges.ymlDaily 08:15Mirror OSP → GitLab completes · dispatch
LTS README Standardisation ▶ RunStandardises README.md structure for LTS-tagged repos, ensuring they follow the LTS template with correct version badges and support tables.lts-readmes.ymlMonthly 1st 03:19Rebuild LTS Branch (penguins-eggs) completes · dispatch
README Wizard ▶ RunAI-guided README authoring — writes or rewrites a README for a specific repo according to custom instructions (audience, tone, sections), respecting existing human-owned markers.readme-wizard.ymldispatch
Translate READMEs ▶ RunTranslates README.md files for OSP-bound repos into additional languages using GitHub Models API. Writes translated files alongside the English original.translate-readmes.ymlDaily 10:43Update READMEs completes · Add Mirror Repo completes · Import Repository completes · Clone Org completes · Merge Repos into Monorepo completes · Sync All Forks completes · Sync Registered Imports completes · Sync from GitLab completes · Sync pieroproietti Forks completes · Sync Upstream Sources completes · Sync penguins-eggs docs to penguins-eggs-book completes · dispatch
Update READMEs ▶ RunRegenerates AI-owned sections (what-it-does, architecture, ci, mirror-chain, etc.) in README.md for all OSP-bound repos, preserving human-owned sections.update-readmes.ymlDaily 03:15push to config/gitlab-subgroups.yml, config/template-manifest.yml · Sync Registered Imports completes · dispatch
Validate README Render ▶ RunChecks README.md for rendering issues — leaked log lines, unclosed fences, bare brackets, raw angle brackets, unclosed AI markers, missing H1, and empty sections.validate-readme-render.ymlpush to README.md · Update READMEs completes · dispatch

CI & Failure Resolution

WorkflowSynopsisFileScheduleAlso triggers on
Check GitLab CI Sync ▶ RunCompares paired jobs in .gitlab-ci.yml against config/workflow-sync.yml and reports drift — scripts with changed entry points, mismatched cadence rules, or jobs missing from either side.check-gitlab-sync.ymldispatch
Notification Poller ▶ RunPolls GitHub notifications for unread CI failure notifications and triggers resolve-failures immediately when any are found.notify-poller.ymlEvery 4h at :32dispatch
PR Automation ▶ RunApplies size labels, path-based labels, reviewer auto-assignment, risky pattern detection, and auto-merge for low-risk PRs on every PR open or update.pr-automation.ymlpull_request
Rate-Limit Re-trigger ▶ RunScans recently-failed workflow runs, identifies those that failed due to rate limiting, and re-triggers them after their quota reset epoch.rate-limit-rerun.ymlEvery 4h at :05dispatch
Rate Limit Status ▶ RunQueries current rate limit status for GitHub REST, GitLab, and GitHub Models APIs. Exits non-zero if any platform is below 10% remaining.rate-limit-status.ymldispatch
Rebuild LTS Branch (penguins-eggs) ▶ RunRebases the all-features branch onto the upstream master after each pieroproietti sync, then force-pushes the result to the lts branch.rebase-lts.ymlSync pieroproietti Forks completes · dispatch
Resolve CI Failures ▶ RunAnalyses CI failure patterns across OSP-bound repos and applies automated fixes (dependency updates, config corrections, workflow patches) where possible.resolve-failures.ymlDaily 07:43dispatch

Maintenance & Housekeeping

WorkflowSynopsisFileScheduleAlso triggers on
Cancel Runs After Token Rotation ▶ RunCancels queued and in-progress runs that hold the old (now-invalid) token immediately after Rotate Secret Token completes, preventing Bad credentials failures.cancel-post-rotation.ymlRotate Secret Token completes
Cleanup Stale Branches ▶ RunDeletes branches that have been merged into the default branch across all repos in Interested-Deving-1896, OSP, and OOC.cleanup-branches.ymlMonthly 1st 04:29dispatch
Cleanup Template Pollution ▶ RunRemoves files incorrectly propagated from fork-sync-all to consumer repos via the template sync pipeline, across all three GitHub orgs and GitLab.cleanup-pollution.ymldispatch
Generate OSP Dependency Graph ▶ RunScans all OSP-bound repos for package.json and requirements.txt files and generates a dependency graph showing inter-repo relationships.generate-dep-graph.ymlWeekly Sun 03:10dispatch
Reconcile Org References ▶ RunRewrites org/repo references in OSP and OOC mirrors to point at the correct org, fixing stale Interested-Deving-1896 references left by the mirror process.reconcile-org-refs.ymlDaily 05:50dispatch
Rotate Secret Token ▶ RunRotates GitHub PATs and GitLab tokens stored as org/repo secrets. Validates the new token before committing, then triggers Cancel Runs After Token Rotation to clear stale runs.rotate-token.ymldispatch
Sync Template ▶ RunSyncs fork-sync-all's file tree into target repos. Three modes — create (new repo + mirror chain), inject (copy into existing repo), propagate (push-triggered sync to all consumers in template-consumers.yml).sync-template.ymlpush to .devcontainer/**, .ona/**, config/template-manifest.yml · dispatch
Token Health Monitor ▶ RunChecks expiry dates for all tracked PATs and GitLab tokens. Opens a GitHub issue labelled token-monitor when any token expires within 45 days.token-health.ymlWeekly Mon 09:24dispatch
Update Infrastructure Dependencies ▶ RunRuns Dependabot-style updates for GitHub Actions versions across all workflow files and opens a grouped PR.update-infra-deps.ymlWeekly Mon 06:11dispatch
Update Workflow Triggers Doc ▶ RunRegenerates docs/workflow-triggers.md and docs/workflow-triggers.txt whenever a workflow file changes on main. Commits the result directly to main.update-workflow-triggers-doc.ymlpush to .github/workflows/**, config/workflow-quota-costs.yml · dispatch
Upstream Workflow Proposal ▶ RunScans OSP-bound repos for new workflow patterns not present in fork-sync-all and opens a PR proposing them as template skeletons.upstream-workflow-proposal.ymlWeekly Mon 06:06dispatch
Validate Config ▶ RunValidates all config files (gitlab-subgroups.yml, workflow-sync.yml, priority-tiers.yml, registered-imports.json) on every push that touches them. Blocks merges on invalid config.validate-config.ymlpush to config/gitlab-subgroups.yml, config/workflow-sync.yml, config/workflow-cost-profiles.yml (+16 more) · pull_request · dispatch

Full Pipeline

WorkflowSynopsisFileScheduleAlso triggers on
Critical Deploy ▶ RunFast-lane workflow for deploying critical fixes when the system is degraded — commits and pushes changes, clears the queue aggressively, then dispatches priority workflows.critical-deploy.ymldispatch
Full Chain Flush ▶ RunOrchestrates the complete mirror chain in sequence — mirror-to-osp → mirror-osp-to-ooc → mirror-osp-to-gitlab — with quota checks between each stage.full-chain-flush.ymlMonthly 1st 05:17dispatch
Pre-Flush Prep ▶ RunPrepares the system for a clean full-chain-flush — cancels stale runs, merges ready PRs, validates config, cleans merged branches, removes template pollution, then dispatches full-chain-flush when quota is sufficient.pre-flush-prep.ymldispatch

Utility / On-Demand

WorkflowSynopsisFileTrigger
Cancel Stale Runs ▶ RunCancels queued and in-progress workflow runs older than MAX_AGE_MINUTES (default 90) or created before a fix commit, preventing stale runs from burning quota.cancel-stale-runs.ymldispatch
Clone Org ▶ RunClones all repositories from an org or user on any supported platform (GitHub, GitLab, Bitbucket, Gitea) into Interested-Deving-1896.clone-org.ymldispatch
Deploy Book ▶ RunBuilds the mdBook documentation site from DOCS/ and deploys it to GitHub Pages at interested-deving-1896.github.io/fork-sync-all/.deploy-book.ymlpush to DOCS/**, book.toml, README.md (+2 more) · dispatch
Docker → Incus Migration ▶ RunScans repos for Docker artifacts (Dockerfile, docker-compose.yml) and replaces them with Incus equivalents. Runs after Add Mirror Repo and weekly.docker-to-incus.ymlAdd Mirror Repo completes · dispatch
Enforce Agnostic Vendor ▶ RunScans vendor/ for distro-specific hardcoded fallback values in shell, YAML, and TypeScript. All vendored components must be deployment-agnostic.enforce-agnostic-vendor.ymlpush to vendor/**, scripts/check-vendor-agnostic.sh, .github/workflows/enforce-agnostic-vendor.yml · pull_request · dispatch
Fork KDE Neon Repos ▶ RunOne-shot workflow that clones the 6 KDE Invent neon repos into Interested-Deving-1896 and pushes them through the OSP mirror chain. Ongoing re-sync handled by sync-registered-imports.fork-neon-repos.ymldispatch
Generate Book Pages ▶ RunRegenerates DOCS/generated/ pages from config sources (workflow-quota-costs.yml, priority-tiers.yml, gitlab-subgroups.yml, registered-imports.json) and commits the result.generate-book-pages.ymlpush to config/workflow-quota-costs.yml, config/workflow-priority-tiers.yml, config/gitlab-subgroups.yml (+2 more) · dispatch
Generate NotebookLM Content ▶ RunGenerates NotebookLM content artifacts (audio, video, slides, infographic, quiz, flashcards, report) for a given notebook and uploads them to a GitHub Release.generate-notebooklm.ymldispatch
GitLab Storage Scan ▶ RunScans all projects under openos-project on GitLab and reports storage usage. Useful for diagnosing when the namespace approaches its 10 GiB limit.gl-storage-scan.ymldispatch
List Chromium GitLab Repos ▶ RunLists all projects under the Chromium_Browser_OS_Deving GitLab group. Informational only — used to audit what has been mirrored.list-chromium-repos.ymldispatch
Merge Repos into Monorepo ▶ RunMerges multiple git repositories into a single monorepo, preserving full commit history, tags, and Git LFS objects. Manual dispatch only.merge-to-monorepo.ymldispatch
OTA Discover ▶ RunScans forks of fork-sync-all for .ota/config.yml with enabled: true and adds newly discovered repos to config/ota-registry.yml.ota-discover.ymldispatch
OTA Opt-In ▶ RunPropagated to opted-in forks. Fork owners run this once to create .ota/config.yml and open a registration PR against fork-sync-all's OTA registry.ota-opt-in.ymldispatch
OTA Release ▶ RunTriggered on semver tag push. Assembles and delivers OTA updates to all opted-in repos in config/ota-registry.yml, then updates CHANGELOG.md with release notes.ota-release.ymlpush to (any) · dispatch
OTA Self-Update ▶ RunPropagated to opted-in forks. Pulls the latest OTA release from fork-sync-all and applies it to the fork's workflow files.ota-self-update.ymldispatch
Pipeline Telemetry ▶ RunPost-run observability workflow. Fetches completed run data, builds a span tree (workflow→jobs→steps), computes Thoth-equivalent metrics, parses log severity, writes a step summary and trace artifact, and upserts a rolling metrics issue.pipeline-telemetry.ymlFull Chain Flush completes · Pre-Flush Prep completes · Mirror Interested-Deving-1896 → OSP completes · Mirror OSP → GitLab completes · Mirror to OpenOS-Project-Ecosystem-OOC completes · Reconcile Org References completes · Check OSP-Bound CI Status completes · Sync All Forks completes · Sync Registered Imports completes · Pre-Mirror CI Gate completes · Verify Mirror Integrity completes · Post-Flush Verification completes · dispatch
Post-Flush Verification ▶ RunEnd-to-end health check after full-chain-flush — mirror integrity across all three pairs, CI status on I-D-1896 OSP-bound repos, quota health, and workflow queue health.post-flush-prep.ymldispatch
Pre-Mirror CI Gate ▶ RunChecks CI status on all OSP-bound repos in Interested-Deving-1896 before mirroring. Dispatches resolve-failures for red repos, waits, then re-checks. Blocks the mirror if repos are still failing.pre-mirror-ci-gate.ymldispatch
Queue Manager ▶ RunDeduplicates queued workflow runs (keeps newest per workflow) and evicts runs queued longer than STALE_QUEUE_MIN (default 25 min) to prevent quota exhaustion cascades.queue-manager.ymldispatch
Quota Monitor ▶ RunPolls GitHub quota and optionally dispatches a target workflow once quota recovers above a configurable threshold. Dispatch-only — never scheduled.quota-monitor.ymldispatch
Quota Reserve ▶ RunCancels low-priority queued runs when remaining quota drops below RESERVE_FLOOR (default 1000). Uses per-workflow min_quota from workflow-quota-costs.yml for cost-aware cancellation.quota-reserve.ymldispatch
Rebase PRs ▶ RunRebases open PRs in Interested-Deving-1896 onto their base branch when they fall behind, keeping PRs mergeable without manual intervention.rebase-prs.ymlValidate Config completes · dispatch
Refresh NotebookLM Auth ▶ RunRotates the short-lived __Secure-1PSIDTS cookie in NOTEBOOKLM_AUTH_JSON weekly and writes the updated state back to the repo secret.refresh-notebooklm-auth.ymldispatch
Repo Manifest ▶ RunExports a manifest of all repos in an org, or imports repos from a manifest into a target GitHub org. Supports multi-platform bulk import.repo-manifest.ymldispatch
Setup Dashboard Variables ▶ RunSets all VITE_* repository variables required by the infra-dashboard public-dashboard build. Safe to re-run — blank inputs leave existing variables unchanged.setup-dashboard-vars.ymldispatch
Setup GitLab CI Schedules ▶ RunReplaces all existing GitLab pipeline schedules in openos-project/ops/fork-sync-all with the 3 consolidated CADENCE-based schedules. Safe to re-run.setup-gitlab-schedules.ymldispatch
Shallow Reclone Large GitLab Mirrors ▶ RunReduces GitLab storage usage by replacing full git history on large mirror projects with a shallow clone. Run when openos-project approaches its 10 GiB storage limit.shallow-reclone-chromium.ymldispatch
Sync penguins-eggs docs to penguins-eggs-book ▶ RunTriggered by repository_dispatch from penguins-eggs when docs/chromiumos/ changes on all-features. Syncs the updated docs into the penguins-eggs-book repo.sync-eggs-docs-to-book.ymldispatch
Translate Docs ▶ RunTranslates DOCS/ mdBook pages into a target language using GitHub Models API. Writes translated files to DOCS// and upserts a language section in SUMMARY.md.translate-docs.ymlDeploy Book completes · dispatch
Trigger Artifact Mirror ▶ RunDispatches mirror-artifacts immediately when a release is published in this repo, so OSP and OOC receive the release without waiting for the next scheduled run.trigger-artifact-mirror.yml
Update Quota Cost Registry ▶ RunReads quota-instrument records from job logs, computes observed p50/p95 REST costs per workflow, and commits updated values to workflow-quota-costs.yml weekly.update-quota-costs.ymldispatch
Verify Mirror Integrity ▶ RunCompares default-branch HEAD SHAs between source and destination for all OSP-bound repos after a mirror stage. Reports mismatches as warnings; configurable hard-fail mode.verify-mirror-integrity.ymldispatch

Schedule Summary (UTC)

TimeFrequencyWorkflow
01:37DailySync Upstream Sources ▶ Run
02:17DailyMirror Orgs ▶ Run
03:05DailySync Registry Sources ▶ Run
Sun 03:08WeeklyDocker → Incus Migration ▶ Run
Sun 03:10WeeklyGenerate OSP Dependency Graph ▶ Run
03:15DailyUpdate READMEs ▶ Run
1st 03:19MonthlyLTS README Standardisation ▶ Run
at :05Every 4hRate-Limit Re-trigger ▶ Run
04:22DailySync from GitLab ▶ Run
1st 04:29MonthlyCleanup Stale Branches ▶ Run
at :32Every 4hNotification Poller ▶ Run
05:10DailyRebase PRs ▶ Run
Mon 05:15WeeklyOTA Self-Update ▶ Run
1st 05:17MonthlyFull Chain Flush ▶ Run
05:50DailyReconcile Org References ▶ Run
at :02Every 6hSync btrfs-devel Branches ▶ Run
at :03Every 6hMirror Releases ▶ Run
Mon 06:06WeeklyUpstream Workflow Proposal ▶ Run
06:07DailySync All Forks ▶ Run
Mon 06:11WeeklyUpdate Infrastructure Dependencies ▶ Run
at :13Every 6hMirror Interested-Deving-1896 → OSP ▶ Run
at :15Every 6hMirror to OpenOS-Project-Ecosystem-OOC ▶ Run
Tue 06:17WeeklyRefresh NotebookLM Auth ▶ Run
at :33Every 6hUpstream PRs from OSP + OOC ▶ Run
06:38DailyOTA Discover ▶ Run
at :45Every 6hSetup OSP Mirror Workflows ▶ Run
at :47Every 6hUpstream Direct Commits from OSP + OOC ▶ Run
at :55Every 6hSync Registered Imports ▶ Run
07:08DailyCreate Missing READMEs ▶ Run
07:43DailyResolve CI Failures ▶ Run
Mon 08:00WeeklyUpdate Quota Cost Registry ▶ Run
at :07Every 8hSync pieroproietti Forks ▶ Run
at :10Every 8hMirror Artifacts ▶ Run
08:15DailyInject Built-with-Ona Badges ▶ Run
at :23Every 8hMirror OSP → GitLab ▶ Run
at :50Every 8hSync to GitLab Variant ▶ Run
09:05DailyCheck OSP-Bound CI Status ▶ Run
09:17DailySync to GitLab ▶ Run
Mon 09:24WeeklyToken Health Monitor ▶ Run
10:43DailyTranslate READMEs ▶ Run
11:15DailyTranslate Docs ▶ Run
Every 30 minQueue Manager ▶ Run
Every 30 minQuota Reserve ▶ Run