Skip to content

Commit a42db87

Browse files
committed
chore: optimize release process
1 parent 18dae2a commit a42db87

File tree

5 files changed

+239
-4
lines changed

5 files changed

+239
-4
lines changed

.github/add-module-suffix.sh

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#!/bin/bash
2+
3+
MODULE_SUFFIX="${GITHUB_REF##*/}"
4+
5+
addSuffix() {
6+
local result
7+
result=$(grep include settings.gradle | awk '{print $2}' | tr -d "'" | tr -d ':')
8+
readarray -t <<<"$result"
9+
modules=("${MAPFILE[@]}")
10+
11+
updateLocalDependencies
12+
}
13+
14+
updateLocalDependencies() {
15+
for module in "${modules[@]}"; do
16+
cp -rf "$module" "$module"-"$MODULE_SUFFIX"
17+
rm -rf "$module"
18+
19+
for dependency in "${modules[@]}"; do
20+
sed -i -E "s/project\(('|\"):${dependency}('|\")\)/project\(':${dependency}-${MODULE_SUFFIX}'\)/" "$module"-"$MODULE_SUFFIX"/build.gradle
21+
done
22+
done
23+
24+
updateGradleSettings
25+
}
26+
27+
updateGradleSettings() {
28+
for module in "${modules[@]}"; do
29+
echo "Replace ${module} with ${module}-${MODULE_SUFFIX} in settings.gradle"
30+
sed -i -E "s/('|\"):${module}('|\")/':${module}-${MODULE_SUFFIX}'/" settings.gradle
31+
done
32+
33+
cat settings.gradle
34+
}
35+
36+
echo "Add suffix '-$MODULE_SUFFIX' to modules"
37+
addSuffix
38+
39+
ls -lh

.github/release.sh

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/bin/bash
2+
set -ev
3+
4+
BRANCH="${GITHUB_REF##*/}"
5+
6+
removeSnapshots() {
7+
sed -i 's/-SNAPSHOT//' gradle.properties
8+
}
9+
10+
echo "Publishing release to Maven Central"
11+
removeSnapshots
12+
13+
if [[ "${BRANCH}" != "master" ]]; then
14+
.github/add-module-suffix.sh
15+
fi
16+
17+
./gradlew clean build publishToSonatype closeAndReleaseSonatypeStagingRepository

.github/tag-release.sh

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/bin/bash
2+
set -ev
3+
4+
BRANCH="${GITHUB_REF##*/}"
5+
6+
getVersion() {
7+
./gradlew properties -q | grep -E "^version" | awk '{print $2}' | tr -d '[:space:]'
8+
}
9+
10+
removeSnapshots() {
11+
sed -i 's/-SNAPSHOT//' gradle.properties
12+
}
13+
14+
commitRelease() {
15+
local APP_VERSION
16+
if "${BRANCH}" == "master"; then
17+
APP_VERSION=$(getVersion)
18+
else
19+
APP_VERSION=$(getVersion)-"${BRANCH}"
20+
fi
21+
git commit -a -m "Update version for release"
22+
git tag -a "v${APP_VERSION}" -m "Tag release version"
23+
}
24+
25+
bumpVersion() {
26+
echo "Bump version number"
27+
local APP_VERSION
28+
APP_VERSION=$(getVersion | xargs)
29+
local SEMANTIC_REGEX='^([0-9]+)\.([0-9]+)(\.([0-9]+))?$'
30+
if [[ ${APP_VERSION} =~ ${SEMANTIC_REGEX} ]]; then
31+
if [[ ${BASH_REMATCH[4]} ]]; then
32+
nextVersion=$((BASH_REMATCH[4] + 1))
33+
nextVersion="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.${nextVersion}-SNAPSHOT"
34+
else
35+
nextVersion=$((BASH_REMATCH[2] + 1))
36+
nextVersion="${BASH_REMATCH[1]}.${nextVersion}-SNAPSHOT"
37+
fi
38+
39+
echo "Next version: ${nextVersion}"
40+
sed -i -E "s/^version(\s)?=.*/version=${nextVersion}/" gradle.properties
41+
git commit -a -m "Bumped version for next release"
42+
else
43+
echo "No semantic version and therefore cannot publish to maven repository: '${APP_VERSION}'"
44+
fi
45+
}
46+
47+
git config --global user.email "actions@github.com"
48+
git config --global user.name "GitHub Actions"
49+
50+
echo "Deploying release to Maven Central"
51+
removeSnapshots
52+
commitRelease
53+
bumpVersion
54+
git push --follow-tags

