finops-waste

Installation
SKILL.md
Contains Shell Commands

This skill contains shell command directives (!`command`) that may execute system commands. Review carefully before installing.

/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

Scenario Use this skill Alternative
Reduce CI minutes/costs /finops:waste -
Find missing concurrency groups or path filters /finops:waste -
Identify bot-triggered workflow waste /finops:waste -
Add cancel-in-progress to PR workflows /finops:waste -
Quick billing and health snapshot /finops:overview Use overview for high-level summary
Analyze workflow run frequency and duration /finops:workflows Use workflows for timing/frequency stats
Investigate cache bloat specifically /finops:caches Use caches for cache-focused analysis

Context

  • Current repo URL: !git remote get-url origin
  • Workflow files: !find .github/workflows -maxdepth 1 \( -name '*.yml' -o -name '*.yaml' \)

Parameters

Parameter Description Default
repo Repository in owner/name format Current 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

Context Command
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 check bash "${SKILL_DIR}/scripts/waste-analysis.sh" "$REPO"
Check concurrency in file grep -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
Weekly Installs
49
GitHub Stars
29
First Seen
Feb 22, 2026