← Startup Signals
6 min readUpdated 2026-10-19Issue 7

GitHub Actions workflow lockfiles are in public preview. Here is how to turn them on, check them in CI, and what they do not protect.

A tag can move after you reviewed it. A lockfile makes the runner use the commit you reviewed. Here is the setup, the CI check, the policy, and what a lockfile cannot tell you.

ByKarthik KumarCafiyn Innovations
At a glance
Status
Public preview since 14 October 2026. Pre 1.0, and formats and flags may change
Plans
Enterprise Cloud, Enterprise Cloud with data residency, Team and Free. Not GitHub Enterprise Server
Install
gh extension install github/gh-actions-lock
Generate
gh actions-lock, which writes .github/workflows/actions.lock
Check in CI
gh actions-lock --verify
Enforce
The Require lockfile policy, in public preview for enterprise, organisation and repository admins
Known gap
Workflows that use local path actions are skipped for onboarding

The problem it addresses

A workflow that says uses: some/action@v4 trusts a moving target. GitHub's changelog puts it plainly: tags and branches can move after you review a workflow, so a later run might execute different code. If an action is compromised, a moved tag or branch can introduce malicious code into your workflow without any change to your repository.

A lockfile keeps the references in your workflow and makes the runner execute the exact commits you locked. Your workflow file still reads the way you wrote it, and the lockfile decides what actually runs.

Set it up

The extension needs the gh CLI and does not support GitHub Enterprise Server. Install it, run it from the repository, then review and commit what it generates. Per the README, the first run scans every workflow under .github/workflows, pins each resolvable action to a SHA, and writes the lockfile. Workflows are onboarded to the lockfile one at a time.

  • gh extension install github/gh-actions-lock
  • gh actions-lock
  • Review the diff: the lockfile at .github/workflows/actions.lock and any changed workflow files. Pins cover actions, their transitive dependencies and reusable workflow dependencies.
  • Commit the lockfile and the workflow changes together, in one reviewable pull request.
  • Run gh actions-lock again whenever a workflow is created that has uses dependencies, or an existing one adds or removes some.

What it enforces at run time

Once a workflow is onboarded, every dependency must have a lockfile entry, and the runner uses the recorded commit even if a tag or branch has since moved. The README says each locked pin is checked again the way the runner checks it at job start: the repository was not renamed or transferred, the pinned commit still exists, and full version tags such as v4.2.1 still point at it. Redirects and identity mismatches are blocked at runtime.

Locked actions must also have a branch that contains the locked commit, which the README says makes impostor commit style attacks harder.

Check it in CI

A lockfile that nobody verifies drifts. The README gives two checks. gh actions-lock --verify runs the full check without writing anything, and is the one for CI. It also checks that a commit locked under a branch or partial version such as main or v4 is still in that ref's history. gh actions-lock --verify-local runs offline and only checks that every reference has an entry, not that the entries are trustworthy, so the README says to use --verify in CI.

Writes are all or nothing: if a run finds an error it cannot fix, it changes no workflow and no lockfile entry, even for workflows that are otherwise fine.

Updating pins, and the policy

Locked pins are sticky, so a normal run only resolves references the lockfile does not record yet, and pins to branches or partial versions do not advance when upstream moves. gh actions-lock --relock regenerates the lockfile from the current upstream commits. A suspicious pin, whose recorded commit is no longer reachable upstream, is left as an error, and --accept-moved resolves those as well. Treat an unreachable commit as something to investigate before you accept it.

Dependabot helps with the routine updates. When it opens a version update for an action in an onboarded workflow, it also regenerates the matching lockfile entry in the same pull request. Admins can require lockfiles across an enterprise, organisation or repository with the Require lockfile policy, also in public preview.

What a lockfile does not do

GitHub says it directly: locking does not determine whether the dependency itself is safe, so review dependencies before locking them. A lockfile reliably runs whatever you pointed it at, which includes a version that was already compromised when you locked it.

It is also early. The README calls the tool pre 1.0, warns that the lockfile format, command flags and behaviour may change without notice, and lists local path actions as a short term gap. Expect to revisit your setup as it changes, and keep your own pinned SHAs for anything critical in the meantime.

Where to start

Onboard the workflows that hold secrets first: deploys, releases, package publishing and anything that authenticates to a cloud account. A moved tag in one of those is the expensive case, and they are usually a handful of files. Move the rest across once the CI check has run clean for a week.

