From f3ef586cc78965789e8348a8aa5ed01cda52c8b6 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Thu, 5 Dec 2024 14:53:12 +0100 Subject: [PATCH] Update GitHub actions --- .../actions/await-http-resource/action.yml | 20 +++++++++ .../actions/prepare-gradle-build/action.yml | 45 +++++++++++++------ .github/actions/send-notification/action.yml | 32 +++++++------ .../actions/sync-to-maven-central/action.yml | 21 +++------ .github/workflows/delete-staged-release.yml | 2 +- 5 files changed, 79 insertions(+), 41 deletions(-) create mode 100644 .github/actions/await-http-resource/action.yml diff --git a/.github/actions/await-http-resource/action.yml b/.github/actions/await-http-resource/action.yml new file mode 100644 index 00000000..ba177fb7 --- /dev/null +++ b/.github/actions/await-http-resource/action.yml @@ -0,0 +1,20 @@ +name: Await HTTP Resource +description: 'Waits for an HTTP resource to be available (a HEAD request succeeds)' +inputs: + url: + description: 'URL of the resource to await' + required: true +runs: + using: composite + steps: + - name: Await HTTP resource + shell: bash + run: | + url=${{ inputs.url }} + echo "Waiting for $url" + until curl --fail --head --silent ${{ inputs.url }} > /dev/null + do + echo "." + sleep 60 + done + echo "$url is available" diff --git a/.github/actions/prepare-gradle-build/action.yml b/.github/actions/prepare-gradle-build/action.yml index e0fa32b2..42881cbb 100644 --- a/.github/actions/prepare-gradle-build/action.yml +++ b/.github/actions/prepare-gradle-build/action.yml @@ -1,36 +1,56 @@ -name: 'Prepare Gradle Build' +name: Prepare Gradle Build description: 'Prepares a Gradle build. Sets up Java and Gradle and configures Gradle properties' inputs: - java-version: + cache-read-only: + description: 'Whether Gradle''s cache should be read only' + required: false + default: 'true' + develocity-access-key: + description: 'Access key for authentication with ge.spring.io' required: false - default: '17' - description: 'The Java version to use for the build' java-distribution: + description: 'Java distribution to use' required: false default: 'liberica' - description: 'The Java distribution to use for the build' - java-toolchain: + java-early-access: + description: 'Whether the Java version is in early access. When true, forces java-distribution to temurin' required: false default: 'false' + java-toolchain: description: 'Whether a Java toolchain should be used' - develocity-access-key: required: false - description: 'The access key for authentication with ge.spring.io' + default: 'false' + java-version: + description: 'Java version to use for the build' + required: false + default: '17' runs: using: composite steps: + - name: Free Disk Space + if: ${{ runner.os == 'Linux' }} + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + with: + tool-cache: true + docker-images: false - name: Set Up Java uses: actions/setup-java@v4 with: - distribution: ${{ inputs.java-distribution }} + distribution: ${{ inputs.java-early-access == 'true' && 'temurin' || (inputs.java-distribution || 'liberica') }} java-version: | - ${{ inputs.java-version }} + ${{ inputs.java-early-access == 'true' && format('{0}-ea', inputs.java-version) || inputs.java-version }} ${{ inputs.java-toolchain == 'true' && '17' || '' }} - - name: Set Up Gradle - uses: gradle/actions/setup-gradle@dbbdc275be76ac10734476cc723d82dfe7ec6eda # v3.4.2 + - name: Set Up Gradle With Read/Write Cache + if: ${{ inputs.cache-read-only == 'false' }} + uses: gradle/actions/setup-gradle@cc4fc85e6b35bafd578d5ffbc76a5518407e1af0 # v4.2.1 with: cache-read-only: false develocity-access-key: ${{ inputs.develocity-access-key }} + - name: Set Up Gradle + uses: gradle/actions/setup-gradle@cc4fc85e6b35bafd578d5ffbc76a5518407e1af0 # v4.2.1 + with: + develocity-access-key: ${{ inputs.develocity-access-key }} + develocity-token-expiry: 4 - name: Configure Gradle Properties shell: bash run: | @@ -38,7 +58,6 @@ runs: echo 'systemProp.user.name=spring-builds+github' >> $HOME/.gradle/gradle.properties echo 'systemProp.org.gradle.internal.launcher.welcomeMessageEnabled=false' >> $HOME/.gradle/gradle.properties echo 'org.gradle.daemon=false' >> $HOME/.gradle/gradle.properties - echo 'org.gradle.daemon=4' >> $HOME/.gradle/gradle.properties - name: Configure Toolchain Properties if: ${{ inputs.java-toolchain == 'true' }} shell: bash diff --git a/.github/actions/send-notification/action.yml b/.github/actions/send-notification/action.yml index 333ba217..8e38b18c 100644 --- a/.github/actions/send-notification/action.yml +++ b/.github/actions/send-notification/action.yml @@ -1,33 +1,39 @@ name: Send Notification -description: Sends a Google Chat message as a notification of the job's outcome +description: 'Sends a Google Chat message as a notification of the job''s outcome' inputs: - webhook-url: - description: 'Google Chat Webhook URL' - required: true + build-scan-url: + description: 'URL of the build scan to include in the notification' + required: false + run-name: + description: 'Name of the run to include in the notification' + required: false + default: ${{ format('{0} {1}', github.ref_name, github.job) }} status: description: 'Status of the job' required: true - build-scan-url: - description: 'URL of the build scan to include in the notification' - run-name: - description: 'Name of the run to include in the notification' - default: ${{ format('{0} {1}', github.ref_name, github.job) }} + webhook-url: + description: 'Google Chat Webhook URL' + required: true runs: using: composite steps: - - shell: bash + - name: Prepare Variables + shell: bash run: | echo "BUILD_SCAN=${{ inputs.build-scan-url == '' && ' [build scan unavailable]' || format(' [<{0}|Build Scan>]', inputs.build-scan-url) }}" >> "$GITHUB_ENV" echo "RUN_URL=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> "$GITHUB_ENV" - - shell: bash + - name: Success Notification if: ${{ inputs.status == 'success' }} + shell: bash run: | curl -X POST '${{ inputs.webhook-url }}' -H 'Content-Type: application/json' -d '{ text: "<${{ env.RUN_URL }}|${{ inputs.run-name }}> was successful ${{ env.BUILD_SCAN }}"}' || true - - shell: bash + - name: Failure Notification if: ${{ inputs.status == 'failure' }} + shell: bash run: | curl -X POST '${{ inputs.webhook-url }}' -H 'Content-Type: application/json' -d '{ text: " *<${{ env.RUN_URL }}|${{ inputs.run-name }}> failed* ${{ env.BUILD_SCAN }}"}' || true - - shell: bash + - name: Cancel Notification if: ${{ inputs.status == 'cancelled' }} + shell: bash run: | curl -X POST '${{ inputs.webhook-url }}' -H 'Content-Type: application/json' -d '{ text: "<${{ env.RUN_URL }}|${{ inputs.run-name }}> was cancelled"}' || true \ No newline at end of file diff --git a/.github/actions/sync-to-maven-central/action.yml b/.github/actions/sync-to-maven-central/action.yml index 60cf4a48..6799df16 100644 --- a/.github/actions/sync-to-maven-central/action.yml +++ b/.github/actions/sync-to-maven-central/action.yml @@ -4,9 +4,6 @@ inputs: jfrog-cli-config-token: description: 'Config token for the JFrog CLI' required: true - spring-graphql-version: - description: 'The version of Spring GraphQL that is being synced to Central' - required: true ossrh-s01-token-username: description: 'Username for authentication with s01.oss.sonatype.org' required: true @@ -16,11 +13,14 @@ inputs: ossrh-s01-staging-profile: description: 'Staging profile to use when syncing to Central' required: true + spring-graphql-version: + description: 'The version of Spring GraphQL that is being synced to Central' + required: true runs: using: composite steps: - name: Set Up JFrog CLI - uses: jfrog/setup-jfrog-cli@7c95feb32008765e1b4e626b078dfd897c4340ad # v4.1.2 + uses: jfrog/setup-jfrog-cli@18e785fb220d332edbf01964f853ff0fcaa22220 # v4.4.2 env: JF_ENV_SPRING: ${{ inputs.jfrog-cli-config-token }} - name: Download Release Artifacts @@ -38,13 +38,6 @@ runs: release: true generate-checksums: true - name: Await - shell: bash - run: | - url=${{ format('https://repo.maven.apache.org/maven2/org/springframework/graphql/spring-graphql/{0}/spring-graphql-{0}.jar', inputs.spring-graphql-version) }} - echo "Waiting for $url" - until curl --fail --head --silent $url > /dev/null - do - echo "." - sleep 60 - done - echo "$url is available" \ No newline at end of file + uses: ./.github/actions/await-http-resource + with: + url: ${{ format('https://repo.maven.apache.org/maven2/org/springframework/graphql/spring-graphql/{0}/spring-graphql-{0}.jar', inputs.spring-graphql-version) }} \ No newline at end of file diff --git a/.github/workflows/delete-staged-release.yml b/.github/workflows/delete-staged-release.yml index 54175644..93211f66 100644 --- a/.github/workflows/delete-staged-release.yml +++ b/.github/workflows/delete-staged-release.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up JFrog CLI - uses: jfrog/setup-jfrog-cli@9fe0f98bd45b19e6e931d457f4e98f8f84461fb5 # v4.4.1 + uses: jfrog/setup-jfrog-cli@18e785fb220d332edbf01964f853ff0fcaa22220 # v4.4.2 env: JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} - name: Delete Build