- **`windows.Dockerfile`** — fixes the `COPY` source path from `./test/Windows.Tests.ps1` to `./test/windows/Windows.Tests.ps1` (root cause of the 12-month "in_progress forever" state); adds `COPY ./config/version.json` to the `test` stage; replaces the commented `CMD` with a real `CMD` so `docker run`/`docker compose run` invokes Pester without arguments. - **`test/windows/Windows.Tests.ps1`** — fixes the `VC.CMake.Project` pattern typo (`,versiona*` → `,version=*`) and standardises all three VS-component patterns to `,version=*`; adds a `Flutter version` test that reads `config/version.json` and asserts `flutter --version` inside the container reports the same version; adds a `Flutter doctor` test with a per-line parser (skip disabled platforms, fail on any non-`[✓]` for Windows toolchain lines, fail on `[✗]` elsewhere). - **`script/RunPester.ps1`** — forces `[Console]::OutputEncoding = UTF8` so the `[✓]`/`[!]`/`[✗]` doctor glyphs survive the `windows-2025` runner's default OEM codepage. - **`test/windows/`** — deletes the dead `ory/dockertest` Go skeleton (`main.go`, `main_test.go`, `go.mod`, `go.sum`) that was never wired into CI and had its only meaningful assertion commented out. - **`.github/workflows/windows.yml`** — deletes three commented-out blocks (`Scan with Docker Scout`, `Push to Docker Hub`, `validate_version` job referencing the deleted `config/version.cue`); drops the now-unused elevated permissions (`packages: write`, `pull-requests: write`, `security-events: write`). --------- Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.2 KiB
MODIFIED Requirements
Requirement: Upgrade PR contains a coherent, validated version.json
When the workflow opens an upgrade PR, the included config/version.json SHALL satisfy cue vet config/schema.cue -d '#Version' and SHALL contain the Android buildTools.version listed for that exact Flutter tag in engine/src/flutter/tools/android_sdk/packages.txt upstream. The same version.json SHALL also contain a windows.git.version equal to the latest non-prerelease tag at https://api.github.com/repos/git-for-windows/git/releases/latest (with any .windows.N suffix stripped) and the VS BuildTools component versions sourced from the deterministic source documented in p3-windows-version-schema's design.
The experience context is the CI engineer reviewing or merging the upgrade PR — they observe that downstream image builds will not silently regress on Android tooling or on Windows tooling.
Scenario: Build-tools version tracks the new Flutter tag
- GIVEN the workflow is opening an upgrade PR for Flutter
X.Y.Z - AND Flutter's
engine/src/flutter/tools/android_sdk/packages.txtat tagX.Y.Zlistsbuild-tools;A.B.C - WHEN the PR is created
- THEN
config/version.jsonin the PR containsandroid.buildTools.version == "A.B.C"
Scenario: Generated config is schema-valid
- GIVEN the workflow has produced a candidate
config/version.json - WHEN the
validate_config_versionjob runs - THEN
cue vet config/schema.cue -d '#Version' config/version.jsonexits 0 - AND the workflow only proceeds to open the PR if validation passes
Scenario: Git for Windows tracks the latest published tag
- GIVEN
https://api.github.com/repos/git-for-windows/git/releases/latestreturns an asset whose underlying Git semver isM.m.p - WHEN the upgrade PR is created
- THEN
config/version.jsonin the PR containswindows.git.version == "M.m.p"
Scenario: Windows toolchain block is schema-valid
- GIVEN the workflow has produced a candidate
config/version.jsoncontaining the newwindowsblock - WHEN the
validate_config_versionjob runs - THEN
cue vetpasses against thewindowsblock as well as the existingflutterandandroidblocks