From 9d31058114e4baf86781ad38ed90257f2de88267 Mon Sep 17 00:00:00 2001 From: Daz DeBoer Date: Sat, 1 Aug 2026 17:15:42 -0600 Subject: [PATCH] Add Windows coverage for caching via a new smoke-test suite (#1027) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Why Issue #1013 revealed that caching was **never storing content on Windows**. Nothing caught it because the integ-tests lost their multi-OS matrices: these workflows used to default to `'["ubuntu-latest", "windows-latest", "macos-latest"]'`, narrowed to ubuntu-only in bcd07e66 / d74ee73e (Aug 2024). The Windows code path has been dark ever since. ## What Extract the two cheapest caching tests — `restore-gradle-home` and `basic-cache-provider` — into a new `suite-smoke-test-caching` workflow, and run that suite on both `ubuntu-latest` and `windows-latest`. Both tests seed a cache in one job and then verify it in a dependent job with an `--offline` build, so a cache that stores nothing fails the verify job rather than passing silently. - Rename `integ-test-{restore-gradle-home,basic-cache-provider}` → `smoke-test-*` and drop them from `suite-integ-test-caching` - Add the new suite to both `CI-integ-test` and `CI-integ-test-full`, each with its own concurrency group matching the sibling suites - Include `smoke-tests` in the `integ-test-success` aggregate gate - Ignore the generated `task-configured.txt` marker in `workflow-samples` - Drop a dead `needs.determine-suite` guard on the `build-distribution` step — `CI-integ-test` has no such job, so it always evaluated to true The suite runs on Windows in PR CI (not just `CI-integ-test-full`) specifically so the failure is visible on this PR and the fix can be verified the same way. ## Expected result This PR is expected to be **red on Windows**. `restore-gradle-home-dependencies-cache` and `basic-cache-verify-build` should fail with dependency-resolution errors under `--offline` — that is the bug from #1013 being caught. The ubuntu legs should stay green. Cross-OS cache keys are safe: both providers include `RUNNER_OS` in the key (`sources/src/cache-service-basic.ts:146`), so the matrix legs don't collide. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 (1M context) --- .github/workflow-samples/.gitignore | 3 +++ .github/workflows/ci-integ-test-full.yml | 10 +++++++ .github/workflows/ci-integ-test.yml | 14 +++++++++- ...ml => smoke-test-basic-cache-provider.yml} | 0 ...yml => smoke-test-restore-gradle-home.yml} | 0 .../workflows/suite-integ-test-caching.yml | 11 -------- .../workflows/suite-smoke-test-caching.yml | 27 +++++++++++++++++++ 7 files changed, 53 insertions(+), 12 deletions(-) rename .github/workflows/{integ-test-basic-cache-provider.yml => smoke-test-basic-cache-provider.yml} (100%) rename .github/workflows/{integ-test-restore-gradle-home.yml => smoke-test-restore-gradle-home.yml} (100%) create mode 100644 .github/workflows/suite-smoke-test-caching.yml diff --git a/.github/workflow-samples/.gitignore b/.github/workflow-samples/.gitignore index 1b6985c0..7d8e74ca 100644 --- a/.github/workflow-samples/.gitignore +++ b/.github/workflow-samples/.gitignore @@ -3,3 +3,6 @@ # Ignore Gradle build output directory build + +# Marker file written when the 'test' task is configured +task-configured.txt diff --git a/.github/workflows/ci-integ-test-full.yml b/.github/workflows/ci-integ-test-full.yml index f17f3d16..44a029a2 100644 --- a/.github/workflows/ci-integ-test-full.yml +++ b/.github/workflows/ci-integ-test-full.yml @@ -14,6 +14,16 @@ permissions: contents: read jobs: + smoke-tests: + uses: ./.github/workflows/suite-smoke-test-caching.yml + concurrency: + group: CI-smoke-test-caching + cancel-in-progress: false + with: + skip-dist: true + runner-os: '["ubuntu-latest", "windows-latest"]' + secrets: inherit + caching-integ-tests: uses: ./.github/workflows/suite-integ-test-caching.yml concurrency: diff --git a/.github/workflows/ci-integ-test.yml b/.github/workflows/ci-integ-test.yml index e74beadc..d2f9aa78 100644 --- a/.github/workflows/ci-integ-test.yml +++ b/.github/workflows/ci-integ-test.yml @@ -21,9 +21,19 @@ jobs: - name: Checkout sources uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Build and upload distribution - if: ${{ needs.determine-suite.outputs.suite != 'full' }} uses: ./.github/actions/build-dist + smoke-tests: + needs: build-distribution + uses: ./.github/workflows/suite-smoke-test-caching.yml + concurrency: + group: CI-smoke-test-caching-${{ github.ref }} + cancel-in-progress: false + with: + skip-dist: false + runner-os: '["ubuntu-latest", "windows-latest"]' + secrets: inherit + caching-integ-tests: needs: build-distribution uses: ./.github/workflows/suite-integ-test-caching.yml @@ -64,6 +74,7 @@ jobs: if: ${{ always() }} needs: - build-distribution + - smoke-tests - caching-integ-tests - other-integ-tests - dependency-submission-integ-tests @@ -74,6 +85,7 @@ jobs: run: | echo "One or more integ-test jobs did not succeed:" echo " build-distribution: ${{ needs.build-distribution.result }}" + echo " smoke-tests: ${{ needs.smoke-tests.result }}" echo " caching-integ-tests: ${{ needs.caching-integ-tests.result }}" echo " other-integ-tests: ${{ needs.other-integ-tests.result }}" echo " dependency-submission-integ-tests: ${{ needs.dependency-submission-integ-tests.result }}" diff --git a/.github/workflows/integ-test-basic-cache-provider.yml b/.github/workflows/smoke-test-basic-cache-provider.yml similarity index 100% rename from .github/workflows/integ-test-basic-cache-provider.yml rename to .github/workflows/smoke-test-basic-cache-provider.yml diff --git a/.github/workflows/integ-test-restore-gradle-home.yml b/.github/workflows/smoke-test-restore-gradle-home.yml similarity index 100% rename from .github/workflows/integ-test-restore-gradle-home.yml rename to .github/workflows/smoke-test-restore-gradle-home.yml diff --git a/.github/workflows/suite-integ-test-caching.yml b/.github/workflows/suite-integ-test-caching.yml index 555aa30e..eb73d27d 100644 --- a/.github/workflows/suite-integ-test-caching.yml +++ b/.github/workflows/suite-integ-test-caching.yml @@ -36,11 +36,6 @@ jobs: with: skip-dist: ${{ inputs.skip-dist }} - restore-gradle-home: - uses: ./.github/workflows/integ-test-restore-gradle-home.yml - with: - skip-dist: ${{ inputs.skip-dist }} - restore-java-toolchain: uses: ./.github/workflows/integ-test-restore-java-toolchain.yml with: @@ -57,9 +52,3 @@ jobs: with: runner-os: '${{ inputs.runner-os }}' skip-dist: ${{ inputs.skip-dist }} - - basic-cache-provider: - uses: ./.github/workflows/integ-test-basic-cache-provider.yml - with: - runner-os: '${{ inputs.runner-os }}' - skip-dist: ${{ inputs.skip-dist }} diff --git a/.github/workflows/suite-smoke-test-caching.yml b/.github/workflows/suite-smoke-test-caching.yml new file mode 100644 index 00000000..4579c8b4 --- /dev/null +++ b/.github/workflows/suite-smoke-test-caching.yml @@ -0,0 +1,27 @@ +name: suite-smoke-test-caching + +on: + workflow_call: + inputs: + runner-os: + type: string + default: '["ubuntu-latest"]' + skip-dist: + type: boolean + default: false + +permissions: + contents: read + +jobs: + restore-gradle-home: + uses: ./.github/workflows/smoke-test-restore-gradle-home.yml + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + basic-cache-provider: + uses: ./.github/workflows/smoke-test-basic-cache-provider.yml + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }}