From finops-plugin
Identifies GitHub Actions workflow waste patterns like skipped runs, bot triggers, missing concurrency, path filters, and cancel-in-progress. Suggests YAML fixes for optimization.
npx claudepluginhub laurigates/claude-plugins --plugin finops-pluginThis skill is limited to using the following tools:
Identify GitHub Actions waste patterns and provide actionable fix suggestions. Analyzes skipped runs, bot triggers, missing concurrency groups, and missing path filters.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Identify GitHub Actions waste patterns and provide actionable fix suggestions. Analyzes skipped runs, bot triggers, missing concurrency groups, and missing path filters.
git remote get-url originfind .github/workflows -maxdepth 1 \( -name '*.yml' -o -name '*.yaml' \)| Parameter | Description | Default |
|---|---|---|
repo | Repository in owner/name format | Current repository |
1. Run API-based waste analysis:
bash "${SKILL_DIR}/scripts/waste-analysis.sh" "$REPO"
2. Workflow file analysis (requires local filesystem):
echo ""
echo "=== Workflow File Analysis ==="
for f in .github/workflows/*.yml .github/workflows/*.yaml 2>/dev/null; do
[ -f "$f" ] || continue
name=$(basename "$f")
issues=""
# Check for concurrency
if ! grep -q "concurrency:" "$f"; then
issues="${issues}missing-concurrency "
fi
# Check for path filters (on push/pull_request without paths)
if grep -qE "^\s*(push|pull_request):" "$f" && ! grep -q "paths:" "$f"; then
issues="${issues}no-path-filter "
fi
# Check for bot filter
if ! grep -q "github.event.sender.type" "$f" && ! grep -q "github.actor" "$f"; then
issues="${issues}no-bot-filter "
fi
# Check for cancel-in-progress
if grep -q "pull_request:" "$f" && ! grep -q "cancel-in-progress:" "$f"; then
issues="${issues}no-cancel-in-progress "
fi
if [ -n "$issues" ]; then
echo " $name: $issues"
else
echo " $name: OK"
fi
done
After analysis, provide specific fixes based on findings:
# Add to workflow file at top level or per-job
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true # For PR workflows
jobs:
build:
# Skip if triggered by a bot
if: github.event.sender.type != 'Bot'
runs-on: ubuntu-latest
steps: ...
Or for specific bots:
if: github.actor != 'dependabot[bot]' && github.actor != 'renovate[bot]'
on:
push:
branches: [main]
paths:
- 'src/**'
- 'package.json'
- 'package-lock.json'
paths-ignore:
- '**.md'
- 'docs/**'
- '.github/**'
pull_request:
paths:
- 'src/**'
- 'package.json'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
=== Waste Analysis: org/repo ===
=== Skipped Runs ===
Total runs: 100
Skipped: 15 (15%)
By workflow:
CI: 10 skipped
CodeQL: 5 skipped
=== Bot-Triggered Runs ===
Bot-triggered: 25/100 runs
By bot:
dependabot[bot]: 15 runs
renovate[bot]: 10 runs
=== Workflow File Analysis ===
ci.yml: missing-concurrency no-path-filter
deploy.yml: OK
codeql.yml: no-bot-filter
=== Potential Duplicate Runs ===
Commit abc1234: 3 runs (CI, CodeQL, Security)
=== High-Frequency Workflows ===
CI: 67 runs in sample - review trigger conditions