feat(infra-standards): add self-hosted-runners skill for RunsOn migration#308
Conversation
…tion Activates on .github/workflows/*.yml file edits to document when a workflow should target self-hosted RunsOn runners vs github-hosted ones, the v3 label catalog used across JacobPEvans repos, and the prereq that the RunsOn GitHub App must have the repo in its allowlist. This is the authoring-time companion to terraform-runs-on/docs/migration-guide.md (the deployment-time playbook). The skill covers what reusable workflows in JacobPEvans/.github do with the runner_label input, how to identify whether a run actually landed on RunsOn (RUNS_ON_VERSION env var), and which workloads explicitly do NOT migrate (macOS, gh-aw lock files, disabled-schedule workflows). Assisted-by: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new infra-standards skill for guiding GitHub Actions workflow migrations to self-hosted RunsOn runners.
Changes:
- Adds
/self-hosted-runnersskill documentation. - Registers the new skill in the infra-standards plugin manifest.
- Updates the infra-standards README usage list.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
infra-standards/skills/self-hosted-runners/SKILL.md |
New RunsOn migration guidance skill. |
infra-standards/README.md |
Documents the new skill in plugin usage. |
infra-standards/.claude-plugin/plugin.json |
Registers the new skill and keywords. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Code Review
This pull request introduces the self-hosted-runners skill to the infra-standards plugin, providing documentation for using RunsOn runners in GitHub Actions. The additions include a decision matrix for runner selection, a label catalog, and YAML implementation patterns. Feedback focuses on improving documentation consistency by aligning text references with table titles and suggests avoiding hardcoded pricing to prevent the information from becoming outdated.
Three corrections caught in review of #308: 1. **YAML frontmatter description** was 306 chars on one line, exceeding the repo's markdownlint MD013 line-length limit (160). Wrapped onto multiple lines with the `>-` folded scalar form. The skill still triggers on the same content; only the line breaks change. 2. **"Silent fallback" diagnostic was wrong.** GitHub does NOT silently route a job back to github-hosted compute when a custom `runs-on=...` label is unmatched — the job hangs in `queued` state waiting for a matching runner. Rewrote the "identifying RunsOn vs github-hosted" section to describe the actual failure mode (queue stall) and point at the `_ci-gate.yml` watchdog as the safety net. 3. **Hardcoded $3.50/month estimate** would rot as App Runner / CloudWatch pricing changes. Replaced with a link to terraform-runs-on/README.md (where the canonical estimate lives). Also reworded the "do not migrate list below" reference to point at the decision table rather than a nonexistent named list. Assisted-by: Claude <noreply@anthropic.com>
Summary
Test plan