agentsclimarketplace

Github actions

Skill amjadjibon/skills/skills/misc/github-actions

Create/review GitHub Actions workflows — CI, release pipelines, reusable workflows, composite actions, matrix builds, caching, security hardening (least-privilege permissions, pinned SHAs). Trigger on "set up CI", "add a GitHub Actions workflow", or editing `.github/workflows/*.yml`.From its SKILL.md

Install
npx -y skills add amjadjibon/skills --skill github-actions

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.8 KB, as published. Nobody here has run it

GitHub Actions Workflow Creator

Write workflows that run fast, fail clearly, and don't hold more privilege than the job needs.

1. Pick the Shape

NeedShape
Run tests/lint/build on every push and PRSingle CI workflow, one job per concern (test, lint, build) so failures are attributable at a glance
Publish a release, push an image, deploySeparate workflow triggered on tag push or a manual workflow_dispatch, not bundled into the CI workflow
Same job logic needed across several workflows or reposReusable workflow (workflow_call) — not copy-pasted YAML
Same few steps needed across several jobs in one repoComposite action (.github/actions/<name>/action.yml)
Test against multiple versions/OSesstrategy.matrix on one job, not duplicated jobs

A full worked template for each shape is in references/details.md — read the section for the chosen shape before writing the workflow file.

2. Core Structure

name: CI
on:
  push:
    branches: [main]
  pull_request:
permissions:
  contents: read      # default to read-only; widen per-job only where needed
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./run-tests.sh
  • permissions at the workflow level, narrowed further per-job when a job needs more (e.g. contents: write only on the job that creates a release, not the whole workflow). The default GITHUB_TOKEN grant is broader than almost any job needs — an unpinned workflow with a compromised action gets that token's full scope.
  • Trigger on exactly what should run the workflow. pull_request (not pull_request_target) for anything that checks out and runs PR code — pull_request_target runs with base-branch permissions and secrets against untrusted PR code, which is how repos get their secrets exfiltrated by a malicious PR. Only use pull_request_target when the job genuinely doesn't check out or execute PR code (e.g. commenting on the PR).
  • One job per independently-failing concern (test, lint, typecheck, build) so a red X on the PR tells you what actually broke without opening logs.

3. Caching and Speed

Cache dependencies (actions/cache, or the built-in caching in actions/setup-node/setup-go/setup-python via cache:), keyed on the lockfile hash so a dependency change invalidates it automatically:

- uses: actions/setup-node@v4
  with:
    node-version: 20
    cache: npm

Don't hand-roll a cache key from scratch when the setup action already offers one — it gets the invalidation logic right (lockfile hash) so a stale cache doesn't silently serve old dependencies.

4. Security Hardening

  • Pin third-party actions to a full commit SHA, not a mutable tag: uses: some-org/some-action@a1b2c3d # v2.1.0 — a tag can be moved to point at malicious code after you've reviewed it; a SHA can't. First-party actions/* at a version tag is the common, accepted exception (still fine to pin to SHA if the repo's policy demands it).
  • Secrets never go into run: as an interpolated string in a way that lands in shell history or logs — pass via env: and reference the env var inside the script, not ${{ secrets.X }} inlined directly into a shell command, which can be exploited via script injection if the value contains shell metacharacters.
  • GITHUB_TOKEN permissions default to read-only (set at the org or workflow level) and widen only the specific job that needs contents: write, pull-requests: write, etc.
  • Don't echo secrets, even for debugging — masked in logs by GitHub only when the exact string is referenced through secrets.*; a transformed or partial value (base64'd, substringed) can leak past the masking.

5. Validate Before Handing It Back

actionlint .github/workflows/*.yml

actionlint catches invalid syntax, unknown context references (${{ github.event.foo }} typos), shellcheck issues inside run: blocks, and matrix misconfigurations — the equivalent of a compiler check for a workflow file that would otherwise only fail on push. Run it before presenting the workflow as done; a workflow that only reveals its syntax error on the next PR is a worse failure mode than a lint catching it now.

6. Output

Write to .github/workflows/<name>.yml (or .github/actions/<name>/action.yml for a composite action) using kebab-case filenames. Keep name: in the workflow matching what should show up in the GitHub Actions UI and PR checks — that's what a reviewer sees, not the filename.

Keep looking

Skills are one crate of 626,474. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.