GitHub Models retired on July 30, 2026. The remaining task is not to revisit the deadline. Search code, configuration, CI, and runbooks for old endpoints and model identifiers, then assign each live dependency to one of three outcomes: migrate it, move it to another service, or remove the feature. A documented zero-result search is also a valid conclusion.
GitHub’s final notice says the playground, model catalog, inference API, and bring-your-own-key endpoints are no longer available to any customer, including customers with active usage. BYOK allowed a customer to bring a separate provider key through the GitHub Models surface. Once that routing surface is retired, an otherwise valid provider key does not keep the old GitHub Models path alive.
Confirmed status after retirement
| Item | Confirmed value | Source URL | Checked |
|---|---|---|---|
| GitHub Models status | Retired as of July 30, 2026 | https://github.blog/changelog/2026-07-30-github-models-is-now-retired/ | 2026-08-24 |
| Retired surfaces | Playground, model catalog, inference API, and BYOK; existing customers are included | https://github.blog/changelog/2026-07-30-github-models-is-now-retired/ | 2026-08-24 |
| Replacement directions named by GitHub | Microsoft Foundry for model access; GitHub Copilot for AI-powered workflows directly on GitHub | https://github.blog/changelog/2026-07-30-github-models-is-now-retired/ | 2026-08-24 |
| Foundry prerequisite | An Azure subscription with a valid payment method; usage is billed according to deployment type | https://learn.microsoft.com/en-us/azure/foundry/foundry-models/how-to/quickstart-github-models?view=foundry-classic | 2026-08-24 |
| Foundry model setup | Models must be added to the resource before they are named in the model parameter | https://learn.microsoft.com/en-us/azure/foundry/foundry-models/how-to/quickstart-github-models?view=foundry-classic | 2026-08-24 |
The retirement notice does not say that GitHub will rewrite references inside customer repositories. Treat discovery and cleanup as repository work that requires your own evidence.
Search for old calls and model names
1. Define the search boundary
Include more than application source:
- application code, tests, examples, and notebooks;
- non-secret environment templates such as
.env.example; - GitHub Actions and other CI configuration;
- infrastructure, container, and deployment configuration;
- README files, runbooks, incident procedures, and internal examples.
Do not copy values from real .env files or secret managers. Record variable names and reference paths, not credentials.
2. Search for GitHub Models-specific patterns
From the repository root, an rg search can identify likely entry points while excluding dependencies and generated output:
rg -n -i --hidden \
-g '!node_modules/**' -g '!vendor/**' -g '!dist/**' -g '!build/**' \
'github[ -]?models|models\.github\.ai|models\.inference\.ai\.azure\.com|azure\.ai\.inference|ModelsClient|GITHUB_TOKEN'
The endpoint strings, client name, and SDK namespace are search candidates for old configuration and samples. GITHUB_TOKEN has many unrelated uses, so a match alone does not establish a GitHub Models dependency. Read the surrounding code and confirm that the token participates in a model-inference request.
If your repository uses another search tool, preserve the same evidence: query, root, exclusions, timestamp, and complete match list.
3. Derive model-name searches from your configuration
Inspect matched files for model, model_name, deployment, and endpoint fields:
rg -n -i 'model(_name)?|deployment|endpoint'
rg -n -F '<model name or configuration key found in your repository>'
Do not depend on a supposed universal list of retired model names. Extract the identifiers your application actually used, then search for each exact string. This second pass often finds evaluation snapshots, fallback configuration, documentation, and tests that no longer mention the product name.
4. Trace configuration references without exposing values
When the search finds an environment-variable name, trace where the application reads it, where CI supplies it, and how the final endpoint and model identifier are assembled. You can map that reference chain without printing the secret value.
Follow feature flags and fallback branches as well as the primary path. A disabled feature can become live again, and a fallback can silently call the retired service only when the preferred provider fails.
5. Classify every match
| Classification | Test | Action |
|---|---|---|
| Live execution path | Reachable from a normal command, request, scheduled job, or test | Send to the replacement decision |
| Dormant path | Disabled by a feature flag but still recoverable | Assign an owner and disposition date |
| Documentation or sample | Not executed, but capable of misleading a maintainer | Update to the selected path or remove it |
| Historical record | Needed to explain an incident or prior migration | Keep it with the retirement date clearly labeled |
| Unrelated match | For example, GITHUB_TOKEN used only for checkout or package access | Record the reason and exclude it |
If the search returns zero matches, save the query, root, exclusions, and date. “Not found within this documented boundary” is more defensible than an unsupported claim that no dependency exists anywhere.
Choose migration, another service, or removal
| Condition | Decision | Completion evidence |
|---|---|---|
| The application still needs general inference, and the organization accepts Azure billing, region, model, identity, and data-handling constraints | Migrate to Microsoft Foundry | Deploy the selected model, configure the supported identity and endpoint, and pass representative inputs |
| Inference remains necessary, but Foundry does not fit contract, region, model, policy, or operating requirements | Move to another service | Test candidates against the same inputs and acceptance criteria, including authentication and failure behavior |
| The real need is developer assistance inside GitHub rather than a general application inference API | Redesign around an appropriate GitHub Copilot workflow | Demonstrate that the GitHub task is covered without building a replacement application backend |
| The feature lacks users, ownership, acceptance criteria, or sufficient value to justify ongoing cost | Remove the feature | Disable callers, remove misleading UI and monitoring, and document any conditions for reconsideration |
| The match is only a historical record and no runtime path reaches it | Do not migrate it | Label it as retired and prevent examples from being copied as current setup |
Searching does not authorize a paid Foundry deployment or a new provider contract. Resource creation, credential issuance, and production traffic changes remain separate approval points.
Verify the replacement boundary
Changing a model string is not enough. Use fixed representative inputs and verify only the capabilities the application actually relies on:
- Authentication failures stop without writing secrets into logs.
- Required response modes—ordinary responses, streaming, structured output, or tool calls—still satisfy the application contract.
- The selected model exists in the chosen region and deployment.
- Content filtering and refusal behavior are reviewed for the application’s accepted and rejected cases.
- Error handling exposes a clear operational failure instead of silently falling back to GitHub Models.
- A final repository search leaves only historical references that were deliberately retained.
The old service is no longer available for a live side-by-side test. If you did not preserve representative inputs and acceptance criteria before retirement, state that previous behavioral equivalence could not be verified. Do not manufacture a benchmark from memory.
Cleanup and rollback planning
Keep the new endpoint, deployment, and identity outside application logic so a failed replacement test can be disabled without a broad rewrite. During the transition, preserve a feature-off state or a human-operated fallback. Returning to the retired GitHub Models endpoint is not a viable rollback.
Remove old monitoring checks, playground links, token instructions, and onboarding steps after the replacement decision. Otherwise, future maintainers may treat a stale sample as the canonical path and recreate a known failure.
Primary sources
These official sources were opened and checked on 2026-08-24 (JST):
- GitHub, GitHub Models is now retired — final retirement status, affected surfaces, and replacement directions.
- GitHub, GitHub Models — current documentation confirming retirement and separation from GitHub Copilot.
- Microsoft, Upgrade from GitHub Models to Microsoft Foundry Models — Azure subscription, billing, deployment, and model-configuration requirements.
The official pages checked here do not provide a universal inventory of model names used by every customer, and they do not say that repository references will be updated automatically. Derive the search list from your own code and configuration.