Skip to content

Commit a44489b

Browse files
authored
Added release workflow
1 parent f7ac420 commit a44489b

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

.github/workflows/release.yml

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
name: release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
release-type:
7+
type: choice
8+
description: What do you want to release?
9+
options:
10+
- Milestone
11+
- Release
12+
workflow_call:
13+
inputs:
14+
release-type:
15+
default: "Milestone"
16+
required: true
17+
type: string
18+
registry-name:
19+
default: eclipse-lmos
20+
type: string
21+
required: false
22+
secrets:
23+
oss-username:
24+
required: true
25+
oss-password:
26+
required: true
27+
signing-key-id:
28+
required: true
29+
signing-key:
30+
required: true
31+
signing-key-password:
32+
required: true
33+
bot-token:
34+
required: true
35+
registry-username:
36+
required: false
37+
registry-password:
38+
required: false
39+
outputs:
40+
version:
41+
value: ${{ jobs.build-and-release.outputs.version }}
42+
43+
jobs:
44+
build-and-release:
45+
runs-on: ubuntu-latest
46+
permissions:
47+
contents: write
48+
packages: write
49+
outputs:
50+
version: ${{ steps.Publish.outputs.version }}
51+
steps:
52+
- name: Checkout
53+
uses: actions/[email protected]
54+
with:
55+
ref: master
56+
token: ${{ secrets.bot-token }}
57+
- name: REUSE Compliance Check
58+
uses: fsfe/[email protected]
59+
- name: Set up JDK 21
60+
uses: actions/[email protected]
61+
with:
62+
java-version: '21'
63+
distribution: 'temurin'
64+
- name: Setup Gradle
65+
uses: gradle/actions/[email protected]
66+
- name: Publish
67+
id: Publish
68+
env:
69+
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.oss-username }}
70+
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.oss-password }}
71+
ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.signing-key-id }}
72+
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.signing-key }}
73+
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.signing-key-password }}
74+
REGISTRY_URL: ghcr.io
75+
REGISTRY_USERNAME: ${{ secrets.registry-username }}
76+
REGISTRY_PASSWORD: ${{ secrets.registry-password }}
77+
REGISTRY_NAMESPACE: ${{ inputs.registry-name }}
78+
GH_TOKEN: ${{ secrets.bot-token }}
79+
run: |
80+
git config --global user.email "[email protected]"
81+
git config --global user.name "CICD"
82+
git fetch -t -q
83+
84+
# Extract version without -SNAPSHOT suffix from gradle.properties
85+
version=$(sed -n -E 's/^version[[:blank:]]*=[[:blank:]]*(.*)-SNAPSHOT$/\1/p' gradle.properties)
86+
oldSnapshotVersion="${version}-SNAPSHOT"
87+
88+
# In case of milestone release, set milestone release version based on previous milestone release versions
89+
if [ "${{ github.event.inputs.release-type }}" == "Milestone" ]; then
90+
oldMilestone=$(git tag -l "${version}-M*" --sort=v:refname | tail -n 1)
91+
if [ "${oldMilestone}" == "" ]; then
92+
version=${version}-M1
93+
else
94+
version=${version}-M$((10#${oldMilestone##*-M}+1))
95+
fi
96+
fi
97+
98+
# In case of non-milestone releses, increase the snapshot version in master branch
99+
if [ "${{ github.event.inputs.release-type }}" == "Milestone" ]; then
100+
nextSnapshotVersion="${oldSnapshotVersion}"
101+
else
102+
major=$(echo $version | cut -d. -f1)
103+
minor=$(echo $version | cut -d. -f2)
104+
nextSnapshotVersion="${major}.$((minor+1)).0-SNAPSHOT"
105+
fi
106+
107+
echo "Releasing ${version}"
108+
echo "version=${version}" >> $GITHUB_OUTPUT
109+
110+
# Update version, build, publish release jars and (optionally) docker image and helm chart
111+
./gradlew :release -Prelease.useAutomaticVersion=true "-Prelease.releaseVersion=${version}" "-Prelease.newVersion=${nextSnapshotVersion}" --no-parallel
112+
git checkout "${version}"
113+
./gradlew publish --no-configuration-cache
114+
115+
# Generate release notes
116+
if [ "${{ github.event.inputs.release-type }}" == "Milestone" ]; then
117+
gh release create "${version}" --generate-notes --prerelease
118+
else
119+
gh release create "${version}" --generate-notes --latest
120+
fi

0 commit comments

Comments
 (0)