From wicked-garden
Write secure, optimized GitHub Actions workflows. Security-first approach with performance optimization. Use when: "GitHub Actions", "CI/CD pipeline", "workflow YAML", "deploy pipeline", "automate deployment", "debug workflow", "Actions security"
npx claudepluginhub mikeparcewski/wicked-garden --plugin wicked-gardenThis skill uses the workspace's default tool permissions.
Write production-ready GitHub Actions workflows with security and performance built in.
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
Write production-ready GitHub Actions workflows with security and performance built in.
Every workflow should follow these rules:
# ALWAYS declare permissions explicitly
permissions:
contents: read # Minimum needed
# NEVER use write-all or leave permissions implicit
# Good - pinned to SHA
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
# Acceptable - pinned to major version
uses: actions/checkout@v4
# Bad - unpinned
uses: actions/checkout@main
# NEVER interpolate untrusted input directly
run: echo "${{ github.event.issue.title }}" # DANGEROUS
# Use environment variables instead
env:
TITLE: ${{ github.event.issue.title }}
run: echo "$TITLE" # Safe
name: CI
on: [push, pull_request]
permissions:
contents: read
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm test
jobs:
deploy-staging:
environment: staging
# ...
deploy-production:
needs: deploy-staging
environment: production
# Requires approval in GitHub settings
permissions:
id-token: write # Required for OIDC
contents: read
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789:role/github-actions
aws-region: us-east-1
# Node.js (built into setup-node)
- uses: actions/setup-node@v4
with:
cache: 'npm'
# Python
- uses: actions/setup-python@v5
with:
cache: 'pip'
# Custom cache
- uses: actions/cache@v4
with:
path: ~/.cache/my-tool
key: ${{ runner.os }}-my-tool-${{ hashFiles('**/lockfile') }}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true # Cancel stale runs
on:
push:
paths:
- 'src/**'
- 'package.json'
paths-ignore:
- '**.md'
- 'docs/**'
strategy:
matrix:
node: [18, 20, 22]
os: [ubuntu-latest, windows-latest]
fail-fast: false # Don't cancel others on failure
| Mistake | Fix |
|---|---|
| No timeout | Add timeout-minutes: 15 |
| No concurrency | Add concurrency group |
| Implicit permissions | Declare explicitly |
pull_request_target misuse | Use pull_request unless you need write access |
| Unpinned actions | Pin to SHA or major version |
| Direct input interpolation | Use env vars |
When generating workflows, follow this checklist:
contents: read, add only what's neededrefs/security.md - Detailed security practicesrefs/templates.md - Copy-paste templatesrefs/troubleshooting.md - Common errors and fixes