Generates production-ready GitHub Actions workflows, custom actions, and CI/CD configurations following security and performance standards. Creates CI/CD pipelines, test workflows, deployment configurations, matrix builds, caching strategies, composite actions, Docker actions, JavaScript actions, and reusable workflows. Use when creating or scaffolding GHA resources, writing .github/workflows YAML files, setting up build automation, implementing deployment pipelines, adding security scanning, or building reusable actions — including triggers like 'create a workflow', 'build a pipeline', 'add CI', 'set up GHA', or 'generate a YAML workflow'.
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Generate production-ready GitHub Actions workflows and custom actions following current best practices, security standards, and naming conventions. All generated resources are automatically validated using the devops-skills:github-actions-validator skill.
.github/workflows for CI, testing or deployment.Triggers: "Create a workflow for...", "Build a CI/CD pipeline..."
Process:
references/best-practices.md for patternsreferences/common-actions.md for action versionsMinimal Example:
name: CI Pipeline
on:
push:
branches: [main]
pull_request:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm testTriggers: "Create a composite action...", "Build a Docker action...", "Create a JavaScript action..."
Types:
Process:
assets/templates/action/references/custom-actions.mdSee references/custom-actions.md for:
Triggers: "Create a reusable workflow...", "Make this workflow callable..."
Key Elements:
workflow_call trigger with typed inputssecrets: inherit)on:
workflow_call:
inputs:
environment:
required: true
type: string
secrets:
deploy-token:
required: true
outputs:
result:
value: ${{ jobs.build.outputs.result }}See references/advanced-triggers.md for complete patterns.
Triggers: "Add security scanning...", "Add dependency review...", "Generate SBOM..."
Components:
actions/dependency-review-action@v4actions/attest-sbom@v2github/codeql-actionRequired Permissions:
permissions:
contents: read
security-events: write # For CodeQL
id-token: write # For attestations
attestations: write # For attestationsSee references/best-practices.md section on security.
Triggers: "Add job summaries...", "Use environments...", "Run in container..."
See references/modern-features.md for:
$GITHUB_STEP_SUMMARY)When using public actions:
Search for documentation:
"[owner/repo] [version] github action documentation"Or use Context7 MCP:
mcp__context7__resolve-library-id to find actionmcp__context7__get-library-docs for documentationPin to SHA with version comment:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0See references/common-actions.md for pre-verified action versions.
CRITICAL: Every generated resource MUST be validated.
devops-skills:github-actions-validator skillSkip validation only for:
All generated resources must follow:
| Standard | Implementation |
|---|---|
| Security | Pin to SHA, minimal permissions, mask secrets |
| Performance | Caching, concurrency, shallow checkout |
| Naming | Descriptive names, lowercase-hyphen files |
| Error Handling | Timeouts, cleanup with if: always() |
See references/best-practices.md for complete guidelines.
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node: [18, 20, 22]
fail-fast: falsedeploy:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'# Upload
- uses: actions/upload-artifact@v4
with:
name: build-${{ github.sha }}
path: dist/
# Download (in dependent job)
- uses: actions/download-artifact@v4
with:
name: build-${{ github.sha }}@latest or branch-based action referencesWHY: Mutable references allow the action to change silently between runs, enabling supply chain attacks where a compromised upstream injects malicious code into your workflow.
BAD: uses: actions/checkout@main
GOOD: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
secrets: inherit in reusable workflows without justificationWHY: secrets: inherit exposes every secret from the caller to the callee even when only one is needed, violating the principle of least privilege and widening the blast radius of a compromised workflow.
BAD: secrets: inherit
GOOD: Declare only required secrets explicitly, for example secrets: deploy-token: required: true.
permissions: at the job or workflow levelWHY: GITHUB_TOKEN defaults to write permissions in older repositories. Omitting permissions: means every job can push commits, create releases, or modify issues unintentionally.
BAD: A workflow with no permissions: block at all.
GOOD: Set permissions: contents: read as the workflow default and override per-job only where write access is genuinely required.
fail-fast: false by default in matrix buildsWHY: fail-fast: false causes the entire matrix to keep running after the first failure, wasting runner minutes and delaying feedback. It should be an intentional choice, not a default.
BAD: strategy: fail-fast: false added to every matrix without explanation.
GOOD: Omit fail-fast to use the default true, or add an explicit comment explaining why all combinations must complete.
pull_request_target with actions/checkout checking out PR codeWHY: pull_request_target runs with write permissions and access to secrets. Combining it with a checkout of untrusted PR code enables attackers to exfiltrate secrets or tamper with your repository.
BAD: on: pull_request_target combined with uses: actions/checkout@... with: ref: ${{ github.event.pull_request.head.sha }}
GOOD: Use pull_request for untrusted code, or carefully scope and audit any pull_request_target workflow before adding a checkout step.
WHY: a bare SHA tells reviewers nothing about which release it is, so upgrades and audits become guesswork.
BAD: uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903
GOOD: uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
WHY: invented versions or SHAs fail at run time or pin to the wrong release.
BAD: typing a SHA from memory.
GOOD: take the version from references/common-actions.md, or look up the action's documentation first.
WHY: superseded runs keep consuming runner minutes and a hung job can run until the platform limit.
BAD: a workflow with no concurrency: block and no timeout-minutes:.
GOOD: add concurrency with cancel-in-progress: true and a timeout-minutes on each job.
WHY: unvalidated YAML ships syntax and security errors to the user.
BAD: presenting a new workflow straight after writing it.
GOOD: invoke the github-actions-validator skill, fix errors, and re-validate before presenting.
WHY: consumers cannot use an action whose interface is undocumented, and branding and metadata are part of the contract.
BAD: an action.yml with no inputs, outputs or description.
GOOD: include branding, typed inputs and outputs, and documentation, following references/custom-actions.md.
| Topic | Reference | When to Use |
|---|---|---|
| Best practices | references/best-practices.md | Every workflow: security, performance, patterns |
| Public actions | references/common-actions.md | Action versions, inputs and outputs |
| Expressions | references/expressions-and-contexts.md | Complex conditionals and ${{ }} syntax |
| Advanced triggers | references/advanced-triggers.md | workflow_run, dispatch, ChatOps and reusable workflows |
| Custom actions | references/custom-actions.md | Metadata, structure and versioning |
| Modern features | references/modern-features.md | Summaries, environments and container jobs |
| Basic workflow template | assets/templates/workflow/basic_workflow.yml | Starting a new workflow |
| Reusable workflow template | assets/templates/workflow/reusable_workflow.yml | Starting a callable workflow |
| Composite action template | assets/templates/action/composite/action.yml | Combining steps into one action |
| Docker action template | assets/templates/action/docker/action.yml | Custom environment or tools |
| JavaScript action template | assets/templates/action/javascript/action.yml | API access and complex logic |
pantheon-org/tekhne
c8416e9
Also appears in
last in sync Aug 28, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.