Skip to content

Commit d914d5c

Browse files
authored
Merge pull request #48 from eclipse-thingweb/publish-workflow
Publish workflow
2 parents f358a76 + a44489b commit d914d5c

File tree

3 files changed

+143
-43
lines changed

3 files changed

+143
-43
lines changed

.github/workflows/gradle-pr.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
name: build-pr
2+
3+
on:
4+
push:
5+
branches-ignore:
6+
- 'main'
7+
8+
jobs:
9+
CI:
10+
uses: eclipse-lmos/.github/.github/workflows/gradle-ci.yml@main
11+
permissions:
12+
contents: read

.github/workflows/gradle.yml

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -9,53 +9,21 @@
99
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
1010
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
1111

12-
name: Java CI with Gradle
12+
name: build-publish
1313

1414
on:
1515
push:
16-
branches: [ "master" ]
17-
pull_request:
18-
branches: [ "master" ]
16+
branches: [ main ]
1917

2018
jobs:
21-
validation:
22-
name: "Gradle wrapper validation"
23-
runs-on: ubuntu-latest
24-
steps:
25-
- uses: actions/[email protected]
26-
- uses: gradle/actions/[email protected]
27-
build:
28-
29-
runs-on: ubuntu-latest
30-
permissions:
31-
contents: read
32-
33-
steps:
34-
- uses: actions/checkout@v4
35-
- name: Set up JDK 21
36-
uses: actions/setup-java@v4
37-
with:
38-
java-version: '21'
39-
distribution: 'temurin'
40-
- name: Setup Gradle
41-
uses: gradle/actions/setup-gradle@0d30c9111cf47a838eb69c06d13f3f51ab2ed76f # v3.1.0
42-
- name: Build with Gradle Wrapper
43-
run: ./gradlew build
44-
45-
dependency-submission:
46-
runs-on: ubuntu-latest
19+
build-publish:
20+
uses: eclipse-lmos/.github/.github/workflows/gradle-ci-main.yml@main
4721
permissions:
4822
contents: write
49-
steps:
50-
- uses: actions/checkout@v4
51-
- name: Set up JDK 21
52-
uses: actions/setup-java@v4
53-
with:
54-
java-version: '21'
55-
distribution: 'temurin'
56-
57-
# Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies.
58-
# See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md
59-
- name: Generate and submit dependency graph
60-
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
61-
uses: gradle/actions/dependency-submission@0d30c9111cf47a838eb69c06d13f3f51ab2ed76f # v3.1.0
23+
packages: write
24+
secrets:
25+
oss-username: ${{ secrets.OSSRH_USERNAME }}
26+
oss-password: ${{ secrets.OSSRH_PASSWORD }}
27+
signing-key-id: ${{ secrets.GPG_SUBKEY_ID }}
28+
signing-key: ${{ secrets.GPG_PRIVATE_KEY }}
29+
signing-key-password: ${{ secrets.GPG_PASSPHRASE }}

.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)