From 25ec1787471678f772f8e77e08e97797db0c16cd Mon Sep 17 00:00:00 2001 From: Daz DeBoer Date: Tue, 14 Jun 2022 11:04:48 -0600 Subject: [PATCH] Add integration test for cache cleanup --- .github/workflows/ci-full-check.yml | 6 ++ .github/workflows/ci-quick-check.yml | 8 ++ .../workflows/integ-test-cache-cleanup.yml | 86 +++++++++++++++++++ src/caches.ts | 8 +- 4 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/integ-test-cache-cleanup.yml diff --git a/.github/workflows/ci-full-check.yml b/.github/workflows/ci-full-check.yml index 0f1eb0e..01a2400 100644 --- a/.github/workflows/ci-full-check.yml +++ b/.github/workflows/ci-full-check.yml @@ -18,6 +18,12 @@ jobs: with: cache-key-prefix: ${{github.run_number}}- + cache-cleanup: + needs: build-distribution + uses: ./.github/workflows/integ-test-cache-cleanup.yml + with: + cache-key-prefix: ${{github.run_number}}- + caching-config: uses: ./.github/workflows/integ-test-action-inputs-caching.yml with: diff --git a/.github/workflows/ci-quick-check.yml b/.github/workflows/ci-quick-check.yml index ab52632..05237cc 100644 --- a/.github/workflows/ci-quick-check.yml +++ b/.github/workflows/ci-quick-check.yml @@ -20,6 +20,14 @@ jobs: runner-os: '["ubuntu-latest"]' download-dist: true + cache-cleanup: + needs: build-distribution + uses: ./.github/workflows/integ-test-cache-cleanup.yml + with: + runner-os: '["ubuntu-latest"]' + download-dist: true + cache-key-prefix: ${{github.run_number}}- # Requires a fresh cache entry each run + caching-config: needs: build-distribution uses: ./.github/workflows/integ-test-action-inputs-caching.yml diff --git a/.github/workflows/integ-test-cache-cleanup.yml b/.github/workflows/integ-test-cache-cleanup.yml new file mode 100644 index 0000000..fbfa198 --- /dev/null +++ b/.github/workflows/integ-test-cache-cleanup.yml @@ -0,0 +1,86 @@ +name: Test cache cleanup + +on: + workflow_call: + inputs: + cache-key-prefix: + type: string + runner-os: + type: string + default: '["ubuntu-latest", "windows-latest", "macos-latest"]' + download-dist: + type: boolean + default: false + +env: + DOWNLOAD_DIST: ${{ inputs.download-dist }} + GRADLE_BUILD_ACTION_CACHE_KEY_PREFIX: integ-test-cache-cleanup-${{ inputs.cache-key-prefix }} + GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true + +jobs: + full-build: + strategy: + matrix: + os: ${{fromJSON(inputs.runner-os)}} + runs-on: ${{ matrix.os }} + steps: + - name: Checkout sources + uses: actions/checkout@v3 + - name: Download distribution if required + uses: ./.github/actions/download-dist + - name: Setup Gradle + uses: ./ + with: + cache-read-only: false # For testing, allow writing cache entries on non-default branches + - name: Build with 3.1 + working-directory: test/jest/resources/cache-cleanup + run: gradle --no-daemon --build-cache -Dcommons-math3.version=3.1 build + + # Second build will use the cache from the first build, but cleanup should remove unused artifacts + assemble-build: + needs: full-build + strategy: + matrix: + os: ${{fromJSON(inputs.runner-os)}} + runs-on: ${{ matrix.os }} + steps: + - name: Checkout sources + uses: actions/checkout@v3 + - name: Download distribution if required + uses: ./.github/actions/download-dist + - name: Setup Gradle + uses: ./ + with: + cache-read-only: false + gradle-home-cache-cleanup: true + - name: Build with 3.1.1 + working-directory: test/jest/resources/cache-cleanup + run: gradle --no-daemon --build-cache -Dcommons-math3.version=3.1.1 build + + check-clean-cache: + needs: assemble-build + strategy: + matrix: + os: ${{fromJSON(inputs.runner-os)}} + runs-on: ${{ matrix.os }} + steps: + - name: Checkout sources + uses: actions/checkout@v3 + - name: Download distribution if required + uses: ./.github/actions/download-dist + - name: Setup Gradle + uses: ./ + with: + cache-read-only: true + - name: Report Gradle User Home + run: du -hc ~/.gradle/caches/modules-2 + - name: Verify cleaned cache + run: | + if [ ! -e ~/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-math3/3.1.1 ]; then + echo "::error ::Should find commons-math3 3.1.1 in cache" + exit 1 + fi + if [ -e ~/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-math3/3.1 ]; then + echo "::error ::Should NOT find commons-math3 3.1 in cache" + exit 1 + fi diff --git a/src/caches.ts b/src/caches.ts index 05c6101..bdebf8d 100644 --- a/src/caches.ts +++ b/src/caches.ts @@ -47,7 +47,9 @@ export async function restore(gradleUserHome: string, cacheListener: CacheListen }) if (isCacheCleanupEnabled() && !isCacheReadOnly()) { - new CacheCleaner(gradleUserHome, process.env['RUNNER_TEMP']!).prepare() + core.info('Preparing cache for cleanup.') + const cacheCleaner = new CacheCleaner(gradleUserHome, process.env['RUNNER_TEMP']!) + await cacheCleaner.prepare() } } @@ -75,7 +77,9 @@ export async function save( await daemonController.stopAllDaemons() if (isCacheCleanupEnabled()) { - new CacheCleaner(gradleUserHome, process.env['RUNNER_TEMP']!).forceCleanup() + core.info('Forcing cache cleanup.') + const cacheCleaner = new CacheCleaner(gradleUserHome, process.env['RUNNER_TEMP']!) + await cacheCleaner.forceCleanup() } await core.group('Caching Gradle state', async () => {