-
Notifications
You must be signed in to change notification settings - Fork 2
167 lines (144 loc) · 5.51 KB
/
ci.yml
File metadata and controls
167 lines (144 loc) · 5.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
name: CI
on:
push:
branches: [ master, develop ]
tags: [ 'v*' ]
pull_request:
branches: [ master, develop ]
jobs:
test:
name: Test on ${{ matrix.os }} with Java ${{ matrix.java }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
java: ['21']
# Uncomment to test on multiple Java versions
# java: ['21', '22', '23']
# Uncomment to test on multiple OS
# os: [ubuntu-latest, macos-latest, windows-latest]
env:
CI: true
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v5
with:
java-version: ${{ matrix.java }}
distribution: 'temurin'
cache: 'maven'
# Get project info for consistent naming
- name: Get project info
id: project
run: |
echo "VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_OUTPUT
echo "ARTIFACT_ID=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout)" >> $GITHUB_OUTPUT
- name: Run tests with coverage
run: mvn clean test jacoco:report
- name: Upload test results
uses: actions/upload-artifact@v5
if: always()
with:
name: test-results-${{ matrix.os }}-java${{ matrix.java }}-${{ github.run_number }}
path: |
target/surefire-reports/
target/site/jacoco/
retention-days: 30
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
if: matrix.os == 'ubuntu-latest' && matrix.java == '21'
with:
files: target/site/jacoco/jacoco.xml
flags: unittests
name: codecov-umbrella
fail_ci_if_error: false
continue-on-error: true
build:
name: Build Release Artifacts
needs: test
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
- name: Get project info
id: project
run: |
echo "VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_OUTPUT
echo "ARTIFACT_ID=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout)" >> $GITHUB_OUTPUT
- name: Build all artifacts
run: mvn clean package -DskipTests
- name: Upload build artifacts
uses: actions/upload-artifact@v5
with:
name: ${{ steps.project.outputs.ARTIFACT_ID }}-${{ steps.project.outputs.VERSION }}-build${{ github.run_number }}
path: |
target/${{ steps.project.outputs.ARTIFACT_ID }}-${{ steps.project.outputs.VERSION }}.jar
target/${{ steps.project.outputs.ARTIFACT_ID }}-${{ steps.project.outputs.VERSION }}-jar-with-dependencies.jar
target/${{ steps.project.outputs.ARTIFACT_ID }}-${{ steps.project.outputs.VERSION }}-sources.jar
target/${{ steps.project.outputs.ARTIFACT_ID }}-${{ steps.project.outputs.VERSION }}-javadoc.jar
retention-days: 90
release:
name: Create GitHub Release
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
- name: Get project info
id: project
run: |
echo "VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_OUTPUT
echo "ARTIFACT_ID=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout)" >> $GITHUB_OUTPUT
- name: Build release artifacts
run: mvn clean package -DskipTests
- name: Extract release notes
id: extract_notes
run: |
# Extract release notes from CHANGELOG.md
TAG_NAME=${GITHUB_REF#refs/tags/}
# Try to extract version-specific notes from CHANGELOG
if grep -q "## \[${TAG_NAME#v}\]" CHANGELOG.md 2>/dev/null; then
sed -n "/## \[${TAG_NAME#v}\]/,/## \[/p" CHANGELOG.md | sed '$d' > release_notes.md
else
# Fallback: use git tag annotation
git tag -l --format='%(contents)' $TAG_NAME > release_notes.md
fi
# If release notes are empty, use a default message
if [ ! -s release_notes.md ]; then
echo "Release ${TAG_NAME}" > release_notes.md
echo "" >> release_notes.md
echo "See [CHANGELOG.md](CHANGELOG.md) for details." >> release_notes.md
fi
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
body_path: release_notes.md
files: |
target/${{ steps.project.outputs.ARTIFACT_ID }}-${{ steps.project.outputs.VERSION }}.jar
target/${{ steps.project.outputs.ARTIFACT_ID }}-${{ steps.project.outputs.VERSION }}-jar-with-dependencies.jar
target/${{ steps.project.outputs.ARTIFACT_ID }}-${{ steps.project.outputs.VERSION }}-sources.jar
target/${{ steps.project.outputs.ARTIFACT_ID }}-${{ steps.project.outputs.VERSION }}-javadoc.jar
draft: false
prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
fail_on_unmatched_files: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}