What to do

  1. 1Install the extension and run gh actions-lock in a branch of your most sensitive repository.
  2. 2Review every generated pin before you commit it, because a lockfile locks whatever you point it at.
  3. 3Add gh actions-lock --verify to CI so a stale or tampered lockfile fails the build.
  4. 4Onboard deploy, release and publish workflows first, then the rest.
  5. 5Let Dependabot keep the lockfile current, and decide whether to turn on the Require lockfile policy for the organisation.
  6. 6Watch the extension's releases, since the format and flags can change before 1.0.

Common questions

What is a GitHub Actions workflow lockfile?

A file at .github/workflows/actions.lock that records the exact commits of the actions and reusable workflows your workflows depend on, including their transitive dependencies. For a workflow onboarded to it, the runner executes the recorded commits even if a tag or branch has moved.

How do I turn on Actions lockfiles?

Install the gh CLI, run gh extension install github/gh-actions-lock, then run gh actions-lock in your repository and commit the generated lockfile and workflow changes. Workflows are onboarded one at a time.

Do Actions lockfiles work on the Free plan?

Yes. GitHub's changelog lists the public preview for GitHub Enterprise Cloud, Enterprise Cloud with data residency, Team and Free plans. GitHub Enterprise Server is not supported.

How do I check a lockfile in CI?

Run gh actions-lock --verify, which checks without writing anything. The offline gh actions-lock --verify-local only confirms every reference has an entry and does not check that the entries are trustworthy.

Is a lockfile the same as pinning actions to a SHA by hand?

Not quite. Pinning by hand covers the references you write. The lockfile also covers transitive dependencies and reusable workflow dependencies, and the runner verifies the entries, including that the repository was not renamed or transferred and that the commit exists.

Does a lockfile make an action safe?

No. GitHub says locking does not determine whether a dependency is safe, so review dependencies before locking them. A lockfile makes sure you run the commit you reviewed, nothing more.

Sources

Read against the primary documentation rather than secondary coverage. Where a figure comes from a provider's own docs, it is quoted as published on 2026-10-19.

Related

More from Signals

