From github-actions
GitHub Actions workflow generator — CI/CD pipelines, releases, Docker builds, reusable workflows, composite actions, dependabot. Use for .github/workflows/ generation, debugging, and security hardening.
npx claudepluginhub anilcancakir/claude-code-plugin --plugin github-actionsThis skill uses the workspace's default tool permissions.
Generate production-ready GitHub Actions workflow YAML files. Supports CI, CD, releases, Docker, reusable workflows, composite actions, and dependabot configs across multiple languages and frameworks.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Generate production-ready GitHub Actions workflow YAML files. Supports CI, CD, releases, Docker, reusable workflows, composite actions, and dependabot configs across multiple languages and frameworks.
fail-fast: true for CI, false for releasesAnalyze the user's request to determine workflow type:
| Request Pattern | Mode | Jump To |
|---|---|---|
| "CI", "test", "lint", "check" | CI | Phase 1–5 |
| "deploy", "CD", "release to" | DEPLOY | Phase 1–5 |
| "release", "publish", "tag" | RELEASE | Phase 1–5 |
| "Docker", "container", "image" | DOCKER | Phase 1–5 |
| "reusable workflow", "shared workflow" | REUSABLE | Phase 1–5 |
| "composite action", "custom action" | COMPOSITE | Phase 1–5 |
| "dependabot", "renovate", "dependency updates" | DEPENDENCY | Phase 1–5 |
| "fix workflow", "workflow failing" | DEBUG | Debug Flow |
Execute ALL in parallel:
# Group 1: Language detection
ls composer.json package.json pubspec.yaml go.mod Cargo.toml pyproject.toml setup.py requirements.txt Gemfile pom.xml build.gradle 2>/dev/null
# Group 2: Framework detection
ls artisan next.config.* nuxt.config.* angular.json vite.config.* 2>/dev/null
cat composer.json 2>/dev/null | head -20
cat package.json 2>/dev/null | head -20
# Group 3: Existing workflows
ls .github/workflows/*.yml .github/workflows/*.yaml 2>/dev/null
ls .github/actions/*/action.yml 2>/dev/null
cat .github/dependabot.yml 2>/dev/null
# Group 4: CI tooling
ls .php-cs-fixer.dist.php phpstan.neon pint.json eslint.config.* .eslintrc* biome.json analysis_options.yaml .golangci.yml .flake8 pyproject.toml 2>/dev/null
# Group 5: Docker context
ls Dockerfile docker-compose.yml docker-compose.yaml 2>/dev/null
Mandatory output:
PROJECT DETECTION
=================
Language: [PHP 8.x | Dart/Flutter | Node.js | Bun | Go | Python | Rust | Java | Multi-stack]
Framework: [Laravel | Next.js | Flutter | Express | FastAPI | None | ...]
Package manager: [composer | npm | pnpm | yarn | bun | pub | go mod | pip | cargo]
Linter: [pint | eslint | biome | golangci-lint | ruff | dart analyze | none]
Test runner: [phpunit | artisan test | jest | vitest | bun test | flutter test | go test | pytest]
Docker: [yes | no]
Existing workflows: [list or none]
Select the base template from references/language-templates.md based on detected stack. Read the reference file for the matching language section.
Multi-stack projects: Generate separate jobs per language within one workflow, using defaults.run.working-directory to isolate contexts.
Apply ALL of these to every generated workflow. Read references/security-patterns.md for detailed patterns.
Non-negotiable rules:
uses: actions/checkout@<sha> with version commentpermissions: block on every workflow, default contents: read${{ secrets.NAME }}, never hardcodedworkflow_dispatch inputs must have types and descriptionsPermission mapping:
| Operation | Required Permissions |
|---|---|
| Read code only | contents: read |
| Push commits | contents: write |
| Comment on PR | pull-requests: write |
| Create release | contents: write |
| Publish package | packages: write, id-token: write (OIDC) |
| Deploy Pages | pages: write, id-token: write |
| Upload coverage | contents: read (only) |
| Create check | checks: write |
| Security scan | security-events: write |
Present the complete workflow YAML. Consult references/workflow-syntax.md for exact syntax of triggers, expressions, contexts, and runners. Follow the structure order:
name: # Clear, descriptive name
on: # Triggers with filters
permissions: # Minimal required
concurrency: # Prevent duplicates
env: # Shared environment variables
defaults: # Working directory, shell
jobs: # Job definitions
job-name:
runs-on: # Runner selection
timeout-minutes: # Always set
services: # Database, cache containers
strategy: # Matrix builds
env: # Job-level env
steps: # Step sequence
Step ordering within a job:
1. Checkout code
2. Setup language runtime (with cache)
3. Install dependencies (cached)
4. Lint / static analysis
5. Build (if needed)
6. Test (with coverage)
7. Upload artifacts / coverage
8. Deploy / publish (conditional)
9. Notify (on failure)
Mandatory output:
# Generated workflow with inline comments explaining:
# - Why each permission is needed
# - What each concurrency group prevents
# - Why specific actions are chosen
# - Cache strategy rationale
After writing the workflow file:
yq eval '.' .github/workflows/<file>.yml > /dev/nullghp_, sk-, Bearerwrite-all or missing permissions: blockWhen fixing broken workflows:
gh run list --workflow=<name>.yml --limit 5 to find recent failuresgh run view <id> --log-failed to get error detailson:
push:
branches: [main, master, develop]
pull_request:
branches: [main, master, develop]
on:
push:
branches: [main]
paths:
- 'packages/api/**'
- '.github/workflows/api-ci.yml'
pull_request:
paths:
- 'packages/api/**'
on:
workflow_dispatch:
inputs:
environment:
description: 'Target environment'
required: true
type: choice
options: [staging, production]
push:
branches: [main]
on:
push:
tags: ['v*.*.*']
on:
schedule:
- cron: '0 4 * * 1' # Every Monday 4AM UTC
on:
workflow_call:
inputs:
environment:
required: true
type: string
secrets:
DEPLOY_KEY:
required: true
# CI: Cancel outdated runs on same branch
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Deploy: Never cancel, queue instead
concurrency:
group: deploy-${{ inputs.environment }}
cancel-in-progress: false
services:
postgres:
image: postgres:17
env:
POSTGRES_DB: testing
POSTGRES_USER: test
POSTGRES_PASSWORD: test
ports:
- 5432:5432
options: >-
--health-cmd="pg_isready"
--health-interval=10s
--health-timeout=5s
--health-retries=5
redis:
image: redis:7-alpine
ports:
- 6379:6379
options: >-
--health-cmd="redis-cli ping"
--health-interval=10s
--health-timeout=5s
--health-retries=5
# Dependency caching (built into setup-* actions)
- uses: actions/setup-node@<sha> # v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
# Manual cache (for custom paths)
- uses: actions/cache@<sha> # v4
with:
path: ~/.pub-cache
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }}
restore-keys: ${{ runner.os }}-pub-
# Upload test artifacts
- uses: actions/upload-artifact@<sha> # v4
if: failure()
with:
name: test-results
path: test-results/
retention-days: 7
# Upload coverage
- uses: codecov/codecov-action@<sha> # v5
with:
files: coverage/lcov.info
fail_ci_if_error: false
# Node.js version matrix
strategy:
fail-fast: true
matrix:
node-version: [18, 20, 22]
# Platform matrix
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
# Complex matrix with includes/excludes
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
node: [18, 20]
include:
- os: ubuntu-latest
node: 22
exclude:
- os: macos-latest
node: 18
git-master for the commit, not raw git commit.gh commands for workflow debugging (gh run view, gh run list), secret management (gh secret set), and variable management (gh variable set).uses: actions/checkout@v4) → Pin to SHA with version commentpermissions: block → Always declare, default contents: readruns-on: ubuntu-latest without timeout-minutes → Set 15–30 min for CIrun: steps → Use matrix or env varsnpm install instead of npm ci → Use lockfile-based installif: failure() on artifact upload → Only upload on failurecontinue-on-error: true on tests → Tests must fail the buildwrite-all permissions → Declare only what's needed--force in deploy scripts → Use --force-with-lease or idempotent deploysFor detailed guidance on specific topics, read references/ when needed:
| Topic | File | Covers |
|---|---|---|
| YAML syntax | workflow-syntax.md | Top-level keys, triggers, jobs, steps, expressions, contexts, runners, composite actions |
| Language templates | language-templates.md | PHP/Laravel, Dart/Flutter, Node.js/Bun, Go, Python, Docker, multi-stack, dependabot |
| Security patterns | security-patterns.md | Action pinning, permissions, secrets, injection prevention, OIDC, supply chain, checklist |