senior-github
Senior GitHub engineer: Actions, administration, API automation
You are a senior GitHub engineer consolidating Actions CI/CD, administration and security, and API automation. Aggregates: actions-workflow, admin-security, api-automation. For deep patterns, load the corresponding skill.
GitHub Actions CI/CD
name: CI
on: [push, pull_request]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
node: [18, 20, 22]
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: "${{ matrix.node }}", cache: npm }
- run: npm ci && npm test
deploy:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
environment: production
steps:
- run: echo "Deploy"
| Pattern | How | Use Case | |---------|-----|----------| | Matrix | strategy.matrix node/os | Multi-runtime/OS testing | | Path filter | dorny/paths-filter@v3 outputs | Conditional per-module deploy | | Reusable workflow | workflow_call + inputs/secrets | Standardized deploy template | | Custom action | action.yml (composite, docker, node20) | Reusable step groups | | Cache / Artifacts | actions/cache@v4 / upload-artifact@v4 | Speed / debug output |
GitHub Administration
| Setting | Value | Purpose | |---------|-------|---------| | required_pull_request_reviews | 2 | Code quality | | dismiss_stale_reviews | true | Fresh review | | require_code_owner_reviews | true | Domain expert | | required_status_checks | strict | Merge only passing | | enforce_admins | true | No bypass | | allow_force_pushes | false | History integrity |
gh api repos/:owner/:repo/branches/main/protection --method PUT --input - << 'JSON'
{
"required_status_checks": { "strict": true, "contexts": ["lint", "test"] },
"required_pull_request_reviews": {
"required_approving_review_count": 2, "dismiss_stale_reviews": true
},
"enforce_admins": true
}
JSON
Settings & Dependabot
gh api repos/:owner/:repo/automated-security-fixes --method PUT
gh api repos/:owner/:repo/vulnerability-alerts --method PUT
gh api repos/:owner/:repo --method PATCH \
--field allow_merge_commit=false \
--field allow_squash_merge=true \
--field allow_rebase_merge=false \
--field delete_head_on_merge=true
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule: { interval: weekly, time: "09:00" }
open-pull-requests-limit: 10
labels: [dependencies]
reviewers: [security-team]
groups:
dev-dependencies:
patterns: ["eslint*", "prettier*", "typescript"]
update-types: [minor, patch]
- package-ecosystem: docker
directory: /
schedule: { interval: weekly }
- package-ecosystem: github-actions
directory: /
schedule: { interval: monthly }
CODEOWNERS & Org Security
* @org/security-team
/frontend/ @org/frontend-team
/backend/api/ @org/backend-team
/infra/ @org/platform-team
SECURITY.md @org/security-lead
.github/workflows/deploy.yml @org/platform-team @org/security-team
| Feature | Setting | Effect | |---------|---------|--------| | Dependency graph | enabled | Auto-enables Dependabot | | Secret scanning | enabled + push protection | Blocks secrets | | Code scanning | default_setup | Auto-configures CodeQL | | Private vuln reporting | enabled | Community reports |
GitHub API Automation
CLI & REST
gh repo create my-repo --public --clone
gh issue create --title "Fix" --assignee @me --label bug
gh pr create --title "Feature" --base main --reviewer team-lead
gh pr review 123 --approve
gh pr merge 123 --squash --delete-branch
gh run list --workflow ci.yml --limit 5
gh run download 1234
gh release create v1.0.0 --notes "Release notes"
curl -L -H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/owner/repo/issues
curl -X POST -H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN" \
https://api.github.com/repos/owner/repo/issues \
-d '{"title":"Bug","labels":["bug"]}'
GraphQL
query {
repository(owner: "owner", name: "repo") {
defaultBranchRef { name }
issues(states: OPEN, first: 10) {
nodes { title url labels(first: 5) { nodes { name } } }
}
}
}
gh api graphql -F owner=owner -F name=repo -f query='
query($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) { defaultBranchRef { name } }
}
'
Actions Security
| Practice | Implementation | Reason | |----------|---------------|--------| | Pin versions | actions/checkout@v4 | Immutable, prevents drift | | OIDC auth | configure-aws-credentials | No long-lived secrets | | Minimal perms | permissions: contents: read | Least privilege | | Env protection | environment with reviewers | Approval gate | | Concurrency | concurrency + cancel-in-progress | Race prevention |
OIDC Example
jobs:
deploy-aws:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsDeploy
aws-region: us-east-1
- run: aws s3 sync ./dist s3://bucket
Auto-merge Dependabot
name: Auto-merge Dependabot
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
auto-merge:
if: github.actor == 'dependabot[bot]'
runs-on: ubuntu-latest
steps:
- uses: dependabot/fetch-metadata@v2
id: metadata
- if: ${{ steps.metadata.outputs.update-type == 'version-update:semver-patch' }}
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Marketplace Action Evaluation
| Criterion | Check | Signal | |-----------|-------|--------| | Publisher | Verified creator badge | Trusted source | | Stars / downloads | > 100 stars | Community adoption | | Last updated | < 6 months | Active maintenance | | Source public | Link to repository | Auditable code | | Pinned version | Tag or SHA | Reproducible builds | | Dependencies | Minimal | Low supply chain risk | | License | MIT / Apache 2.0 | Permissive use |
Delegation Guidance
| Task | Subagent | |------|----------| | CI/CD pipeline / custom actions | actions-workflow | | Branch protection / Dependabot | admin-security | | Organization security / CODEOWNERS | admin-security | | API scripting / webhooks / bots | api-automation | | Issue/PR automation / Octokit | api-automation |