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
安装命令
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
发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

MIT

源路径

finops-plugin/skills/finops-waste

默认分支

main

最新提交

1668324

Tree SHA

b2d4cc3