diff --git a/ci/config/release-scripts.yml b/ci/config/release-scripts.yml new file mode 100644 index 0000000000..05eab07224 --- /dev/null +++ b/ci/config/release-scripts.yml @@ -0,0 +1,3 @@ +distribute: + optional-deployments: + - '.*\\.zip' diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 1827f10150..1c11984666 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -1,4 +1,21 @@ anchors: + artifactory-task-params: &artifactory-task-params + ARTIFACTORY_SERVER: ((artifactory-server)) + ARTIFACTORY_USERNAME: ((artifactory-username)) + ARTIFACTORY_PASSWORD: ((artifactory-password)) + bintray-task-params: &bintray-task-params + BINTRAY_SUBJECT: ((bintray-subject)) + BINTRAY_REPO: ((bintray-repo)) + BINTRAY_USERNAME: ((bintray-username)) + BINTRAY_API_KEY: ((bintray-api-key)) + docker-resource-source: &docker-resource-source + username: ((docker-hub-username)) + password: ((docker-hub-password)) + tag: 5.3.x + gradle-enterprise-task-params: &gradle-enterprise-task-params + GRADLE_ENTERPRISE_ACCESS_KEY: ((gradle_enterprise_secret_access_key)) + GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle_enterprise_cache_user.username)) + GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle_enterprise_cache_user.password)) slack-fail-params: &slack-fail-params text: > :concourse-failed: @@ -7,19 +24,10 @@ anchors: silent: true icon_emoji: ":concourse:" username: concourse-ci - gradle-enterprise-task-params: &gradle-enterprise-task-params - GRADLE_ENTERPRISE_ACCESS_KEY: ((gradle_enterprise_secret_access_key)) - GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle_enterprise_cache_user.username)) - GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle_enterprise_cache_user.password)) - artifactory-task-params: &artifactory-task-params - ARTIFACTORY_SERVER: ((artifactory-server)) - ARTIFACTORY_USERNAME: ((artifactory-username)) - ARTIFACTORY_PASSWORD: ((artifactory-password)) - docker-resource-source: &docker-resource-source - username: ((docker-hub-username)) - password: ((docker-hub-password)) - tag: 5.3.x - + sontatype-task-params: &sonatype-task-params + SONATYPE_USER_TOKEN: ((sonatype-user-token)) + SONATYPE_PASSWORD_TOKEN: ((sonatype-user-token-password)) + resource_types: - name: artifactory-resource type: docker-image @@ -364,10 +372,65 @@ jobs: params: RELEASE_TYPE: RC <<: *artifactory-task-params +- name: stage-release + serial: true + plan: + - get: spring-framework-ci-image + - get: git-repo + trigger: false + - task: stage + image: spring-framework-ci-image + file: git-repo/ci/tasks/stage-version.yml + params: + RELEASE_TYPE: RELEASE + <<: *gradle-enterprise-task-params + - put: artifactory-repo + params: + <<: *artifactory-params + repo: libs-staging-local + - put: git-repo + params: + repository: stage-git-repo +- name: promote-release + serial: true + plan: + - get: spring-framework-ci-image + - get: git-repo + trigger: false + - get: artifactory-repo + trigger: false + passed: [stage-release] + params: + download_artifacts: false + save_build_info: true + - task: promote + image: spring-framework-ci-image + file: git-repo/ci/tasks/promote-version.yml + params: + RELEASE_TYPE: RELEASE + <<: *artifactory-task-params + <<: *bintray-task-params +- name: sync-to-maven-central + serial: true + plan: + - get: spring-framework-ci-image + - get: git-repo + - get: artifactory-repo + trigger: true + passed: [promote-release] + params: + download_artifacts: false + save_build_info: true + - task: sync-to-maven-central + image: spring-framework-ci-image + file: git-repo/ci/tasks/sync-to-maven-central.yml + params: + <<: *bintray-task-params + <<: *sonatype-task-params groups: -- name: "Build" +- name: "builds" jobs: ["build", "jdk11-build", "jdk14-build", "jdk15-build"] -- name: "Release" - jobs: ["stage-milestone","stage-rc", "promote-milestone","promote-rc"] -- name: "CI Images" +- name: "releases" + jobs: ["stage-milestone", "stage-rc", "stage-release", "promote-milestone","promote-rc", "promote-release", "sync-to-maven-central"] +- name: "ci-images" jobs: ["build-spring-framework-ci-images"] diff --git a/ci/scripts/promote-version.sh b/ci/scripts/promote-version.sh index c27ecb0bc6..020db4f300 100755 --- a/ci/scripts/promote-version.sh +++ b/ci/scripts/promote-version.sh @@ -1,13 +1,16 @@ #!/bin/bash source $(dirname $0)/common.sh +CONFIG_DIR=git-repo/ci/config version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json java -jar /opt/concourse-release-scripts.jar promote $RELEASE_TYPE $BUILD_INFO_LOCATION > /dev/null || { exit 1; } -java -jar /opt/concourse-release-scripts.jar distribute $RELEASE_TYPE $BUILD_INFO_LOCATION > /dev/null || { exit 1; } +java -jar /opt/concourse-release-scripts.jar \ + --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ + distribute $RELEASE_TYPE $BUILD_INFO_LOCATION > /dev/null || { exit 1; } echo "Promotion complete" echo $version > version/version diff --git a/ci/scripts/sync-to-maven-central.sh b/ci/scripts/sync-to-maven-central.sh new file mode 100755 index 0000000000..b42631164e --- /dev/null +++ b/ci/scripts/sync-to-maven-central.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json +version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) +java -jar /opt/concourse-release-scripts.jar syncToCentral "RELEASE" $BUILD_INFO_LOCATION || { exit 1; } + +echo "Sync complete" +echo $version > version/version diff --git a/ci/tasks/sync-to-maven-central.yml b/ci/tasks/sync-to-maven-central.yml new file mode 100644 index 0000000000..a44af5af16 --- /dev/null +++ b/ci/tasks/sync-to-maven-central.yml @@ -0,0 +1,16 @@ +--- +platform: linux +inputs: +- name: git-repo +- name: artifactory-repo +outputs: +- name: version +params: + BINTRAY_REPO: + BINTRAY_SUBJECT: + BINTRAY_USERNAME: + BINTRAY_API_KEY: + SONATYPE_USER_TOKEN: + SONATYPE_PASSWORD_TOKEN: +run: + path: git-repo/ci/scripts/sync-to-maven-central.sh