.claude/skills/github-actions-cancel-on-pr-merge/SKILL.md
Cancel in-progress GitHub Actions workflows when a PR is merged or closed. Use when: (1) Slow CI jobs (like Codex reviews) waste minutes after PR merges, (2) You have `cancel-in-progress: true` but workflows still run after merge, (3) You want to save CI minutes by stopping obsolete workflow runs. Covers the `closed` event type pattern with concurrency groups.
npx skillsauth add Dbochman/dotfiles github-actions-cancel-on-pr-mergeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
GitHub Actions workflows triggered by pull_request events continue running even after the PR is merged or closed. The cancel-in-progress: true concurrency setting only cancels when new commits are pushed, not when the PR is closed.
cancel-in-progress: true but it doesn't help on mergeAdd closed to the PR event types and add a job condition to skip running on close:
name: PR Workflow
on:
pull_request:
branches: [main]
types: [opened, synchronize, closed] # Add 'closed'
# Cancel in-progress runs when PR is closed/merged
concurrency:
group: workflow-name-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
my-job:
runs-on: ubuntu-latest
# Skip if PR is closed - concurrency cancels in-progress runs
if: github.event.action != 'closed'
steps:
# ... job steps
closed eventgithub.event.action == 'closed'cancel-in-progress: true cancels the old rungithub.event.action != 'closed' causes it to skipBefore (workflows continue after merge):
on:
pull_request:
branches: [main]
types: [opened, synchronize]
concurrency:
group: ci-${{ github.event.pull_request.number }}
cancel-in-progress: true
After (workflows cancel on merge):
on:
pull_request:
branches: [main]
types: [opened, synchronize, closed]
concurrency:
group: ci-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
build:
if: github.event.action != 'closed'
# ...
if condition is important - without it, a new job would start and immediately succeed, which still wastes a runner startupif: github.event.action == 'closed'tools
Use exact configured Reolink cameras through the local Home Hub for availability and power status, fresh stills, visual commentary, protected Dylan/Julia/household sharing, and reversible spotlight control. Supports trusted owner tasks and explicitly scoped proactive automations; not for Nest or Ring cameras, arbitrary recipients, recordings, account changes, or raw camera APIs.
data-ai
Privately manage Dylan and Julia's household plant inventory and care history by physical location, bed, and exact Flower Cam view. Use for confirmed plant onboarding from camera conversations, camera- or bed-filtered inventory, record corrections, individual or whole-bed care, and private filtered exports. Pair with reolink-camera when an owner asks about plants visible in Flower Cam images.
testing
Inspect and control the physically secured Reachy Mini at Crosstown through ClawBody. Use for requests to check Reachy, look around, express an emotion, play any official emotion or dance preset, speak proactively, mute or unmute its microphone, stop movement, or describe what its camera sees.
tools
Handle Reachy/iMessage handoffs, selective durable memory, forgetting, and diagnostics; automatic context comes from the gateway plugin.