Hard fail when action steps do not save/restore caches #157
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| tags: ["v*"] | |
| pull_request: | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Activate Hermit | |
| run: echo "${GITHUB_WORKSPACE}/bin" >> "$GITHUB_PATH" | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: 21 | |
| - name: Test | |
| run: go test -run ^Test -timeout 300s ./... | |
| - name: Build | |
| run: go build ./... | |
| lint: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Activate Hermit | |
| run: echo "${GITHUB_WORKSPACE}/bin" >> "$GITHUB_PATH" | |
| - name: Lint | |
| run: golangci-lint run | |
| # Job 1: Cache miss → build Gradle → save full bundle. | |
| save-full: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| actions: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Activate Hermit | |
| run: echo "${GITHUB_WORKSPACE}/bin" >> "$GITHUB_PATH" | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: 25 | |
| - name: Build gradle-cache from source | |
| run: | | |
| go build -o gradle-cache ./cmd/gradle-cache | |
| echo "$PWD" >> "$GITHUB_PATH" | |
| - name: Prepare test project | |
| run: | | |
| cp -r cmd/gradle-cache/testdata/gradle-project "$RUNNER_TEMP/project" | |
| chmod +x "$RUNNER_TEMP/project/gradlew" | |
| - uses: ./ | |
| with: | |
| cache-key: integration-test | |
| project-dir: ${{ runner.temp }}/project | |
| gradle-user-home: ${{ runner.temp }}/gradle-home | |
| ref: HEAD | |
| log-level: debug | |
| - name: Run Gradle build | |
| run: go test -v -run ^TestIntegrationGradleBuild$ -timeout 300s ./cmd/gradle-cache/ | |
| env: | |
| INTEGRATION_PROJECT_DIR: ${{ runner.temp }}/project | |
| GRADLE_USER_HOME: ${{ runner.temp }}/gradle-home | |
| # Post step saves a full bundle automatically. | |
| # Job 2: Restore full bundle (hit) → verify cache hits → save delta. | |
| verify-full-and-save-delta: | |
| needs: save-full | |
| runs-on: ubuntu-latest | |
| permissions: | |
| actions: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Activate Hermit | |
| run: echo "${GITHUB_WORKSPACE}/bin" >> "$GITHUB_PATH" | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: 25 | |
| - name: Build gradle-cache from source | |
| run: | | |
| go build -o gradle-cache ./cmd/gradle-cache | |
| echo "$PWD" >> "$GITHUB_PATH" | |
| - name: Prepare test project | |
| run: | | |
| cp -r cmd/gradle-cache/testdata/gradle-project "$RUNNER_TEMP/project" | |
| chmod +x "$RUNNER_TEMP/project/gradlew" | |
| # Restore the full bundle, then verify it. | |
| - uses: ./ | |
| with: | |
| cache-key: integration-test | |
| project-dir: ${{ runner.temp }}/project | |
| gradle-user-home: ${{ runner.temp }}/gradle-home | |
| branch: integration-delta-test | |
| ref: HEAD | |
| log-level: debug | |
| - name: Verify full restore | |
| run: go test -v -run ^TestIntegrationVerifyRestore$ -timeout 300s ./cmd/gradle-cache/ | |
| env: | |
| INTEGRATION_PROJECT_DIR: ${{ runner.temp }}/project | |
| GRADLE_USER_HOME: ${{ runner.temp }}/gradle-home | |
| # Modify build.gradle to invalidate the configuration cache, then | |
| # rebuild so the delta captures the regenerated config cache entry. | |
| - name: Modify build.gradle and rebuild | |
| run: | | |
| echo '// delta change' >> "$RUNNER_TEMP/project/build.gradle" | |
| cd "$RUNNER_TEMP/project" | |
| GRADLE_USER_HOME="${{ runner.temp }}/gradle-home" ./gradlew build | |
| # Post step saves a delta bundle for branch "integration-delta-test". | |
| # Job 3: Restore full bundle + delta → verify cache hits. | |
| verify-delta: | |
| needs: verify-full-and-save-delta | |
| runs-on: ubuntu-latest | |
| permissions: | |
| actions: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Activate Hermit | |
| run: echo "${GITHUB_WORKSPACE}/bin" >> "$GITHUB_PATH" | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: 25 | |
| - name: Build gradle-cache from source | |
| run: | | |
| go build -o gradle-cache ./cmd/gradle-cache | |
| echo "$PWD" >> "$GITHUB_PATH" | |
| - name: Prepare test project | |
| run: | | |
| cp -r cmd/gradle-cache/testdata/gradle-project "$RUNNER_TEMP/project" | |
| chmod +x "$RUNNER_TEMP/project/gradlew" | |
| # Restore full + delta bundle concurrently. | |
| - uses: ./ | |
| with: | |
| cache-key: integration-test | |
| project-dir: ${{ runner.temp }}/project | |
| gradle-user-home: ${{ runner.temp }}/gradle-home | |
| branch: integration-delta-test | |
| save: "false" | |
| ref: HEAD | |
| log-level: debug | |
| - name: Verify delta restore | |
| run: go test -v -run ^TestIntegrationVerifyRestore$ -timeout 300s ./cmd/gradle-cache/ | |
| env: | |
| INTEGRATION_PROJECT_DIR: ${{ runner.temp }}/project | |
| GRADLE_USER_HOME: ${{ runner.temp }}/gradle-home | |
| release: | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| needs: [test, lint, verify-delta] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Activate Hermit | |
| run: echo "${GITHUB_WORKSPACE}/bin" >> "$GITHUB_PATH" | |
| - name: Release | |
| run: goreleaser release --clean | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |