# Edit Workflow

> Apply repository conventions when editing GitHub Actions workflows.

- Skill: `ethereum/edit-workflow` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ethereum/edit-workflow`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ethereum/edit-workflow/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: ethereum (https://skillmd.com/u/ethereum)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ethereum/edit-workflow

---


# Edit Workflow

GitHub Actions conventions. Run this skill before modifying workflow files in `.github/`.

## Action Version Pinning (Required)

All actions must be pinned to commit SHA with version comment:

```yaml
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
```

- Never use version tags alone (`@v4` is wrong)
- Local actions (`./.github/actions/*`) are exempt from pinning

## Runner Selection

Self-hosted runners (`[self-hosted-ghr, size-*-x64]`) are a shared EF devops
pool — reserve them for jobs that need the capacity. Non-critical or low-load
jobs belong on GitHub-hosted runners (`ubuntu-latest`), which also avoids a
provisioning wait (~2.5 min) if the self-hosted warm pool is exhausted.

- **Pattern**: lightweight job (short runtime, no heavy parallelism) →
  `ubuntu-latest` (e.g. `spec-tools` in #3177).
- **Anti-pattern**: defaulting a quick gate, lint, or cache-restore job to
  `size-xl-x64` "to be safe".
- **Exception**: a job may need self-hosted for reasons other than load, e.g.
  Docker Hub pulls from GHR egress IPs to dodge per-IP rate limits (#3185
  keeps push runs self-hosted while PR runs use `ubuntu-latest`).

If unsure which runner a job needs, flag it and ask instead of guessing.

## Validation

Run `just lint-actions` before committing to validate YAML syntax and structure.

