| name | gh-actions |
| description | Configure GitHub Actions CI/CD for Go, Rust, TypeScript, Bash projects. Use when creating workflows, release automation, signing, checksums, cross-platform builds, or .github/workflows files. |
Optimal GitHub Actions
Production-tested patterns + 2025-2026 best practices.
Quick Start: Which Workflow?
Core Patterns (Every Workflow)
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
build:
timeout-minutes: 30
Language Quick Reference
Cross-Platform Matrix (Native ARM 2025+)
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
- os: macos-14
target: aarch64-apple-darwin
- os: macos-15-intel
target: x86_64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc
Key insight: Native ARM runners are 10x faster than QEMU emulation.
Release Checklist
Patterns: RELEASE-BUILD | RELEASE-EXTRAS | SECURITY-SIGNING
Caching
| Language | Action | Notes |
|---|
| Rust | Swatinem/rust-cache@v2 | Auto-caches cargo + target |
| Go | actions/setup-go@v6 | Built-in, enabled by default |
| Node/Bun | actions/cache@v4 | Cache node_modules |
Include arch in cache key for cross-platform:
key: ${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('Cargo.lock') }}
Security (2025 Best Practices)
| Practice | Example |
|---|
| Pin to SHA | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 |
| OIDC auth | permissions: { id-token: write } + cloud provider action |
| Keyless signing | sigstore/cosign-installer@v3 |
| SLSA Level 3 | actions/attest-build-provenance@v2 |
Full patterns: SECURITY-CORE | SECURITY-SIGNING
Anti-Patterns
| Don't | Do Instead |
|---|
@main for third-party actions | Pin to SHA |
| Default 6h timeout | Set explicit timeout-minutes |
| QEMU for ARM builds | Native ARM runners |
| Store secrets in workflow | Use secrets.* |
| Skip concurrency controls | Use concurrency: group |
Reference Index
By Topic
By Language
Validation
actionlint .github/workflows/*.yml
gh workflow list && gh run list --workflow=ci.yml