Skip to content

Commit c1ff845

Browse files
authored
chore(git): add sematic release workflow (#26)
2 parents 85e04ad + baa6e49 commit c1ff845

File tree

5 files changed

+7144
-0
lines changed

5 files changed

+7144
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
name: Build Docker Artifacts
2+
"on":
3+
push:
4+
tags:
5+
- "v*"
6+
release:
7+
types:
8+
- published
9+
10+
permissions:
11+
contents: read
12+
13+
concurrency:
14+
group: release-docker-${{ github.event.release.tag_name || github.ref_name }}
15+
cancel-in-progress: true
16+
17+
jobs:
18+
docker:
19+
name: Build Docker Artifacts
20+
runs-on: ubuntu-latest
21+
steps:
22+
- name: Checkout
23+
uses: actions/checkout@v6
24+
with:
25+
fetch-depth: 0
26+
- name: Resolve release version
27+
id: version
28+
shell: bash
29+
run: |
30+
if [ "${{ github.event_name }}" = "release" ]; then
31+
RAW="${{ github.event.release.tag_name }}"
32+
else
33+
RAW="${{ github.ref_name }}"
34+
fi
35+
VERSION="${RAW#v}"
36+
echo "raw_tag=$RAW" >> "$GITHUB_OUTPUT"
37+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
38+
- name: Validate Gradle Wrapper
39+
uses: gradle/actions/wrapper-validation@v5
40+
- name: Setup Java
41+
uses: actions/setup-java@v5
42+
with:
43+
distribution: temurin
44+
java-version: 24
45+
- name: Setup Gradle
46+
uses: gradle/actions/setup-gradle@v5
47+
- name: Build Docker Artifacts
48+
run: ./gradlew jar optimizedBuildLayers optimizedDockerfile -Pversion=${{ steps.version.outputs.version }}
49+
- name: Docker meta
50+
id: meta
51+
uses: docker/metadata-action@v5
52+
with:
53+
images: |
54+
${{ secrets.HARBOR_REGISTRY }}/otis/otis
55+
tags: |
56+
type=semver,pattern={{version}},value=${{ steps.version.outputs.version }}
57+
type=semver,pattern={{major}}.{{minor}},value=${{ steps.version.outputs.version }}
58+
type=semver,pattern={{major}},value=${{ steps.version.outputs.version }}
59+
type=sha
60+
- name: Set up QEMU
61+
uses: docker/setup-qemu-action@v3
62+
- name: Set up Docker Buildx
63+
uses: docker/setup-buildx-action@v3
64+
- name: Log in to OneLiteFeather Harbor
65+
uses: docker/login-action@v3
66+
with:
67+
username: ${{ secrets.HARBOR_USERNAME }}
68+
password: ${{ secrets.HARBOR_PASSWORD }}
69+
registry: ${{ secrets.HARBOR_REGISTRY }}
70+
- name: Build and push
71+
id: build-and-push
72+
uses: docker/build-push-action@v6
73+
with:
74+
push: true
75+
tags: ${{ steps.meta.outputs.tags }}
76+
labels: ${{ steps.meta.outputs.labels }}
77+
context: ./backend/build/docker/optimized
78+
- name: Install Cosign
79+
uses: sigstore/[email protected]
80+
- name: Sign image with a key
81+
run: |
82+
images=""
83+
for tag in ${TAGS}; do
84+
images+="${tag}@${DIGEST} "
85+
done
86+
cosign sign --yes --registry-username='${{ secrets.HARBOR_USERNAME }}' --registry-password='${{ secrets.HARBOR_PASSWORD }}' --key env://COSIGN_PRIVATE_KEY ${images}
87+
env:
88+
TAGS: ${{ steps.meta.outputs.tags }}
89+
COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_KEY }}
90+
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
91+
DIGEST: ${{ steps.build-and-push.outputs.digest }}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Release
2+
"on":
3+
push:
4+
branches:
5+
- main
6+
- next
7+
- beta
8+
- "*.x"
9+
10+
permissions:
11+
contents: read # for checkout
12+
13+
jobs:
14+
release:
15+
name: Release
16+
runs-on: ubuntu-latest
17+
permissions:
18+
contents: write # to be able to publish a GitHub release
19+
issues: write # to be able to comment on released issues
20+
pull-requests: write # to be able to comment on released pull requests
21+
id-token: write # to enable use of OIDC for npm provenance
22+
steps:
23+
- name: Checkout
24+
uses: actions/checkout@v6
25+
with:
26+
fetch-depth: 0
27+
- name: Setup Node.js
28+
uses: actions/setup-node@v6
29+
with:
30+
node-version: "lts/*"
31+
- name: Validate Gradle Wrapper
32+
uses: gradle/actions/wrapper-validation@v5
33+
- name: Setup Java
34+
uses: actions/setup-java@v5
35+
with:
36+
distribution: temurin
37+
java-version: 24
38+
- name: Setup Gradle
39+
uses: gradle/actions/setup-gradle@v5
40+
- name: Install dependencies
41+
run: npm clean-install
42+
- name: Verify the integrity of provenance attestations and registry signatures for installed dependencies
43+
run: npm audit signatures
44+
- name: Release
45+
env:
46+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
47+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
48+
ONELITEFEATHER_MAVEN_USERNAME: ${{ secrets.ONELITEFEATHER_MAVEN_USERNAME }}
49+
ONELITEFEATHER_MAVEN_PASSWORD: ${{ secrets.ONELITEFEATHER_MAVEN_PASSWORD }}
50+
run: npx semantic-release

.realeaserc.json

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"plugins": [
3+
[
4+
"@semantic-release/commit-analyzer",
5+
{
6+
"preset": "conventionalcommits"
7+
}
8+
],
9+
"@semantic-release/release-notes-generator",
10+
[
11+
"@semantic-release/exec",
12+
{
13+
"verifyConditionsCmd": "./gradlew check",
14+
"publishCmd": "./gradlew -Pversion=${nextRelease.version} publish"
15+
}
16+
],
17+
"@semantic-release/git",
18+
[
19+
"@semantic-release/github",
20+
{
21+
"assets": [],
22+
"labels": false,
23+
"failTitle": false,
24+
"failComment": false,
25+
"successComment": false,
26+
"releasedLabels": false,
27+
"addReleases": false
28+
}
29+
]
30+
]
31+
}

0 commit comments

Comments
 (0)