## 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 inbcd07e66/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) <noreply@anthropic.com>
GitHub Actions for Gradle builds
This repository contains a set of GitHub Actions that are useful for building Gradle projects on GitHub.
Note
⚡️ Choice of caching providers in v6
To provide the fastest possible build experience this action includes Enhanced Caching via
gradle-actions-caching, an optimized provider powered by proprietary technology. This feature is free for all public repositories and is currently available as a Free Preview for private repositories.Prefer a 100% Open Source (MIT) path? We also provide a Basic Caching provider as a thin wrapper over
actions/cache. This provider is free for all repositories (public and private) and can be enabled at any time by settingcache-provider: basic.For a full breakdown of the components, usage tiers, and our Safe Harbor data privacy commitment, see our Distribution & Licensing Guide.
The setup-gradle action
The setup-gradle action can be used to configure Gradle for optimal execution on any platform supported by GitHub Actions.
This replaces the previous gradle/gradle-build-action, which now delegates to this implementation.
The recommended way to execute any Gradle build is with the help of the Gradle Wrapper, and the examples assume that the Gradle Wrapper has been configured for the project. See this example if your project doesn't use the Gradle Wrapper.
Example usage
name: Build
on:
push:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v6
- name: Setup Java
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Build with Gradle
run: ./gradlew build
See the full action documentation for more advanced usage scenarios.
The dependency-submission action
Generates and submits a dependency graph for a Gradle project, allowing GitHub to alert about reported vulnerabilities in your project dependencies.
The following workflow will generate a dependency graph for a Gradle project and submit it immediately to the repository via the Dependency Submission API. For most projects, this default configuration should be all that you need.
Simply add this as a new workflow file to your repository (eg .github/workflows/dependency-submission.yml).
name: Dependency Submission
on:
push:
branches: [ 'main' ]
permissions:
contents: write
jobs:
dependency-submission:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v6
- name: Setup Java
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 17
- name: Generate and submit dependency graph
uses: gradle/actions/dependency-submission@v6
See the full action documentation for more advanced usage scenarios.
The wrapper-validation action
The wrapper-validation action validates the checksums of all Gradle Wrapper JAR files present in the repository and fails if any unknown Gradle Wrapper JAR files are found.
The action should be run in the root of the repository, as it will recursively search for any files named gradle-wrapper.jar.
Starting with v4 the setup-gradle action will perform wrapper validation on each execution.
If you are using setup-gradle in your workflows, it is unlikely that you will need to use the wrapper-validation action.
Example workflow
name: "Validate Gradle Wrapper"
on:
push:
pull_request:
jobs:
validation:
name: "Validation"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: gradle/actions/wrapper-validation@v6
See the full action documentation for more advanced usage scenarios.