.github/workflows/release-jdk11.yml

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: "Publish JDK11 release"
2+
on: [ workflow_dispatch ]
3+
4+
jobs:
5+
validation:
6+
name: Gradle Wrapper Validation
7+
runs-on: ubuntu-latest
8+
steps:
9+
- uses: actions/checkout@v3
10+
- uses: gradle/wrapper-validation-action@v1
11+
12+
test:
13+
name: Test run
14+
needs: validation
15+
runs-on: ubuntu-latest
16+
steps:
17+
- name: Checkout
18+
uses: actions/checkout@v3
19+
- name: Setup Java
20+
uses: actions/setup-java@v3
21+
with:
22+
distribution: 'zulu'
23+
java-version: 11
24+
- name: Cache Gradle
25+
uses: actions/cache@v3
26+
env:
27+
java-version: 11
28+
with:
29+
path: |
30+
~/.gradle/caches
31+
~/.gradle/wrapper
32+
key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }}
33+
restore-keys: |
34+
${{ runner.os }}-${{ env.java-version }}-gradle-
35+
- name: Make gradlew executable
36+
run: chmod +x ./gradlew
37+
- name: Gradle Check
38+
run: ./gradlew --info check
39+
40+
build:
41+
name: Publish release
42+
needs: test
43+
runs-on: ubuntu-latest
44+
steps:
45+
- name: Checkout
46+
uses: actions/checkout@v3
47+
- name: Setup Java
48+
uses: actions/setup-java@v3
49+
with:
50+
distribution: 'zulu'
51+
java-version: 11
52+
- name: Cache Gradle
53+
uses: actions/cache@v3
54+
env:
55+
java-version: 11
56+
with:
57+
path: |
58+
~/.gradle/caches
59+
~/.gradle/wrapper
60+
key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }}
61+
restore-keys: |
62+
${{ runner.os }}-${{ env.java-version }}-gradle-
63+
- name: Prepare environment
64+
env:
65+
GPG_KEY_CONTENTS: ${{ secrets.GPG_KEY_CONTENTS }}
66+
SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }}
67+
run: sudo bash -c "echo '$GPG_KEY_CONTENTS' | base64 -d > '$SIGNING_SECRET_KEY_RING_FILE'"
68+
- name: Publish release
69+
env:
70+
SIGNING_KEY_ID: ${{ secrets.GPG_SIGNING_KEY_ID }}
71+
SIGNING_PASSWORD: ${{ secrets.GPG_SIGNING_PASSWORD }}
72+
SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }}
73+
OSS_USER_TOKEN_KEY: ${{ secrets.OSS_USER_TOKEN_KEY }}
74+
OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }}
75+
run: .github/release.sh
76+
77+
tag:
78+
name: Tag release
79+
needs: build
80+
runs-on: ubuntu-latest
81+
steps:
82+
- name: Checkout
83+
uses: actions/checkout@v3
84+
- name: Setup Java
85+
uses: actions/setup-java@v3
86+
with:
87+
distribution: 'zulu'
88+
java-version: 11
89+
- name: Cache Gradle
90+
uses: actions/cache@v3
91+
env:
92+
java-version: 11
93+
with:
94+
path: |
95+
~/.gradle/caches
96+
~/.gradle/wrapper
97+
key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }}
98+
restore-keys: |
99+
${{ runner.os }}-${{ env.java-version }}-gradle-
100+
- name: Tag release
101+
run: .github/tag-release.sh

.github/workflows/release.yml renamed to .github/workflows/release-jdk17.yml

+28-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: "Publish release"
1+
name: "Publish JDK17 release"
22
on: [ workflow_dispatch ]
33

44
jobs:
@@ -60,8 +60,6 @@ jobs:
6060
key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }}
6161
restore-keys: |
6262
${{ runner.os }}-${{ env.java-version }}-gradle-
63-
- name: Make gradlew executable
64-
run: chmod +x ./gradlew
6563
- name: Prepare environment
6664
env:
6765
GPG_KEY_CONTENTS: ${{ secrets.GPG_KEY_CONTENTS }}
@@ -74,4 +72,30 @@ jobs:
7472
SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }}
7573
OSS_USER_TOKEN_KEY: ${{ secrets.OSS_USER_TOKEN_KEY }}
7674
OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }}
77-
run: bash github-build.sh
75+
run: .github/release.sh
76+
77+
tag:
78+
name: Tag release
79+
needs: build
80+
runs-on: ubuntu-latest
81+
steps:
82+
- name: Checkout
83+
uses: actions/checkout@v3
84+
- name: Setup Java
85+
uses: actions/setup-java@v3
86+
with:
87+
distribution: 'zulu'
88+
java-version: 17
89+
- name: Cache Gradle
90+
uses: actions/cache@v3
91+
env:
92+
java-version: 17
93+
with:
94+
path: |
95+
~/.gradle/caches
96+
~/.gradle/wrapper
97+
key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }}
98+
restore-keys: |
99+
${{ runner.os }}-${{ env.java-version }}-gradle-
100+
- name: Tag release
101+
run: .github/tag-release.sh

0 commit comments

Comments
 (0)