1+ name : Main Branch Workflow
2+
3+ on :
4+ push :
5+ branches : [ "main" ]
6+
7+ jobs :
8+ build-jars :
9+ runs-on : ubuntu-latest
10+
11+ steps :
12+ - uses : actions/checkout@v4
13+ - name : Set up JDK 17
14+ uses : actions/setup-java@v4
15+ with :
16+ java-version : ' 17'
17+ distribution : ' temurin'
18+
19+ - name : Setup Gradle
20+ uses : gradle/actions/setup-gradle@v4
21+
22+ - name : Build with Gradle Wrapper
23+ run : ./gradlew build --no-daemon
24+
25+ - name : Extract project name from Gradle
26+ id : extract-name
27+ run : |
28+ PROJECT_NAME=$(./gradlew -q printProjectName --no-daemon)
29+ echo "PROJECT_NAME=${PROJECT_NAME}" >> $GITHUB_ENV
30+
31+ - name : Extract version from Gradle
32+ id : extract-version
33+ run : |
34+ VERSION=$(./gradlew -q printProjectVersion --no-daemon)
35+ echo "VERSION=${VERSION}" >> $GITHUB_ENV
36+
37+ - name : Upload jars
38+ uses : actions/upload-artifact@v4
39+ with :
40+ name : ${{ env.PROJECT_NAME }}-${{ env.VERSION }}-jars
41+ path : build/libs/*.jar
42+
43+ - name : Upload JaCoCo test report
44+ uses : actions/upload-artifact@v4
45+ with :
46+ name : ${{ env.PROJECT_NAME }}-${{ env.VERSION }}-test-report
47+ path : build/reports/jacoco/jacocoRootReport/jacocoRootReport.xml
48+
49+ upload-codecov :
50+ runs-on : ubuntu-latest
51+ needs :
52+ - build-jars
53+
54+ steps :
55+ - uses : actions/checkout@v4
56+ - name : Extract project name from Gradle
57+ id : extract-name
58+ run : |
59+ PROJECT_NAME=$(./gradlew -q printProjectName --no-daemon)
60+ echo "PROJECT_NAME=${PROJECT_NAME}" >> $GITHUB_ENV
61+
62+ - name : Extract version from Gradle
63+ id : extract-version
64+ run : |
65+ VERSION=$(./gradlew -q printProjectVersion --no-daemon)
66+ echo "VERSION=${VERSION}" >> $GITHUB_ENV
67+
68+ - name : Download JaCoCo test report
69+ uses : actions/download-artifact@v4
70+ with :
71+ name : ${{ env.PROJECT_NAME }}-${{ env.VERSION }}-test-report
72+ path : artifacts/
73+
74+ - name : Upload coverage to Codecov
75+ uses : codecov/codecov-action@v5
76+ with :
77+ token : ${{ secrets.CODECOV_TOKEN }}
78+ files : ./build/reports/jacoco/test/jacocoTestReport.xml
79+ fail_ci_if_error : true
80+
81+ documentate :
82+ runs-on : ubuntu-latest
83+
84+ steps :
85+ - uses : actions/checkout@v4
86+ - name : Set up JDK 17
87+ uses : actions/setup-java@v4
88+ with :
89+ java-version : ' 17'
90+ distribution : ' temurin'
91+
92+ - name : Setup Gradle
93+ uses : gradle/actions/setup-gradle@v4
94+
95+ - name : Documentate with Gradle Wrapper
96+ run : ./gradlew documentate --no-daemon
97+
98+
99+ - name : Deploy to GitHub Pages
100+ uses : peaceiris/actions-gh-pages@v4
101+ with :
102+ github_token : ${{ secrets.GITHUB_TOKEN }}
103+ publish_dir : ./build/dokka/htmlMultiModule
104+ publish_branch : gh-pages
105+
106+ create-release :
107+ runs-on : ubuntu-latest
108+ needs :
109+ - build-jars
110+
111+ steps :
112+ - name : Checkout repository
113+ uses : actions/checkout@v4
114+
115+ - name : Extract project name from Gradle
116+ id : extract_name
117+ run : |
118+ PROJECT_NAME=$(./gradlew -q printProjectName)
119+ echo "PROJECT_NAME=${PROJECT_NAME}" >> $GITHUB_ENV
120+
121+ - name : Extract version from Gradle
122+ id : get-version
123+ run : |
124+ VERSION=$(./gradlew -q printProjectVersion)
125+ echo "VERSION=${VERSION}" >> $GITHUB_ENV
126+
127+ - name : Download jars
128+ uses : actions/download-artifact@v4
129+ with :
130+ name : ${{ env.PROJECT_NAME }}-${{ env.VERSION }}-jars
131+ path : artifacts/
132+
133+ - name : Release
134+ uses : softprops/action-gh-release@v2
135+ if : false
136+ with :
137+ tag_name : ${{ env.VERSION }}
138+ body_path : ./CHANGELOG.md
139+ files : |
140+ artifacts/*
141+
142+ publish :
143+ runs-on : ubuntu-latest
144+ needs :
145+ - create-release
146+
147+ permissions :
148+ contents : read
149+ packages : write
150+
151+ steps :
152+ - name : Checkout source
153+ uses : actions/checkout@v4
154+
155+ - name : Set up JDK 17
156+ uses : actions/setup-java@v4
157+ with :
158+ distribution : ' temurin'
159+ java-version : ' 17'
160+
161+ - name : Configure Gradle
162+ uses : gradle/gradle-build-action@v3
163+
164+ - name : Publish to GitHub Packages
165+ run : ./gradlew publish --no-daemon
166+ env :
167+ PGP_PRIVATE_KEY : ${{ secrets.PGP_PRIVATE_KEY }}
168+ PGP_PRIVATE_KEY_PASSWORD : ${{ secrets.PGP_PRIVATE_KEY_PASSWORD }}
169+ SONATYPE_USERNAME : ${{ secrets.SONATYPE_USERNAME }}
170+ SONATYPE_PASSWORD : ${{ secrets.SONATYPE_PASSWORD }}
171+ GITHUB_REPO : ${{ github.repository }}
172+ GITHUB_USERNAME : ${{ github.actor }}
173+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
174+
175+ dependency-submission :
176+ runs-on : ubuntu-latest
177+ permissions :
178+ contents : write
179+
180+ steps :
181+ - uses : actions/checkout@v4
182+ - name : Set up JDK 17
183+ uses : actions/setup-java@v4
184+ with :
185+ java-version : ' 17'
186+ distribution : ' temurin'
187+
188+ # Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies.
189+ # See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md
190+ - name : Generate and submit dependency graph
191+ uses : gradle/actions/dependency-submission@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
192+
193+ generate-git-badges :
194+ name : Generate Git Badges
195+ runs-on : ubuntu-latest
196+ permissions :
197+ contents : write
198+
199+ steps :
200+ - name : Checkout repository
201+ uses : actions/checkout@v4
202+
203+ - name : Output git info
204+ id : git_info
205+ run : |
206+ function format_size { echo $(numfmt --to iec --suffix B $1); }
207+ function format_number { LC_ALL=en_US.UTF-8 printf "%'d\n" $1; }
208+ echo "file_count=$(format_number $(git ls-files | wc -l))" >> $GITHUB_OUTPUT
209+ echo "lines_of_code=$(find . -type f -name "*.kt" -exec wc -l {} + | awk '{s+=$1} END {print s}')" >> $GITHUB_OUTPUT
210+ git gc
211+ echo "size=$(format_size $(($(git count-objects -v | grep 'size-pack: ' | sed 's/size-pack: //g' | tr -d '\n') * 1024)))" >> $GITHUB_OUTPUT
212+ shell : bash
213+
214+ - name : Generate-Badge
215+ uses : likespro/generate-badge@v1
216+ with :
217+ token : ${{ secrets.GITHUB_TOKEN }}
218+ filename : |
219+ (
220+ "git-size"
221+ "git-file-count"
222+ "git-lines-of-code"
223+ )
224+ label : ("size" "files" "lines-of-code")
225+ message : |
226+ (
227+ "${{ steps.git_info.outputs.size }}"
228+ "${{ steps.git_info.outputs.file_count }}"
229+ "${{ steps.git_info.outputs.lines_of_code }}"
230+ )
231+ namedLogo : ("git" "git" "git")
232+ color : ("f1502f" "f1502f" "f1502f")
0 commit comments