finops-waste

v2026.09.24

Identify GitHub Actions waste — skipped runs, bot triggers, missing concurrency — and suggest fixes. Use when CI costs are high or workflows run too often.

GitHub
Install command
npx skhub add laurigates/finops-waste
Markdown
SKILL.md

/finops:waste

Identify GitHub Actions waste patterns and provide actionable fix suggestions. Analyzes skipped runs, bot triggers, missing concurrency groups, and missing path filters.

When to Use This Skill

Use this skill when...Use a sibling instead when...
You want actionable fixes for CI cost waste — concurrency, path filters, bot guardsYou need a high-level billing and health snapshot — use /finops:overview
You need to add cancel-in-progress to PR workflowsYou need workflow run frequency and duration stats — use /finops:workflows
You are auditing skipped runs and bot-triggered noiseYou are auditing cache bloat or stale caches — use /finops:caches
You want to fix one repo's workflow configYou want to rank waste across many repos — use /finops:compare

Context

  • Current repo URL: !git remote -v
  • Workflow files: !find . -path '*/.github/workflows/*' -maxdepth 3 \( -name '*.yml' -o -name '*.yaml' \)

Parameters

ParameterDescriptionDefault
repoRepository in owner/name formatCurrent repository

Execution

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

Fix Suggestions

After analysis, provide specific fixes based on findings:

Fix: Missing Concurrency Group

# Add to workflow file at top level or per-job
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true  # For PR workflows

Fix: Bot Trigger Filter

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]'

Fix: Add Path Filters

on:
  push:
    branches: [main]
    paths:
      - 'src/**'
      - 'package.json'
      - 'package-lock.json'
    paths-ignore:
      - '**.md'
      - 'docs/**'
      - '.github/**'
  pull_request:
    paths:
      - 'src/**'
      - 'package.json'

Fix: Cancel Duplicate PR Runs

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
  cancel-in-progress: true

Output Format

=== 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

Agentic Optimizations

ContextCommand
Skipped runs count`gh run list --limit 100 --json conclusion --jq '[.[]
Failed runs (compact)gh run list --limit 50 --status failure --json name,createdAt
Workflow file checkbash "${SKILL_DIR}/scripts/waste-analysis.sh" "$REPO"
Check concurrency in filegrep -l "concurrency:" .github/workflows/*.yml
Bot-triggered runs`gh run list --limit 100 --json actor,conclusion --jq '[.[]

Post-actions

  1. Offer to apply fixes: For each issue found, offer to edit the workflow file directly
  2. Prioritize by impact: Focus on high-frequency workflows first
  3. Test recommendations: Suggest testing changes on a feature branch first
  4. Create tracking issue: Optionally create a GitHub issue to track optimization work
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

finops-plugin/skills/finops-waste

Default branch

main

Latest commit

1668324

Tree SHA

b2d4cc3