name: Test Gradle support status reporting on: workflow_call: inputs: cache-key-prefix: type: string default: '0' skip-dist: type: boolean default: false env: SKIP_DIST: ${{ inputs.skip-dist }} GRADLE_BUILD_ACTION_CACHE_KEY_PREFIX: gradle-support-status-${{ inputs.cache-key-prefix }} permissions: contents: read jobs: report-outdated-versions: runs-on: ubuntu-latest outputs: prev-oldest: ${{ steps.versions.outputs.prev-oldest }} prev-newest: ${{ steps.versions.outputs.prev-newest }} steps: - name: Checkout sources uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Initialize integ-test uses: ./.github/actions/init-integ-test # Derived from the bundled release data so the expectations cannot drift from the action's own view. - name: Determine versions for each support status id: versions run: | set -euo pipefail eval "$(jq -r ' [ .[].version | select(test("^[0-9]+\\.[0-9]+(\\.[0-9]+)?$")) | {v: ., k: (((split(".") | map(tonumber)) + [0, 0, 0]) | .[0:3])} ] | sort_by(.k) as $finals | ($finals | last) as $latest | [$finals[] | select(.k[0] == $latest.k[0] - 1)] as $prev | "KNOWN_LATEST=\($latest.v)", "PREV_OLDEST=\($prev | first | .v)", "PREV_NEWEST=\($prev | last | .v)" ' sources/src/wrapper-validation/wrapper-checksums.json)" echo "Known latest : ${KNOWN_LATEST}" echo "Previous major, oldest : ${PREV_OLDEST}" echo "Previous major, newest : ${PREV_NEWEST}" { echo "prev-oldest=${PREV_OLDEST}" echo "prev-newest=${PREV_NEWEST}" } >> "$GITHUB_OUTPUT" - name: Setup Gradle with an end-of-life version uses: ./setup-gradle with: cache-read-only: false gradle-version: '7.6.4' - name: Build with the end-of-life version working-directory: .github/workflow-samples/no-wrapper run: gradle help "-DgradleVersionCheck=7.6.4" - name: Setup Gradle with the oldest release of the previous major uses: ./setup-gradle with: gradle-version: ${{ steps.versions.outputs.prev-oldest }} - name: Build with the oldest release of the previous major working-directory: .github/workflow-samples/no-wrapper run: gradle help "-DgradleVersionCheck=${{ steps.versions.outputs.prev-oldest }}" - name: Setup Gradle with the newest release of the previous major uses: ./setup-gradle with: gradle-version: ${{ steps.versions.outputs.prev-newest }} - name: Build with the newest release of the previous major working-directory: .github/workflow-samples/no-wrapper run: gradle help "-DgradleVersionCheck=${{ steps.versions.outputs.prev-newest }}" verify-report: needs: report-outdated-versions runs-on: ubuntu-latest permissions: contents: read actions: read steps: - name: Check the support-status report was emitted env: GH_TOKEN: ${{ github.token }} PREV_OLDEST: ${{ needs.report-outdated-versions.outputs.prev-oldest }} PREV_NEWEST: ${{ needs.report-outdated-versions.outputs.prev-newest }} run: | set -euo pipefail job_id=$(gh api \ "/repos/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}/attempts/${GITHUB_RUN_ATTEMPT}/jobs" \ --paginate --jq '.jobs[] | select(.name | endswith("report-outdated-versions")) | .id') if [ -z "$job_id" ]; then echo "Could not find the 'report-outdated-versions' Job in this workflow run" exit 1 fi gh api --allow-escape-sequences "/repos/${GITHUB_REPOSITORY}/actions/jobs/${job_id}/logs" > job.log assert_logged() { if ! grep -qF -- "$1" job.log; then echo "Expected the Job log to contain: $1" echo "--- support-status output found instead ---" grep -E '##\[(warning|notice)\]|:warning:|consider upgrading' job.log || echo "(none)" exit 1 fi } refute_logged() { if grep -qF -- "$1" job.log; then echo "Did not expect the Job log to contain: $1" exit 1 fi } # The runner renders '::warning::'/'::notice::' into the log as '##[warning]'/'##[notice]'. assert_logged "##[warning]Gradle 7.6.4 is end-of-life" assert_logged "##[notice]Gradle ${PREV_OLDEST} is out of date: consider updating to the latest Gradle version." assert_logged "##[notice]Gradle ${PREV_NEWEST} is out of date: consider updating to the latest Gradle version." # Out-of-date versions get a notice, never a warning. refute_logged "##[warning]Gradle ${PREV_OLDEST}" refute_logged "##[warning]Gradle ${PREV_NEWEST}" # The job summary is echoed to the log, so the rendered report can be checked directly. assert_logged ":warning: Gradle 7.6.4 is end-of-life" assert_logged "Update to the latest Gradle version." assert_logged "Gradle Security Subscription" # Table signs: a warning for end-of-life, the info sign for everything still supported. assert_logged "7.6.4 :warning:" assert_logged "${PREV_OLDEST} :information_source:" assert_logged "${PREV_NEWEST} :information_source:" # One legend for the whole job, no matter how many versions carry the info sign. legends=$(grep -cF -- "consider upgrading" job.log || true) if [ "$legends" != "1" ]; then echo "Expected exactly one upgrade legend, found ${legends}" exit 1 fi assert_logged "

:information_source: Gradle version is out of date — consider upgrading. See Gradle release lifecycle

"