From 437bff62b649860439e964ea456de0413a70bc92 Mon Sep 17 00:00:00 2001 From: daz Date: Wed, 5 Jul 2023 16:43:29 -0600 Subject: [PATCH] Add basic test coverage for dependency graph - Test workflow with dependency graph enabled - Gradle test for init-script functionality --- .github/workflows/ci-full-check.yml | 5 ++ .github/workflows/ci-quick-check.yml | 7 ++ .../workflows/integ-test-dependency-graph.yml | 68 ++++++++++++++++++ .../TestDependencyGraph.groovy | 70 +++++++++++++++++++ 4 files changed, 150 insertions(+) create mode 100644 .github/workflows/integ-test-dependency-graph.yml create mode 100644 test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDependencyGraph.groovy diff --git a/.github/workflows/ci-full-check.yml b/.github/workflows/ci-full-check.yml index 641f512..802f8fe 100644 --- a/.github/workflows/ci-full-check.yml +++ b/.github/workflows/ci-full-check.yml @@ -29,6 +29,11 @@ jobs: with: cache-key-prefix: ${{github.run_number}}- + dependency-graph: + uses: ./.github/workflows/integ-test-dependency-graph.yml + with: + cache-key-prefix: ${{github.run_number}}- + execution-with-caching: uses: ./.github/workflows/integ-test-execution-with-caching.yml with: diff --git a/.github/workflows/ci-quick-check.yml b/.github/workflows/ci-quick-check.yml index 6d45f06..73d93b4 100644 --- a/.github/workflows/ci-quick-check.yml +++ b/.github/workflows/ci-quick-check.yml @@ -50,6 +50,13 @@ jobs: runner-os: '["ubuntu-latest"]' download-dist: true + dependency-graph: + needs: build-distribution + uses: ./.github/workflows/integ-test-dependency-graph.yml + with: + runner-os: '["ubuntu-latest"]' + download-dist: true + execution-with-caching: needs: build-distribution uses: ./.github/workflows/integ-test-execution-with-caching.yml diff --git a/.github/workflows/integ-test-dependency-graph.yml b/.github/workflows/integ-test-dependency-graph.yml new file mode 100644 index 0000000..684778b --- /dev/null +++ b/.github/workflows/integ-test-dependency-graph.yml @@ -0,0 +1,68 @@ +name: Test execution with caching + +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: dependency-graph-${{ inputs.cache-key-prefix }} + GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true + +jobs: + groovy-generate: + 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 for dependency-graph generate + uses: ./ + with: + dependency-graph: generate + - name: Run gradle build + run: ./gradlew build + working-directory: .github/workflow-samples/groovy-dsl + + kotlin-generate: + 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 for dependency-graph generate + uses: ./ + with: + dependency-graph: generate-and-submit + - name: Run gradle build + run: ./gradlew build + working-directory: .github/workflow-samples/kotlin-dsl + + submit: + needs: [groovy-generate, kotlin-generate] + runs-on: "ubuntu-latest" + steps: + - name: Checkout sources + uses: actions/checkout@v3 + - name: Download distribution if required + uses: ./.github/actions/download-dist + - name: Submit dependency graphs + uses: ./ + with: + dependency-graph: download-and-submit diff --git a/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDependencyGraph.groovy b/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDependencyGraph.groovy new file mode 100644 index 0000000..893e93a --- /dev/null +++ b/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDependencyGraph.groovy @@ -0,0 +1,70 @@ +package com.gradle.gradlebuildaction + +import static org.junit.Assume.assumeTrue + +class TestDependencyGraph extends BaseInitScriptTest { + def initScript = 'github-dependency-graph.init.gradle' + + + def "does not produce dependency graph when not enabled"() { + assumeTrue testGradleVersion.compatibleWithCurrentJvm + + when: + run(['help'], initScript, testGradleVersion.gradleVersion) + + then: + assert !reportsDir.exists() + + where: + testGradleVersion << ALL_VERSIONS + } + + def "produces dependency graph when enabled"() { + assumeTrue testGradleVersion.compatibleWithCurrentJvm + + when: + run(['help'], initScript, testGradleVersion.gradleVersion, [], envVars) + + then: + assert reportFile.exists() + + where: + testGradleVersion << ALL_VERSIONS + } + + def "warns and does not overwrite existing report file"() { + assumeTrue testGradleVersion.compatibleWithCurrentJvm + + when: + reportsDir.mkdirs() + reportFile << "DUMMY CONTENT" + def result = run(['help'], initScript, testGradleVersion.gradleVersion, [], envVars) + + then: + assert reportFile.text == "DUMMY CONTENT" + assert result.output.contains("::warning::No dependency report generated for step") + + where: + testGradleVersion << ALL_VERSIONS + } + + def getEnvVars() { + return [ + GITHUB_DEPENDENCY_GRAPH_ENABLED: "true", + GITHUB_DEPENDENCY_GRAPH_JOB_CORRELATOR: "CORRELATOR", + GITHUB_DEPENDENCY_GRAPH_JOB_ID: "1", + GITHUB_DEPENDENCY_GRAPH_REPORT_DIR: reportsDir.absolutePath, + GITHUB_REF: "main", + GITHUB_SHA: "123456", + GITHUB_WORKSPACE: testProjectDir.absolutePath + ] + } + + def getReportsDir() { + return new File(testProjectDir, 'build/reports/github-dependency-graph-snapshots') + } + + def getReportFile() { + return new File(reportsDir, "CORRELATOR.json") + } +}