From 9298ef5323df3705cfaaee08f0dea0e5b1b35ee3 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Thu, 28 Mar 2024 16:31:05 +0100 Subject: [PATCH 1/4] Add GitHub action for building and deploying SNAPSHOTs See gh-939 --- .github/actions/send-notification/action.yml | 33 ++++++++++ .../workflows/build-and-deploy-snapshot.yml | 61 +++++++++++++++++++ ci/pipeline.yml | 57 +++++------------ 3 files changed, 110 insertions(+), 41 deletions(-) create mode 100644 .github/actions/send-notification/action.yml create mode 100644 .github/workflows/build-and-deploy-snapshot.yml diff --git a/.github/actions/send-notification/action.yml b/.github/actions/send-notification/action.yml new file mode 100644 index 00000000..0a676092 --- /dev/null +++ b/.github/actions/send-notification/action.yml @@ -0,0 +1,33 @@ +name: Send notification +description: Sends a Google Chat message as a notification of the job's outcome +inputs: + webhook-url: + description: 'Google Chat Webhook URL' + required: true + 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) }} +runs: + using: composite + steps: + - 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 + if: ${{ inputs.status == 'success' }} + 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 + if: ${{ inputs.status == 'failure' }} + 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 + if: ${{ inputs.status == 'cancelled' }} + 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/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml new file mode 100644 index 00000000..dc700932 --- /dev/null +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -0,0 +1,61 @@ +name: Build and deploy snapshot +on: + push: + branches: + - 1.2.x +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} +jobs: + build: + if: ${{ github.repository == 'spring-projects/spring-graphql' }} + name: Build and deploy snapshot + runs-on: ubuntu-latest + steps: + - name: Set up Java + uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 + with: + distribution: 'liberica' + java-version: 17 + - name: Check out code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - name: Set up Gradle + uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0 + with: + cache-read-only: ${{ github.ref != 'refs/heads/main' || !endsWith(github.ref, '.x') }} + - name: Configure Gradle properties + shell: bash + run: | + mkdir -p $HOME/.gradle + 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 + - name: Build and publish + id: build + env: + CI: 'true' + GRADLE_ENTERPRISE_URL: 'https://ge.spring.io' + GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }} + GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USER }} + GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }} + run: ./gradlew -PdistributionRepository=$(pwd)/deployment-repository build publishAllPublicationsToDistributionRepository + - name: Deploy + uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 + with: + uri: 'https://repo.spring.io' + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + build-name: ${{ format('spring-graphql-{0}', github.ref_name)}} + repository: 'libs-snapshot-local' + folder: 'deployment-repository' + signing-key: ${{ secrets.GPG_PRIVATE_KEY }} + signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} + artifact-properties: | + /**/spring-graphql-docs-*.zip::zip.name=spring-graphql,zip.displayname=Spring for GraphQL,zip.type:docs,zip.deployed=false + - name: Send notification + uses: ./.github/actions/send-notification + if: always() + with: + webhook-url: ${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }} + status: ${{ job.status }} + build-scan-url: ${{ steps.build.outputs.build-scan-url }} + run-name: ${{ format('{0} | Linux | Java 17', github.ref_name) }} \ No newline at end of file diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 0235087a..f718c651 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -105,43 +105,6 @@ jobs: - put: ci-image params: image: ci-image/image.tar -- name: build - serial: true - public: true - plan: - - get: ci-image - - get: git-repo - trigger: true - - do: - - task: build-project - privileged: true - timeout: ((task-timeout)) - image: ci-image - file: git-repo/ci/tasks/build-project.yml - params: - BRANCH: ((branch)) - <<: *docker-hub-task-params - <<: *gradle-enterprise-task-params - - put: artifactory-repo - params: &artifactory-params - signing_key: ((signing-key)) - signing_passphrase: ((signing-passphrase)) - repo: libs-snapshot-local - folder: distribution-repository - build_uri: "https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}" - build_number: "${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME}" - disable_checksum_uploads: true - threads: 8 - artifact_set: - - include: - - "/**/spring-graphql-docs-*.zip" - properties: - "zip.name": "spring-graphql" - "zip.displayname": "Spring for GraphQL" - "zip.deployed": "false" - "zip.type": "docs" - get_params: - threads: 8 - name: stage-milestone serial: true plan: @@ -155,8 +118,22 @@ jobs: RELEASE_TYPE: M <<: *gradle-enterprise-task-params - put: artifactory-repo - params: - <<: *artifactory-params + params: &artifactory-params + signing_key: ((signing-key)) + signing_passphrase: ((signing-passphrase)) + folder: distribution-repository + build_uri: "https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}" + build_number: "${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME}" + disable_checksum_uploads: true + threads: 8 + artifact_set: + - include: + - "/**/spring-graphql-docs-*.zip" + properties: + "zip.name": "spring-graphql" + "zip.displayname": "Spring for GraphQL" + "zip.deployed": "false" + "zip.type": "docs" repo: libs-staging-local - put: git-repo params: @@ -307,8 +284,6 @@ jobs: groups: -- name: "builds" - jobs: ["build"] - name: "releases" jobs: [ "stage-milestone", "promote-milestone", "stage-rc", "promote-rc", "stage-release", "promote-release", "create-github-release" ] - name: "ci-images" From 181fabc5c05d981d840665128a84d208bf287ff6 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Thu, 28 Mar 2024 16:37:14 +0100 Subject: [PATCH 2/4] Fix deployment repository property name in publish action See gh-939 --- .github/workflows/build-and-deploy-snapshot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index dc700932..e841c0ba 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -37,7 +37,7 @@ jobs: GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }} GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USER }} GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }} - run: ./gradlew -PdistributionRepository=$(pwd)/deployment-repository build publishAllPublicationsToDistributionRepository + run: ./gradlew -PdeploymentRepository=$(pwd)/deployment-repository build publishAllPublicationsToDeploymentRepository - name: Deploy uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 with: From 61f6afa80b05c0a4ba6f6af8b91299409f350f3f Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Thu, 28 Mar 2024 16:46:06 +0100 Subject: [PATCH 3/4] Remove offending property from docs zip publishing See gh-939 --- .github/workflows/build-and-deploy-snapshot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index e841c0ba..d23b3671 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -50,7 +50,7 @@ jobs: signing-key: ${{ secrets.GPG_PRIVATE_KEY }} signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} artifact-properties: | - /**/spring-graphql-docs-*.zip::zip.name=spring-graphql,zip.displayname=Spring for GraphQL,zip.type:docs,zip.deployed=false + /**/spring-graphql-docs-*.zip::zip.name=spring-graphql,zip.type=docs,zip.deployed=false - name: Send notification uses: ./.github/actions/send-notification if: always() From 54d24abbb7dbca922b23b9b53e85376bf65755c2 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Thu, 28 Mar 2024 16:59:18 +0100 Subject: [PATCH 4/4] Remove remaining Concourse tasks for CI publish build Closes gh-939 --- ci/scripts/build-project.sh | 14 -------------- ci/tasks/build-project.yml | 22 ---------------------- 2 files changed, 36 deletions(-) delete mode 100755 ci/scripts/build-project.sh delete mode 100644 ci/tasks/build-project.yml diff --git a/ci/scripts/build-project.sh b/ci/scripts/build-project.sh deleted file mode 100755 index 916c820f..00000000 --- a/ci/scripts/build-project.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh -repository=$(pwd)/distribution-repository - -/bin/start-docker.sh -if [[ -n $DOCKER_HUB_USERNAME ]]; then - echo "$DOCKER_HUB_PASSWORD" | docker login -u $DOCKER_HUB_USERNAME --password-stdin -fi - -pushd git-repo > /dev/null -./gradlew -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false --no-daemon --max-workers=4 -PdeploymentRepository=${repository} build publishAllPublicationsToDeploymentRepository -popd > /dev/null diff --git a/ci/tasks/build-project.yml b/ci/tasks/build-project.yml deleted file mode 100644 index 759749ef..00000000 --- a/ci/tasks/build-project.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -platform: linux -inputs: -- name: git-repo -outputs: -- name: distribution-repository -- name: git-repo -caches: -- path: gradle -params: - BRANCH: - CI: true - GRADLE_ENTERPRISE_ACCESS_KEY: - GRADLE_ENTERPRISE_CACHE_USERNAME: - GRADLE_ENTERPRISE_CACHE_PASSWORD: - GRADLE_ENTERPRISE_URL: https://ge.spring.io -run: - path: bash - args: - - -ec - - | - ${PWD}/git-repo/ci/scripts/build-project.sh