← FinOpsAid blog

Three GitHub Actions changes in September that affect how you track spend
GitHub shipped a Runner Deprecation API, granular Dependabot permissions, and new reusable workflow context properties in early September 2026. All three touch cost visibility — and one of them is a deadline.
When GitHub ships a platform update, the changelog reads like a feature list. Runner Version Deprecation API. Granular Dependabot access control. Enhanced Reusable Workflow Context. None of those sound like they belong in a conversation about your bill. All three do.
The pattern is familiar: a capabilities announcement lands, engineering evaluates it for functionality, and nobody asks the finance question until the next invoice arrives with a number nobody predicted. This month's three changes are worth asking about now, because one of them is a countdown and the other two change what you can measure.
The Runner Deprecation API is a deadline dressed as a feature
GitHub's new Runner Version Deprecation API returns structured data about which runner image versions are approaching end-of-life, with dates. On the surface it's a housekeeping tool. Underneath, it's a forcing function for a cost decision most teams have been deferring.
Here's why. When a runner image is deprecated, workflows pinned to that image either break or silently fall back to a newer image. The fallback is usually fine — until it isn't. A larger base image means longer pull times. Different pre-installed tooling means your setup step installs things the old image had built in, burning extra minutes. A workflow that ran in 4 minutes on ubuntu-22.04 might run in 6 minutes on ubuntu-24.04 because the Node version changed and your build step now includes an install that used to be a no-op.
The cost math: a 50% increase in workflow duration, across hundreds of daily runs, on 4x Linux runners at $0.016/min, is not trivial. And it compounds silently because no alert fires — the workflow still succeeds.
The Deprecation API gives you lead time. The question is whether anyone on your team is using it to plan the migration, or whether you'll discover the cost change the same way you discover most cost changes: on the invoice.
The API gives you the green window. Migrate during the notice period and you control the runner choice. Wait for the fallback and the cost delta is already baked in.
Granular Dependabot permissions close a governance gap
GitHub added a new vulnerability-alerts permission scope for Dependabot, separate from the existing security-events scope. This lets you give a GitHub App — or an Actions workflow — access to Dependabot alerts without giving it access to code scanning results, secret scanning, or the full security overview.
The cost angle is indirect but real. Organizations that couldn't grant Dependabot data to their cost-attribution tooling without also granting broader security access now can. That matters because Dependabot alerts drive automated PR creation, and those PRs trigger CI workflows. If you're trying to understand why your Actions minutes spiked on a Tuesday, "Dependabot opened 47 PRs across 12 repos" is the answer — and now you can build that query without over-privileging the integration.
The governance point: least-privilege access isn't just a security posture. It's what makes teams willing to connect tooling in the first place. The broader the permission, the longer the approval cycle, the longer you're flying blind on what's actually driving your CI spend.
Reusable Workflow Context fills an attribution gap
The third change is four new job context properties available inside reusable workflows: the calling workflow's ref, repository, SHA, and event name. Before this, a reusable workflow knew it was called but not by whom — which made cost attribution nearly impossible for shared CI templates.
If your org uses a centralized build workflow that twenty teams call, you couldn't tell from the workflow run alone which team's repo triggered it, which branch, or what event. The minutes were pooled. The new context properties let you log, label, or tag the run with its caller's identity. That's the difference between "shared-build consumed 14,000 minutes this month" and "shared-build consumed 14,000 minutes, of which 8,200 were triggered by the payments team's monorepo."
This is not automatic. The context properties exist; someone still has to use them. A run-name that includes ${{ job.calling_workflow_repository }} is ten seconds of work and turns opaque shared-workflow minutes into attributed ones.
What to do with this information
- Query the Runner Deprecation API now. Identify workflows pinned to images approaching EOL. Benchmark their current duration. Migrate on your schedule, not GitHub's fallback schedule.
- Audit your GitHub App permissions for
vulnerability-alerts. If you've been avoiding Dependabot integrations because the permission scope was too broad, revisit that decision. The new scope is narrow enough for cost tooling.
- Add caller context to reusable workflows. If your shared CI templates serve multiple teams, add
job.calling_workflow_repository to the run name or as a workflow output. That one line turns pooled minutes into attributed minutes.
- Measure before and after. None of these changes reduce your bill by themselves. They give you the data to reduce it deliberately. The difference is someone looking.
Where FinOpsAid fits
FinOpsAid already attributes Actions minutes by workflow, repo, and runner type. The new reusable workflow context properties make that attribution sharper for shared templates — and the runners page flags image-version drift before a deprecation catches you off guard. When Dependabot opens a burst of PRs, the cost explorer shows the minute spike and the repos that caused it.
Three platform changes, three cost signals, and none of them appear on a changelog labeled "billing." Connect your GitHub org — read-only, free during beta — and see which ones are already moving your number.