| name | github-workflow |
| description | Write and edit GitHub Actions workflow files. Use when creating new workflows, editing existing .github/workflows/*.yml files, or setting up CI/CD pipelines. Triggers on requests like "create a workflow", "add GitHub Actions", "set up CI", or "edit the workflow file". |
GitHub Workflow
Write clear, minimal GitHub Actions workflow files.
Naming Guidelines
Do NOT name
runsteps that are self-explanatory from the command itselfusessteps for common, obvious actions like:actions/checkoutactions/setup-nodeoven-sh/setup-bunpnpm/action-setupactions/cache
DO name
usessteps withactions/github-script(explain what the script does)- Complex multi-line shell scripts (summarize the purpose)
- Steps where the intent is not obvious from the code
Examples
Good
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- run: bun install
- run: bun run build
- run: bun test
- name: Post build status to Slack
uses: actions/github-script@v7
with:
script: |
const webhook = process.env.SLACK_WEBHOOK;
// ... complex logic
Bad
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Install dependencies
run: bun install
- name: Build project
run: bun run build
- name: Run tests
run: bun test
Best Practices
- Pin action versions with full SHA or major version tag (
@v4, not@main) - Use
workflow_dispatchfor manual triggers when useful - Set appropriate
permissionsto follow least privilege - Use
concurrencyto cancel redundant runs - Prefer
${{ github.token }}over PAT when possible - Avoid emoji in workflow names and step names
- Use
$GITHUB_STEP_SUMMARYto output execution results in Markdown format - Avoid obvious comments; only add comments to explain complex logic
Step Summary Example
- name: Report test results
run: |
echo "## Test Results" >> $GITHUB_STEP_SUMMARY
echo "| Suite | Passed | Failed |" >> $GITHUB_STEP_SUMMARY
echo "|-------|--------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Unit | 42 | 0 |" >> $GITHUB_STEP_SUMMARY