diff --git a/.github/workflows/ci-integ-test-full.yml b/.github/workflows/ci-integ-test-full.yml new file mode 100644 index 00000000..e32be1a5 --- /dev/null +++ b/.github/workflows/ci-integ-test-full.yml @@ -0,0 +1,29 @@ +name: CI-integ-test-full + +on: + workflow_dispatch: + push: + paths: + - 'dist/**' + +permissions: + contents: write + +concurrency: + group: integ-test-${{ github.ref }} + cancel-in-progress: false + +jobs: + caching-integ-tests: + uses: ./.github/workflows/suite-integ-test-caching.yml + with: + runner-os: '["ubuntu-latest", "windows-latest", "macos-latest"]' + skip-dist: true + secrets: inherit + + other-integ-tests: + uses: ./.github/workflows/suite-integ-test-other.yml + with: + runner-os: '["ubuntu-latest", "windows-latest", "macos-latest"]' + skip-dist: true + secrets: inherit diff --git a/.github/workflows/ci-integ-test.yml b/.github/workflows/ci-integ-test.yml index 7a1b010c..1fdf6174 100644 --- a/.github/workflows/ci-integ-test.yml +++ b/.github/workflows/ci-integ-test.yml @@ -8,42 +8,18 @@ on: - 'main' - 'release/**' - 'dev/**' # Allow running tests on dev branches without a PR + paths-ignore: + - 'dist/**' + +permissions: + contents: write concurrency: - group: integ-tests-${{ github.ref }} + group: integ-test-${{ github.ref }} cancel-in-progress: false jobs: - determine-suite: - runs-on: ubuntu-latest - outputs: - runner-os: ${{ steps.determine-suite.outputs.suite == 'quick' && '["ubuntu-latest"]' || '["ubuntu-latest", "windows-latest", "macos-latest"]' }} - suite: ${{ steps.determine-suite.outputs.suite }} - steps: - - name: Determine suite to run - id: determine-suite - run: | - # Always run quick suite if we are not in the core `gradle/actions` repository - # This reduces the load for developers working on 'main' on forks - if [ "${{ github.repository }}" != "gradle/actions" ]; then - echo "Not in core repository: suite=quick" - echo "suite=quick" >> "$GITHUB_OUTPUT" - exit 0 - fi - - # Run full suite for push trigger with "[bot] Update dist directory" commit message - if [ "${{ github.event.head_commit.message }}" == "[bot] Update dist directory" ]; then - echo "Bot commit to main branch: suite=full" - echo "suite=full" >> "$GITHUB_OUTPUT" - exit 0 - fi - - # Run quick suite for everything else - echo "Everything else: suite=quick" - echo "suite=quick" >> "$GITHUB_OUTPUT" - build-distribution: - needs: [determine-suite] runs-on: ubuntu-latest steps: - name: Checkout sources @@ -52,125 +28,16 @@ jobs: if: ${{ needs.determine-suite.outputs.suite != 'full' }} uses: ./.github/actions/build-dist - build-scan-publish: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-build-scan-publish.yml - with: - runner-os: '${{ needs.determine-suite.outputs.runner-os }}' - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - cache-cleanup: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-cache-cleanup.yml - with: - runner-os: '${{ needs.determine-suite.outputs.runner-os }}' - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - caching-config: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-caching-config.yml - with: - runner-os: '${{ needs.determine-suite.outputs.runner-os }}' - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - dependency-graph: - if: ${{ ! github.event.pull_request.head.repo.fork }} - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-dependency-graph.yml - permissions: - contents: write - with: - runner-os: '${{ needs.determine-suite.outputs.runner-os }}' - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - dependency-submission: - if: ${{ ! github.event.pull_request.head.repo.fork }} - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-dependency-submission.yml - permissions: - contents: write - with: - runner-os: '${{ needs.determine-suite.outputs.runner-os }}' - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - dependency-submission-failures: - if: ${{ ! github.event.pull_request.head.repo.fork }} - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-dependency-submission-failures.yml - permissions: - contents: write - with: - runner-os: '${{ needs.determine-suite.outputs.runner-os }}' - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - develocity-injection: - if: ${{ ! github.event.pull_request.head.repo.fork }} - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-inject-develocity.yml - with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - secrets: - DEVELOCITY_ACCESS_KEY: ${{ secrets.DV_SOLUTIONS_ACCESS_KEY }} - - provision-gradle-versions: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-provision-gradle-versions.yml - with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - restore-configuration-cache: - if: ${{ ! github.event.pull_request.head.repo.fork }} - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-restore-configuration-cache.yml - with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - secrets: - GRADLE_ENCRYPTION_KEY: ${{ secrets.GRADLE_ENCRYPTION_KEY }} - - restore-containerized-gradle-home: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-restore-containerized-gradle-home.yml - with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - restore-custom-gradle-home: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-restore-custom-gradle-home.yml - with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - restore-gradle-home: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-restore-gradle-home.yml - with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - restore-java-toolchain: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-restore-java-toolchain.yml - with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - sample-kotlin-dsl: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-sample-kotlin-dsl.yml - with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - sample-gradle-plugin: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-sample-gradle-plugin.yml - with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} - - toolchain-detection: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-detect-toolchains.yml + caching-integ-tests: + needs: build-distribution + uses: ./.github/workflows/suite-integ-test-caching.yml with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} + skip-dist: false + secrets: inherit - wrapper-validation: - needs: [determine-suite, build-distribution] - uses: ./.github/workflows/integ-test-wrapper-validation.yml + other-integ-tests: + needs: build-distribution + uses: ./.github/workflows/suite-integ-test-other.yml with: - skip-dist: ${{ needs.determine-suite.outputs.suite == 'full' }} + skip-dist: false + secrets: inherit diff --git a/.github/workflows/integ-test-wrapper-validation.yml b/.github/workflows/integ-test-wrapper-validation.yml index 6443e78f..c80fab51 100644 --- a/.github/workflows/integ-test-wrapper-validation.yml +++ b/.github/workflows/integ-test-wrapper-validation.yml @@ -34,6 +34,7 @@ jobs: continue-on-error: true - name: Check failure + shell: bash run: | if [ "${{ steps.setup-gradle.outcome}}" != "failure" ] ; then echo "Expected validation to fail, but it didn't" @@ -62,6 +63,7 @@ jobs: # below to not accidentally inject code into shell script or break its syntax FAILED_WRAPPERS: ${{ steps.action-test.outputs.failed-wrapper }} FAILED_WRAPPERS_MATCHES: ${{ steps.action-test.outputs.failed-wrapper == '' }} + shell: bash run: | if [ "$FAILED_WRAPPERS_MATCHES" != "true" ] ; then echo "'outputs.failed-wrapper' has unexpected content: $FAILED_WRAPPERS" @@ -89,6 +91,7 @@ jobs: VALIDATION_FAILED: ${{ steps.action-test.outcome == 'failure' }} FAILED_WRAPPERS: ${{ steps.action-test.outputs.failed-wrapper }} FAILED_WRAPPERS_MATCHES: ${{ steps.action-test.outputs.failed-wrapper == 'sources/test/jest/wrapper-validation/data/invalid/gradle-wrapper.jar|sources/test/jest/wrapper-validation/data/invalid/gradlе-wrapper.jar' }} + shell: bash run: | if [ "$VALIDATION_FAILED" != "true" ] ; then echo "Expected validation to fail, but it didn't" @@ -123,6 +126,7 @@ jobs: # Evaluate workflow expressions here as env variable values instead of inside shell script # below to not accidentally inject code into shell script or break its syntax VALIDATION_FAILED: ${{ steps.action-test.outcome == 'failure' }} + shell: bash run: | if [ "$VALIDATION_FAILED" != "true" ] ; then echo "Expected validation to fail, but it didn't" @@ -153,6 +157,7 @@ jobs: # Evaluate workflow expressions here as env variable values instead of inside shell script # below to not accidentally inject code into shell script or break its syntax VALIDATION_FAILED: ${{ steps.action-test.outcome == 'failure' }} + shell: bash run: | if [ "$VALIDATION_FAILED" != "true" ] ; then echo "Expected validation to fail, but it didn't" diff --git a/.github/workflows/suite-integ-test-caching.yml b/.github/workflows/suite-integ-test-caching.yml new file mode 100644 index 00000000..845614d4 --- /dev/null +++ b/.github/workflows/suite-integ-test-caching.yml @@ -0,0 +1,52 @@ +name: CI-integ-test + +on: + workflow_call: + inputs: + runner-os: + type: string + default: '["ubuntu-latest"]' + skip-dist: + type: boolean + default: false + +jobs: + cache-cleanup: + uses: ./.github/workflows/integ-test-cache-cleanup.yml + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + caching-config: + uses: ./.github/workflows/integ-test-caching-config.yml + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + restore-configuration-cache: + if: ${{ ! github.event.pull_request.head.repo.fork }} + uses: ./.github/workflows/integ-test-restore-configuration-cache.yml + with: + skip-dist: ${{ inputs.skip-dist }} + secrets: + GRADLE_ENCRYPTION_KEY: ${{ secrets.GRADLE_ENCRYPTION_KEY }} + + restore-containerized-gradle-home: + uses: ./.github/workflows/integ-test-restore-containerized-gradle-home.yml + with: + skip-dist: ${{ inputs.skip-dist }} + + restore-custom-gradle-home: + uses: ./.github/workflows/integ-test-restore-custom-gradle-home.yml + 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: + skip-dist: ${{ inputs.skip-dist }} diff --git a/.github/workflows/suite-integ-test-other.yml b/.github/workflows/suite-integ-test-other.yml new file mode 100644 index 00000000..90a8cc58 --- /dev/null +++ b/.github/workflows/suite-integ-test-other.yml @@ -0,0 +1,82 @@ +name: CI-integ-test + +on: + workflow_call: + inputs: + runner-os: + type: string + default: '["ubuntu-latest"]' + skip-dist: + type: boolean + default: false + +jobs: + build-scan-publish: + uses: ./.github/workflows/integ-test-build-scan-publish.yml + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + dependency-graph: + if: ${{ ! github.event.pull_request.head.repo.fork }} + uses: ./.github/workflows/integ-test-dependency-graph.yml + permissions: + contents: write + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + dependency-submission: + if: ${{ ! github.event.pull_request.head.repo.fork }} + uses: ./.github/workflows/integ-test-dependency-submission.yml + permissions: + contents: write + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + dependency-submission-failures: + if: ${{ ! github.event.pull_request.head.repo.fork }} + uses: ./.github/workflows/integ-test-dependency-submission-failures.yml + permissions: + contents: write + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + develocity-injection: + if: ${{ ! github.event.pull_request.head.repo.fork }} + uses: ./.github/workflows/integ-test-inject-develocity.yml + with: + skip-dist: ${{ inputs.skip-dist }} + secrets: + DEVELOCITY_ACCESS_KEY: ${{ secrets.DV_SOLUTIONS_ACCESS_KEY }} + + provision-gradle-versions: + uses: ./.github/workflows/integ-test-provision-gradle-versions.yml + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + sample-kotlin-dsl: + uses: ./.github/workflows/integ-test-sample-kotlin-dsl.yml + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + sample-gradle-plugin: + uses: ./.github/workflows/integ-test-sample-gradle-plugin.yml + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }} + + toolchain-detection: + uses: ./.github/workflows/integ-test-detect-toolchains.yml + with: + skip-dist: ${{ inputs.skip-dist }} + + wrapper-validation: + uses: ./.github/workflows/integ-test-wrapper-validation.yml + with: + runner-os: '${{ inputs.runner-os }}' + skip-dist: ${{ inputs.skip-dist }}