dotnet / dotnet/sdk

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
untriaged
Dominant language
C#
Stars
3.2k
Forks
1.3k
PR merge metrics
PR metrics pending

Description

## 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:

```text
GH_AW_DEFAULT_MODEL_COPILOT=any
```

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

```text
GH_AW_MODEL_AGENT_COPILOT=
GH_AW_MODEL_DETECTION_COPILOT=
```

## 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:

```yaml
engine: copilot
```

The generated locks already read model configuration from variables:

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

and for detection:

```yaml
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:

```text
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:

```text
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:

```text
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:

```text
[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`:

```text
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:

```text
GH_AW_DEFAULT_MODEL_COPILOT=any
```

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

```text
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.

Contributor guide

No contributing guide indexed for this repository

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.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.