#87 - Initial scripts and tweaks for build and release via GitHub Actions.
This commit is contained in:
33
.github/workflows/build.yaml
vendored
Normal file
33
.github/workflows/build.yaml
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
name: CI Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build project
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
- name: Check out sources
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
cache: 'maven'
|
||||
|
||||
- name: Build with Maven
|
||||
run: ./mvnw -B
|
||||
|
||||
- name: Deploy to Artifactory
|
||||
env:
|
||||
ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
|
||||
ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
||||
run: ./mvnw -B clean deploy -Pci,artifactory
|
||||
34
.github/workflows/milestone.yaml
vendored
Normal file
34
.github/workflows/milestone.yaml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Release Milestones
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ release/milestone ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Release project
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
- name: Check out sources
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
cache: 'maven'
|
||||
|
||||
- name: Build with Maven
|
||||
run: ./mvnw -B
|
||||
|
||||
- name: Deploy to Artifactory
|
||||
env:
|
||||
ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
|
||||
ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
||||
run: ./mvnw -B clean deploy -Pci,artifactory
|
||||
|
||||
- name: Setup Graphviz
|
||||
uses: ts-graphviz/setup-graphviz@v1
|
||||
39
.github/workflows/release.yaml
vendored
Normal file
39
.github/workflows/release.yaml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
name: Release to Maven Central
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ release/release ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Release project
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
- name: Check out sources
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
cache: 'maven'
|
||||
|
||||
- name: Install GPG key
|
||||
run: |
|
||||
echo "${{ secrets.GPG_PRIVATE_KEY }}" > gpg.asc
|
||||
echo "${{ secrets.GPG_PASSPHRASE }}" | gpg --batch --yes --passphrase-fd 0 --import gpg.asc
|
||||
|
||||
- name: Release to Sonatype OSSRH
|
||||
env:
|
||||
SONATYPE_USER: ${{ secrets.OSSRH_S01_TOKEN_USERNAME }}
|
||||
SONATYPE_PASSWORD: ${{ secrets.OSSRH_S01_TOKEN_PASSWORD }}
|
||||
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
|
||||
run: |
|
||||
./mvnw -B clean install -DskipTests
|
||||
./mvnw -B clean deploy -Psonatype -s settings.xml
|
||||
|
||||
- name: Setup Graphviz
|
||||
uses: ts-graphviz/setup-graphviz@v1
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/spring-plugin-maven-repository" ./mvnw -P${PROFILE} -Dmaven.test.skip=true clean deploy -B
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ISSUE=$1
|
||||
RELEASE=$2
|
||||
SNAPSHOT=$3
|
||||
|
||||
# Bump up the version in pom.xml to the desired version and commit the change
|
||||
./mvnw versions:set -DnewVersion=$RELEASE -DgenerateBackupPoms=false
|
||||
git add .
|
||||
git commit --message "#$ISSUE - Releasing Spring Plugin $RELEASE."
|
||||
|
||||
# Tag the release
|
||||
git tag -s $RELEASE -m "$RELEASE"
|
||||
|
||||
# Bump up the version in pom.xml to the next snapshot
|
||||
./mvnw versions:set -DnewVersion=$SNAPSHOT -DgenerateBackupPoms=false
|
||||
git add .
|
||||
git commit --message "#$ISSUE - Continue development on $SNAPSHOT."
|
||||
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e -u
|
||||
|
||||
buildName=`jq -r '.name' build-info.json`
|
||||
buildNumber=`jq -r '.number' build-info.json`
|
||||
groupId=`jq -r '.modules[0].id' build-info.json | sed 's/\(.*\):.*:.*/\1/'`
|
||||
version=`jq -r '.modules[0].id' build-info.json | sed 's/.*:.*:\(.*\)/\1/'`
|
||||
|
||||
echo "Promoting ${buildName}/${buildNumber}/${groupId}/${version} to libs-release-local"
|
||||
|
||||
curl \
|
||||
-s \
|
||||
--connect-timeout 240 \
|
||||
--max-time 2700 \
|
||||
-u ${ARTIFACTORY_USR}:${ARTIFACTORY_PSW} \
|
||||
-H 'Content-type:application/json' \
|
||||
-d '{"sourceRepos": ["libs-release-local"], "targetRepo" : "spring-distributions", "async":"true"}' \
|
||||
-f \
|
||||
-X \
|
||||
POST "https://repo.spring.io/api/build/distribute/${buildName}/${buildNumber}" > /dev/null || { echo "Failed to distribute" >&2; exit 1; }
|
||||
|
||||
echo "Waiting for artifacts to be published"
|
||||
|
||||
ARTIFACTS_PUBLISHED=false
|
||||
WAIT_TIME=10
|
||||
COUNTER=0
|
||||
|
||||
while [ $ARTIFACTS_PUBLISHED == "false" ] && [ $COUNTER -lt 120 ]; do
|
||||
|
||||
result=$( curl -s https://api.bintray.com/packages/spring/jars/"${groupId}" )
|
||||
versions=$( echo "$result" | jq -r '.versions' )
|
||||
exists=$( echo "$versions" | grep "$version" -o || true )
|
||||
|
||||
if [ "$exists" = "$version" ]; then
|
||||
ARTIFACTS_PUBLISHED=true
|
||||
fi
|
||||
|
||||
COUNTER=$(( COUNTER + 1 ))
|
||||
sleep $WAIT_TIME
|
||||
|
||||
done
|
||||
@@ -1,23 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e -u
|
||||
|
||||
buildName=`jq -r '.name' build-info.json`
|
||||
buildNumber=`jq -r '.number' build-info.json`
|
||||
groupId=`jq -r '.modules[0].id' build-info.json | sed 's/\(.*\):.*:.*/\1/'`
|
||||
version=`jq -r '.modules[0].id' build-info.json | sed 's/.*:.*:\(.*\)/\1/'`
|
||||
|
||||
echo "Syncing ${buildName}/${buildNumber}/${groupId}/${version} to Maven Central..."
|
||||
|
||||
curl \
|
||||
-s \
|
||||
--connect-timeout 240 \
|
||||
--max-time 2700 \
|
||||
-u ${BINTRAY_USR}:${BINTRAY_PSW} \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "{ \"username\": \"${SONATYPE_USR}\", \"password\": \"${SONATYPE_PSW}\"}" \
|
||||
-f \
|
||||
-X \
|
||||
POST "https://api.bintray.com/maven_central_sync/spring/jars/${groupId}/versions/${version}" > /dev/null || { echo "Failed to sync" >&2; exit 1; }
|
||||
|
||||
echo "Sync complete"
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/spring-plugin-maven-repository" ./mvnw -P${PROFILE} clean dependency:list test -Dsort -B
|
||||
114
pom.xml
114
pom.xml
@@ -111,38 +111,34 @@
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>snapshot</id>
|
||||
|
||||
<id>artifactory</id>
|
||||
<properties>
|
||||
<maven.test.skip>true</maven.test.skip>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.jfrog.buildinfo</groupId>
|
||||
<artifactId>artifactory-maven-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<version>${artifactory-maven-plugin.version}</version>
|
||||
<inherited>false</inherited>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-info</id>
|
||||
<id>deploy-to-artifactory</id>
|
||||
<goals>
|
||||
<goal>publish</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<buildInfo>
|
||||
<buildUrl>{{BUILD_URL}}</buildUrl>
|
||||
</buildInfo>
|
||||
<deployProperties>
|
||||
<zip.name>spring-plugin</zip.name>
|
||||
<zip.displayname>spring-plugin</zip.displayname>
|
||||
<zip.deployed>false</zip.deployed>
|
||||
<archives>*:*:*:*@zip</archives>
|
||||
</deployProperties>
|
||||
<publisher>
|
||||
<contextUrl>https://repo.spring.io</contextUrl>
|
||||
<username>{{ARTIFACTORY_USR}}</username>
|
||||
<password>{{ARTIFACTORY_PSW}}</password>
|
||||
<repoKey>libs-snapshot-local</repoKey>
|
||||
<username>${env.ARTIFACTORY_USERNAME}</username>
|
||||
<password>${env.ARTIFACTORY_PASSWORD}</password>
|
||||
<repoKey>libs-milestone-local</repoKey>
|
||||
<snapshotRepoKey>libs-snapshot-local</snapshotRepoKey>
|
||||
</publisher>
|
||||
<buildInfo>
|
||||
<buildName>CI build for Spring Plugin ${project.version}</buildName>
|
||||
</buildInfo>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
@@ -152,85 +148,37 @@
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>milestone</id>
|
||||
|
||||
<id>sonatype</id>
|
||||
<properties>
|
||||
<maven.test.skip>true</maven.test.skip>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.jfrog.buildinfo</groupId>
|
||||
<artifactId>artifactory-maven-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<inherited>false</inherited>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-info</id>
|
||||
<id>sign-artifacts</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>publish</goal>
|
||||
<goal>sign</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<buildInfo>
|
||||
<buildUrl>{{BUILD_URL}}</buildUrl>
|
||||
</buildInfo>
|
||||
<deployProperties>
|
||||
<zip.name>spring-plugin</zip.name>
|
||||
<zip.displayname>spring-plugin</zip.displayname>
|
||||
<zip.deployed>false</zip.deployed>
|
||||
<archives>*:*:*:*@zip</archives>
|
||||
</deployProperties>
|
||||
<publisher>
|
||||
<contextUrl>https://repo.spring.io</contextUrl>
|
||||
<username>{{ARTIFACTORY_USR}}</username>
|
||||
<password>{{ARTIFACTORY_PSW}}</password>
|
||||
<repoKey>libs-milestone-local</repoKey>
|
||||
<snapshotRepoKey>libs-milestone-local</snapshotRepoKey>
|
||||
</publisher>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>release</id>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.jfrog.buildinfo</groupId>
|
||||
<artifactId>artifactory-maven-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<inherited>false</inherited>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-info</id>
|
||||
<goals>
|
||||
<goal>publish</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<buildInfo>
|
||||
<buildUrl>{{BUILD_URL}}</buildUrl>
|
||||
</buildInfo>
|
||||
<deployProperties>
|
||||
<zip.name>spring-plugin</zip.name>
|
||||
<zip.displayname>spring-plugin</zip.displayname>
|
||||
<zip.deployed>false</zip.deployed>
|
||||
<archives>*:*:*:*@zip</archives>
|
||||
</deployProperties>
|
||||
<publisher>
|
||||
<contextUrl>https://repo.spring.io</contextUrl>
|
||||
<username>{{ARTIFACTORY_USR}}</username>
|
||||
<password>{{ARTIFACTORY_PSW}}</password>
|
||||
<repoKey>libs-release-local</repoKey>
|
||||
<snapshotRepoKey>libs-release-local</snapshotRepoKey>
|
||||
</publisher>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<passphrase>${env.GPG_PASSPHRASE}</passphrase>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>sonatype-new</id>
|
||||
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2</url>
|
||||
</repository>
|
||||
</distributionManagement>
|
||||
</profile>
|
||||
|
||||
</profiles>
|
||||
|
||||
12
settings.xml
Normal file
12
settings.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
|
||||
|
||||
<servers>
|
||||
<server>
|
||||
<id>sonatype-new</id>
|
||||
<username>${env.SONATYPE_USER}</username>
|
||||
<password>${env.SONATYPE_PASSWORD}</password>
|
||||
</server>
|
||||
</servers>
|
||||
</settings>
|
||||
Reference in New Issue
Block a user