diff --git a/Jenkinsfile b/Jenkinsfile index 7831e8fa..04e462a5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -68,35 +68,47 @@ pipeline { } } - stage('Release to artifactory') { + stage('Deploy') { when { beforeAgent(true) anyOf { - branch(pattern: "main|(\\d\\.\\d\\.x)", comparator: "REGEXP") + branch(pattern: "main|(\\d\\.\\d\\.x)|v(\\d\\.\\d\\.d)|", comparator: "REGEXP") not { triggeredBy 'UpstreamCause' } } } agent { - label 'data' + docker { + image "harbor-repo.vmware.com/dockerhub-proxy-cache/springci/spring-vault-openjdk17-vault:${p['java.main.tag']}-${p['docker.vault.version']}" + args "${p['docker.java.inside.basic']}" + } } options { timeout(time: 20, unit: 'MINUTES') } environment { ARTIFACTORY = credentials("${p['artifactory.credentials']}") + SONATYPE = credentials('oss-login') + KEYRING = credentials('spring-signing-secring.gpg') + PASSPHRASE = credentials('spring-gpg-passphrase') } steps { script { - docker.image("harbor-repo.vmware.com/dockerhub-proxy-cache/springci/spring-vault-openjdk8-vault:${p['java.main.tag']}-${p['docker.vault.version']}").inside(p['docker.java.inside.basic']) { - sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' + - '-Dartifactory.server=https://repo.spring.io ' + - "-Dartifactory.username=${ARTIFACTORY_USR} " + - "-Dartifactory.password=${ARTIFACTORY_PSW} " + - "-Dartifactory.staging-repository=libs-snapshot-local " + - "-Dartifactory.build-name=spring-vault " + - "-Dartifactory.build-number=${BUILD_NUMBER} " + - '-Dmaven.test.skip=true clean deploy -U -B' + PROJECT_VERSION = sh( + script: "ci/version.sh", + returnStdout: true + ).trim() + + RELEASE_TYPE = 'snapshot' + + if (PROJECT_VERSION.matches(/.*-RC[0-9]+$/) || PROJECT_VERSION.matches(/.*-M[0-9]+$/)) { + RELEASE_TYPE = "milestone" + } else if (PROJECT_VERSION.endsWith('SNAPSHOT')) { + RELEASE_TYPE = 'snapshot' + } else if (PROJECT_VERSION.matches(/.*\.[0-9]+$/)) { + RELEASE_TYPE = 'release' } + + sh "ci/deploy-${RELEASE_TYPE}.sh" } } } diff --git a/ci/deploy-milestone.sh b/ci/deploy-milestone.sh new file mode 100755 index 00000000..bd9da866 --- /dev/null +++ b/ci/deploy-milestone.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +set -euo pipefail + +MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,milestone,artifactory,release \ + -Dartifactory.server=https://repo.spring.io \ + -Dartifactory.username=${ARTIFACTORY_USR} \ + -Dartifactory.password=${ARTIFACTORY_PSW} \ + -Dartifactory.staging-repository=libs-milestone-local \ + -Dartifactory.build-name=spring-vault \ + -Dartifactory.build-number=${BUILD_NUMBER} \ + clean deploy -U -B + +MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pdistribute \ + -Dartifactory.server=https://repo.spring.io \ + -Dartifactory.username=${ARTIFACTORY_USR} \ + -Dartifactory.password=${ARTIFACTORY_PSW} \ + -Dartifactory.staging-repository=temp-private-local \ + clean deploy -U -B diff --git a/ci/deploy-release.sh b/ci/deploy-release.sh new file mode 100755 index 00000000..a54ea2fb --- /dev/null +++ b/ci/deploy-release.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -euo pipefail + +GNUPGHOME=/tmp/gpghome +export GNUPGHOME + +mkdir $GNUPGHOME +cp $KEYRING $GNUPGHOME + +MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,central,release \ + -Dgpg.passphrase=${PASSPHRASE} \ + -Dgpg.secretKeyring=${GNUPGHOME}/secring.gpg \ + -DstagingDescription="Releasing Spring Vault ${VERSION}" \ + clean deploy -U -B + +MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pdistribute \ + -Dartifactory.server=https://repo.spring.io \ + -Dartifactory.username=${ARTIFACTORY_USR} \ + -Dartifactory.password=${ARTIFACTORY_PSW} \ + -Dartifactory.staging-repository=temp-private-local \ + clean deploy -U -B diff --git a/ci/deploy-snapshot.sh b/ci/deploy-snapshot.sh new file mode 100755 index 00000000..5820fb94 --- /dev/null +++ b/ci/deploy-snapshot.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -euo pipefail +MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,snapshot,artifactory \ + -Dartifactory.server=https://repo.spring.io \ + -Dartifactory.username=${ARTIFACTORY_USR} \ + -Dartifactory.password=${ARTIFACTORY_PSW} \ + -Dartifactory.staging-repository=libs-snapshot-local \ + -Dartifactory.build-name=spring-vault \ + -Dartifactory.build-number=${BUILD_NUMBER} \ + -Dmaven.test.skip=true \ + clean deploy -U -B diff --git a/ci/version.sh b/ci/version.sh new file mode 100755 index 00000000..71b2f024 --- /dev/null +++ b/ci/version.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +set -euo pipefail + +RAW_VERSION=`MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw \ + org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate \ + -Dexpression=project.version -q -DforceStdout` + +# Split things up +VERSION_PARTS=($RAW_VERSION) + +# Grab the last part, which is the actual version number. +echo ${VERSION_PARTS[${#VERSION_PARTS[@]}-1]} diff --git a/pom.xml b/pom.xml index 919aba4b..79009934 100644 --- a/pom.xml +++ b/pom.xml @@ -619,6 +619,20 @@ + + + snapshot + + + + spring-libs-snapshot + Spring Snapshot Repository + https://repo.spring.io/libs-snapshot-local + + + + + milestone @@ -679,6 +693,35 @@ true + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.1.0 + + + enforce-no-third-party-snapshots + + enforce + + + + + + true + + + + + + + + de.smartics.rules + smartics-enforcer-rules + 1.0.2 + + + @@ -815,14 +858,6 @@ artifactory - - - spring-libs-snapshot - Spring Snapshot Repository - https://repo.spring.io/libs-snapshot-local - - - diff --git a/settings.xml b/settings.xml index b3227cc1..2700e663 100644 --- a/settings.xml +++ b/settings.xml @@ -24,6 +24,11 @@ ${env.ARTIFACTORY_USR} ${env.ARTIFACTORY_PSW} + + sonatype-nexus-staging + ${env.SONATYPE_USR} + ${env.SONATYPE_PSW} + - \ No newline at end of file + diff --git a/spring-vault-dependencies/pom.xml b/spring-vault-dependencies/pom.xml index a8a2144d..024de8db 100644 --- a/spring-vault-dependencies/pom.xml +++ b/spring-vault-dependencies/pom.xml @@ -221,6 +221,20 @@ + + + snapshot + + + + spring-libs-snapshot + Spring Snapshot Repository + https://repo.spring.io/libs-snapshot-local + + + + + milestone @@ -268,7 +282,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.6 + 3.0.1 sign-artifacts @@ -288,14 +302,6 @@ artifactory - - - spring-libs-snapshot - Spring Snapshot Repository - https://repo.spring.io/libs-snapshot-local - - - @@ -348,6 +354,41 @@ + + release + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.1.0 + + + enforce-no-third-party-snapshots + + enforce + + + + + + true + + + + + + + + de.smartics.rules + smartics-enforcer-rules + 1.0.2 + + + + + + diff --git a/spring-vault-distribution/pom.xml b/spring-vault-distribution/pom.xml index 49ffa0c1..0d653157 100644 --- a/spring-vault-distribution/pom.xml +++ b/spring-vault-distribution/pom.xml @@ -427,13 +427,14 @@ Spring Vault Docs ${project.version} 1 + {{BUILD_URL}} - https://repo.spring.io - ${artifactory.username} - ${artifactory.password} - temp-private-local - temp-private-local + {{artifactory.server}} + {{artifactory.username}} + {{artifactory.password}} + {{artifactory.staging-repository}} + {{artifactory.staging-repository}} *.zip