OpenAI removes o1, o3-mini, o4-mini and GPT-4 Turbo on 23 October. The replacements it names run from 5.5 times the price to 97 percent less.
Eleven models and six fine tuned models go dark in four days. Here is OpenAI's own mapping, what each landing costs on a typical month of traffic, and the places where the named replacement is not the cheapest or cannot be used at all.
OpenCode says a breach hit 1.4 percent of Console users who linked an AI provider. Rotate those keys before the root cause is published.
OpenCode has confirmed the breach and has not said how it happened or what was taken. Here is what the vendor said, who is exposed, the order to work in, and how to limit the damage next time.
Next.js 16.4.1 and 15.5.28 fix two critical remote code execution flaws. For one of them there is no workaround.
Two of the three fixes were postponed from September. Here is what each flaw needs in order to be reachable, the one workaround that exists, and what the announcement leaves out.
A poisoned npm release that punishes you for revoking the stolen token. The order of your response is the whole defence.
Most incident guidance starts with revoking the leaked token. Here that is the trigger. What StepSecurity found, the order it recommends, and why a valid provenance attestation did not help.
Claude Haiku 5.5 costs a tenth of Haiku 4.5 per token. One token past 100,000 it costs half.
The rate card is a tenth of Haiku 4.5. The footnote is a threshold that moves the price fivefold and that a tokenizer change pushes you toward.
Gemini 4 Argon launched at $2 and $10 and goes to $4 and $20 on 1 December. Price your product on the second number.
Every tier on the pricing page doubles on the same date. What changes, what the number includes, and what to do if you are building on the launch rate.
Claude Haiku 5.5 is not a model id swap. Five things that worked on Haiku 4.5 now return a 400.
The model id is the easy part. The requests that now fail, the response parsing that changes, and the details that fail quietly.
Next.js shipped 16.3.7 and 16.3.8 a day apart. Only one of them is the security release.
Two patch releases a day apart, one of them a decoy if you are not reading carefully. And the 15.5 line does not get the high severity fix at all.
The EU AI output marking rule is not a December deadline. For most teams it started in August.
Almost every summary of this gives one date. There are two, and which one applies to you depends on when you shipped, not on how big you are.
Sonnet 5.5 cut the rate by a third and the token count went up by about 30 percent.
A third off the per-token rate is not a third off the bill when the same text now costs more tokens. Here is the arithmetic, and the five ways your code can break.
Your AI gateway holds every provider key you have. A 9.9 just landed in LiteLLM.
An AI gateway concentrates every upstream key into one process. That is the point of it, and it is why a privilege escalation there is worse than it looks.
The table your coding agent created does not have row level security on it.
Dashboard-created tables get row level security by default now. API-created tables do not, and API is how your coding agent works.
A 9.5 in next/og. Whether it reaches you depends on one line in your OG route.
The advisory rates it 9.5, but it only fires if your OG image route puts attacker-controlled text into SVG. Here is how to find out which side of that line you are on.
OpenAI and Anthropic both cut prices on 22 September. One of them costs you a refactor.
Two frontier price cuts in one day is a good week for anyone paying a token bill. The migration cost is not evenly distributed, and one of the two prices comes with an expiry hedge.
A package install reads your home directory. This week two of them did it on purpose.
The implant did nothing clever. It read the files your shell reads, in the place your credentials live, and sent them somewhere else. That is the whole attack, and it works.
GitHub is switching off SHA-1 SSH keys. Find out now whether yours is one of them.
The keys at risk are the old ones, on the machines nobody logs into, in the pipelines that have run untouched for three years. Those are also the ones that will fail loudest.
Every third-party script tag is a standing grant to run code on your visitors.
A marketing form, a chat widget, an analytics snippet. Each one is permission for someone else's server to execute whatever it sends, on every page it sits on, forever.
1.8 million Android apps were scanned for hardcoded keys. Here is how to check yours.
Finding secrets in shipped apps is now a cheap, automated pipeline. Anything compiled into an APK, an IPA or a JavaScript bundle should be treated as already published.
OpenAI's Agents API will hold your agent state. What breaks if you ever need to leave.
Two major providers moved into the agent state layer in the same week. A managed harness is a real shortcut, as long as you keep a copy of what it holds.
Meta's Muse agent can now check out at your store. What merchants should change.
Agent purchases are arriving through wallets and single-use cards, not through merchants adopting a new protocol. Many merchants will receive them without choosing to.
What Brevo's SSO incident teaches about multi-tenant SAML and hijacked sending accounts.
One incident, two lessons: why email authentication did not help, and the tenant-scoping mistake anyone shipping SSO can make.
Cloudflare now sorts bots into Search, Training and Agent. What it means for your site and your agent.
The same change lands on two audiences. Site owners can now accidentally block search; agent builders will find more doors closed.
OpenAI has announced ten dated deadlines between 23 October 2026 and 1 April 2027. Here is the calendar.
Ten dated deadlines in six months, every one announced in public. The failure mode is never the notice. Updated 19 October with the entries added since September.
Nvidia bought Hugging Face. Your open-weight fallback is now a vendor relationship.
The commitments say nothing breaks. The structural change is that "we can always self-host" is now a dependency on one vendor rather than on a neutral commons.
The Videos API goes away on 24 September and OpenAI names nothing to move to.
Every other deprecation on OpenAI's page offers a migration target. This one does not, which makes it a different kind of problem.
Whisper shuts down on 26 February. The risk is not the deadline.
Five months is a generous window. Whisper is also typically wired into a background job that fails into a queue rather than into a user's face.
The Assistants API is gone. Your app may not have told you yet.
It shut down on 26 August 2026. The replacement is not a drop-in, and the most common migration mistake changes your model's behaviour without throwing an error.
One Copilot code review costs 13 requests. Here is the rest of the maths.
Copilot now bills on usage rather than seats. The headline change is simple. The multipliers underneath it are where teams get surprised.
Row-level security is on by default now. That is not the same as being protected.
Lovable fixed the default. The gap that actually leaks data was never the default, it was the policy, and no platform can write that for you.
Your model comparison is measuring the wrong number.
Every price list is per token. Your bill is per finished piece of work. Those two numbers can rank models in opposite orders.
An agent with production log access is a new identity. Treat it like one.
Always-on agents that read production logs are arriving fast. The access-control question they raise is old and well understood, which is the good news.

Open the tool.

Ten production categories, three minutes, and a ranked list of what to fix first.

Check your own stack