Configure a shared gh-aw Copilot model variable for dotnet/sdk workflows

Open Beginner friendly
#55,348 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
65/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
github-actions
Domain
ci-cd

Research direction

Inspect .github/workflows/issue-triage.lock.yml and .github/workflows/add-tactics-template-on-comment.lock.yml, then check the repository Actions variables and whether org-level access is available. Configure the supported GH_AW_DEFAULT_MODEL_COPILOT value, manually dispatch issue-triage.lock.yml, and confirm the run passes Copilot model validation without adding a source-workflow model override.

Written by the indexing model from the issue text.

Description

untriaged

Summary

The dotnet/sdk gh-aw workflows already support shared model selection through GitHub Actions variables, but the repository does not currently appear to define one. We should configure a repo-level or org-level model variable instead of hardcoding a model in individual workflow source files.

Recommended starting point:

GH_AW_DEFAULT_MODEL_COPILOT=any

If we need separate behavior by phase, gh-aw also supports:

GH_AW_MODEL_AGENT_COPILOT=<agent model alias>
GH_AW_MODEL_DETECTION_COPILOT=<detection model alias>

Why

Recent PR feedback on dotnet/sdk#55244 pointed out that hardcoding a model in a workflow source file creates churn and cost/availability risk when supported model names change. The generated gh-aw lock files already provide a better central control point via Actions variables, so model selection should happen through repo/org configuration.

This lets us share one model choice across the gh-aw workflows without repeatedly editing workflow YAML.

Current evidence

The checked-in gh-aw source workflow for issue triage uses only:

engine: copilot

The generated locks already read model configuration from variables:

COPILOT_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || vars.GH_AW_DEFAULT_MODEL_COPILOT || 'claude-sonnet-4.6' }}

and for detection:

COPILOT_MODEL: ${{ vars.GH_AW_MODEL_DETECTION_COPILOT || vars.GH_AW_DEFAULT_MODEL_COPILOT || 'claude-sonnet-4.6' }}

These are present in both current gh-aw lock files:

  • .github/workflows/issue-triage.lock.yml
  • .github/workflows/add-tactics-template-on-comment.lock.yml

Repository variable check for dotnet/sdk found only these Copilot-related variables:

COPILOT_AGENT_FIREWALL_ALLOW_LIST_ADDITIONS=vsblob.vsassets.io
COPILOT_AGENT_FIREWALL_ENABLED=true

No repo-level GH_AW_DEFAULT_MODEL_COPILOT, GH_AW_MODEL_AGENT_COPILOT, or GH_AW_MODEL_DETECTION_COPILOT was found. I could not inspect dotnet org-level variables because GitHub returned HTTP 403 for org Actions variables.

Empirical model results

The current locked gh-aw runtime for issue-triage.lock.yml is:

gh-aw compiler: v0.81.6
Copilot CLI: 1.0.65
AWF/firewall: 0.27.11

The lock's model map includes these agent aliases:

sonnet-6x
gpt-5.5
gpt-5.4
gpt-5.3
gemini-pro
any

It does not include gpt-5.6, gpt-5.6-luna, or luna.

Observed failures:

[ERROR] Error: model 'gpt-5.6-luna?effort=high' is retired or unsupported.

and in a follow-up variable-based test on nagilson/sdk run 29605842281:

COPILOT_MODEL: gpt-5.5?effort=high
[ERROR] Error: model 'gpt-5.5?effort=high' is retired or unsupported.

The temporary fork variable used for that test was removed afterward.

Important distinction: the model alias spec supports URL-style parameters like ?effort=high, but this locked runtime still rejected the full gpt-5.5?effort=high string. The current repo should therefore prefer a supported alias without parameters unless/until the locked gh-aw/AWF version is updated and validated.

Proposed change

Configure one shared Actions variable for gh-aw model selection:

GH_AW_DEFAULT_MODEL_COPILOT=any

Alternative if we want to pin only the agent phase while leaving detection at the generated default:

GH_AW_MODEL_AGENT_COPILOT=any

Avoid adding model: to individual gh-aw source files unless there is a workflow-specific requirement.

Acceptance criteria

  • dotnet/sdk has a repo-level or org-level gh-aw model variable configured.
  • Existing gh-aw workflows continue to compile from source without hardcoded model churn.
  • A manually dispatched issue-triage.lock.yml run succeeds past the Copilot CLI model validation step.
  • The selected value is one of the aliases supported by the checked-in lock/runtime, such as any, unless a newer gh-aw/AWF lock is generated and validated.

Follow-up considerations

  • If the org wants this across multiple dotnet repositories, prefer an org-level variable over per-repo variables.
  • Native GitHub Copilot PR reviews do not appear to use these gh-aw variables from this repository. This issue is specifically about gh-aw workflows.
  • Custom checked-in agents may still have independent model fields, for example .github/agents/static-web-assets-agent.agent.md currently declares its own model.
Dominant language
C#
Stars
3.2k
Forks
1.3k
Avg merge
4d 3h
Merged PRs (30d)
247

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dotnet/sdk

All issues in dotnet/sdk

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.