-
Notifications
You must be signed in to change notification settings - Fork 8
224 lines (189 loc) · 8.44 KB
/
release.yml
File metadata and controls
224 lines (189 loc) · 8.44 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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
name: Maven Java Release with Test Coverage Control
on:
push:
#branches:
# - main
tags:
- 'v*'
pull_request:
branches:
- main
jobs:
build:
name: Check and Generate Release
runs-on: ubuntu-latest
permissions:
contents: read
issues: read
checks: write
pull-requests: write
steps:
- name: Configure Long Paths for Git
#run: sudo git config --global core.longpaths true
run: sudo git config --system core.longpaths true
shell: bash
- name: Checkout Source Code from Github
uses: actions/checkout@v3
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
- name: Setup Java
uses: actions/setup-java@v3
with:
distribution: 'temurin' # See 'Supported distributions' for available options
java-version: '17'
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install Doxygen
run: sudo apt-get install doxygen -y
shell: bash
- name: Install LCOV
run: sudo apt-get install lcov
shell: bash
- name: Install coverxygen
run: pip3 install coverxygen
shell: bash
- name: Install libxml2-utils
run: sudo apt-get install -y libxml2-utils
shell: bash
- name: Perform Maven clean, test, and packaging
run: mvn clean test package
working-directory: ./calculator-app
- name: Generate Folders
run: |
currentDir=$(pwd)
mkdir -p $currentDir/target/site/assets
mkdir -p $currentDir/target/site/coverxygen
mkdir -p $currentDir/target/site/doxygen
mkdir -p $currentDir/target/site/coveragereport
working-directory: ./calculator-app
- name: Check Test Coverage
run: |
# Parse the JaCoCo XML report and check coverage percentage
covered=$(xmllint --xpath "string(//counter[@type='INSTRUCTION']/@covered)" target/site/jacoco/jacoco.xml)
missed=$(xmllint --xpath "string(//counter[@type='INSTRUCTION']/@missed)" target/site/jacoco/jacoco.xml)
total=$((covered + missed))
coverage_percentage=$(awk "BEGIN { print ($covered / $total) * 100 }")
# Check if coverage is 100%
if (( $(echo "$coverage_percentage == 100" | bc -l) )); then
echo "Test coverage is 100%!"
else
echo "Test coverage is not 100%."
exit 1 # Fail the GitHub Actions workflow
fi
echo "Coverage Percentage: $coverage_percentage"
echo "Covered: $covered"
echo "Missed: $missed"
working-directory: ./calculator-app
- name: Install ReportGenerator
run: dotnet tool install -g dotnet-reportgenerator-globaltool
- name: Generate Doxygen HTML and XML Documentation
run: doxygen Doxyfile
shell: bash
- name: Generate ReportGenerator HTML Report
run: |
reportgenerator "-reports:target/site/jacoco/jacoco.xml" "-sourcedirs:src/main/java" "-targetdir:target/site/coveragereport" -reporttypes:Html
reportgenerator "-reports:target/site/jacoco/jacoco.xml" "-sourcedirs:src/main/java" "-targetdir:target/site/coveragereport" -reporttypes:Badges
working-directory: ./calculator-app
- name: Run Coverxygen
run: |
currentDir=$(pwd)
mkdir -p $currentDir/calculator-app/target/site/coverxygen
python -m coverxygen --xml-dir $currentDir/calculator-app/target/site/doxygen/xml --src-dir $currentDir --format lcov --output $currentDir/calculator-app/target/site/coverxygen/lcov.info --prefix $currentDir/calculator-app/
- name: Run genhtml
run: genhtml ./calculator-app/target/site/coverxygen/lcov.info --legend --title "Documentation Coverage Report" -o calculator-app/target/site/coverxygen
- name: Copy Folders
run: |
cp "calculator-app/target/site/coveragereport/badge_combined.svg" "assets/badge_combined.svg"
cp "calculator-app/target/site/coveragereport/badge_combined.svg" "assets/badge_combined.svg"
cp "calculator-app/target/site/coveragereport/badge_branchcoverage.svg" "assets/badge_branchcoverage.svg"
cp "calculator-app/target/site/coveragereport/badge_linecoverage.svg" "assets/badge_linecoverage.svg"
cp "calculator-app/target/site/coveragereport/badge_methodcoverage.svg" "assets/badge_methodcoverage.svg"
cp "assets/rteu_logo.jpg" "calculator-app/src/site/resources/images/rteu_logo.jpg"
cp README.md "calculator-app/src/site/markdown/readme.md"
cp -r ./assets/ ./calculator-app/src/site/resources
shell: bash
- name: Perform Maven site generation
run: mvn site
working-directory: ./calculator-app
#- name: Archive Coverage Report
# uses: actions/upload-artifact@v2
# with:
# name: coverage-report
# path: coveragereport
- name: Get Commit Summary
id: commit_summary
run: echo "::set-output name=summary::$(git log --format=%B -n 10 ${{ github.sha }})"
- name: Create Release
id: create_common_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.MAVEN_TEMPLATE_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body: |
Changes in this release:
${{ steps.commit_summary.outputs.summary }}
Asst. Prof. Dr. Ugur CORUH
draft: false
prerelease: false
- name: Compress Test Coverage Report
run: tar -czvf test-coverage-report.tar.gz -C calculator-app/target/site/coveragereport .
- name: Compress Doc Coverage Report
run: tar -czvf doc-coverage-report.tar.gz -C calculator-app/target/site/coverxygen .
- name: Compress Doxygen Documentation
run: tar -czvf app-documents.tar.gz -C calculator-app/target/site/doxygen .
- name: Compress Web Site
run: tar -czvf app-website.tar.gz -C calculator-app/target/site .
- name: Upload release asset
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_common_release.outputs.upload_url }}
asset_path: ./calculator-app/target/calculator-app-1.0-SNAPSHOT.jar
asset_name: calculator.jar
asset_content_type: application/jar
env:
GITHUB_TOKEN: ${{ secrets.MAVEN_TEMPLATE_TOKEN }}
- name: Upload Test Coverage Report
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_common_release.outputs.upload_url }}
asset_path: ./test-coverage-report.tar.gz
asset_name: test-coverage-report.tar.gz
asset_content_type: application/gzip
env:
GITHUB_TOKEN: ${{ secrets.MAVEN_TEMPLATE_TOKEN }}
- name: Upload Doc Coverage Report
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_common_release.outputs.upload_url }}
asset_path: ./doc-coverage-report.tar.gz
asset_name: doc-coverage-report.tar.gz
asset_content_type: application/gzip
env:
GITHUB_TOKEN: ${{ secrets.MAVEN_TEMPLATE_TOKEN }}
- name: Upload Doxygen Documentation
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_common_release.outputs.upload_url }}
asset_path: ./app-documents.tar.gz
asset_name: app-documents.tar.gz
asset_content_type: application/gzip
env:
GITHUB_TOKEN: ${{ secrets.MAVEN_TEMPLATE_TOKEN }}
- name: Upload Web Site
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_common_release.outputs.upload_url }}
asset_path: ./app-website.tar.gz
asset_name: app-website.tar.gz
asset_content_type: application/gzip
env:
GITHUB_TOKEN: ${{ secrets.MAVEN_TEMPLATE_TOKEN }}
- name: Deploy Web Site
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.MAVEN_TEMPLATE_TOKEN }}
publish_dir: ./calculator-app/target/site