All articles
Dev ToolsBy Petru Popa · 5 min read

The Version Pin That Stopped Protecting You

GitHub Models was retired on 30 July 2026. The Action that called it shipped a fix one day earlier — to a tag your workflow is not using.

GitHub Models was retired on 30 July 2026. The changelog and the documentation agree on the scope: the playground, the model catalog, the inference API, and bring-your-own-key are all gone. The documentation points remaining users at Azure AI Foundry for model access or at Copilot for building on GitHub, and states that Models was a separate service from Copilot.

Read as a product sunset, that is a two-line story. The part that costs a team a morning is not in either announcement. It is in the Action.

Where the break actually lands

If you called GitHub Models from CI rather than from application code, you called it through actions/ai-inference — the first-party Action, authored by GitHub, for running a model against a prompt inside a workflow.

That Action shipped v3 on 29 July 2026, roughly a day before the service died. The release notes credit one substantive change among the dependency bumps: pull request 236 removed github-models support and made Copilot the only provider.

Now open action.yml at the v2 tag. The provider input still defaults to github-models, described in the file as calling the GitHub Models REST API, with endpoint defaulting to https://models.github.ai/inference and token defaulting to ${{ github.token }}. That is the default path, not an opt-in legacy mode. A workflow on @v2 is pointed at an API the documentation now says is unavailable.

The uncomfortable detail is what the major tags resolve to. v1 and v2 are moving tags, and they have not moved. Today v1 dereferences to a commit dated 6 August 2025 and v2 to one dated 25 May 2026. Only v3 carries the 29 July 2026 commit that removed the dead provider. Pinning to a major version is normally the thing that protects you from a vendor's breaking change. Here it is the mechanism that delivers it.

The README points at the broken tag

The current README is written for the Copilot-only world. It explains that the Copilot CLI is not pre-installed on GitHub-hosted runners, and its example workflow installs @github/copilot with npm, adds checkout and setup-node steps, and passes COPILOT_GITHUB_TOKEN from a personal access token stored as a secret.

Those examples pin actions/ai-inference@v1. Five times. Copy the current README verbatim and you get August 2025 code receiving Copilot-era inputs. The repository description still describes the Action as one for calling AI models with GitHub Models. The repository is not archived; it carries 23 open issues and an MIT license, and was pushed to on 30 July 2026.

The migration is not a version bump

Compare the two READMEs directly, because the diff is the actual cost.

At v2.1.1, the documented job declared permissions: models: read, ran two steps, and needed no secret — the built-in token was enough. At v3, the documented job checks out the repository, installs Node, installs a CLI from npm, and authenticates it with a personal access token.

Two of those changes matter beyond line count. First, models no longer appears in the documented list of GITHUB_TOKEN permission scopes at all — a workflow that still declares it is naming a scope the reference does not describe. Second, an ephemeral, job-scoped token has been replaced by a personal access token: a credential with a human owner, an expiry date, and a rotation story. That is a different security review than the one your workflow passed last quarter, and it is the kind of cost that never appears in a sunset notice. It is the same gap we described in From PoC to Production — the integration and operations work nobody scoped during the prototype and everybody pays for later.

What else still points at the dead endpoint

The github/gh-models CLI extension is not archived. Its description still calls it a CLI extension for the GitHub Models service, its most recent release is dated 4 August 2025, and it was last pushed on 4 June 2026, with 13 open issues.

Outside GitHub, LiteLLM still documents a github/ provider prefix with a GITHUB_API_KEY environment variable and example model names, carrying no deprecation notice. Any gateway config that routes a model alias through that prefix will keep resolving happily to a service that no longer answers.

Do this before your next scheduled workflow run

Three greps, in the repositories that matter:

grep -rn 'actions/ai-inference@v[12]' .github/workflows
grep -rn 'models: read' .github/workflows
grep -rn 'github/' litellm_config.yaml

Any hit in the first two is a broken job waiting for its next trigger. Fix it by moving to @v3 and budgeting for the install step and the token — not by bumping the tag alone, which will fail on a missing CLI. Any hit in the third is a routing rule to delete.

The assumption this retirement invalidates is narrow and worth stating plainly: an inference endpoint bundled into a platform you already use is a prototype convenience, not a dependency with a support contract. New customers were cut off on 16 June and the retirement was announced on 1 July, so the deadline was public for four weeks. What was not public, until you opened the repository, was that staying on a pinned major version would carry you straight through the deadline.

The central claim here is falsifiable. I am asserting that workflows pinned to @v1 or @v2 fail outright rather than degrade, because both tags resolve to code whose default provider calls a retired API. Two things would prove that wrong: GitHub moving the v1 and v2 tags onto the v3 commit, or models.github.ai continuing to answer by proxying to Copilot. Either would make this a documentation defect rather than a breakage. Check your own workflow run history before you believe me — the evidence is one failed job away.