22
33on :
44 push :
5- branches : [ "master", "develop" ]
5+ branches : [ "master", "develop" ]
66 tags :
77 - " v*.*.*"
88 pull_request :
1616 contents : write
1717 strategy :
1818 matrix :
19- go : [1.21.x, 1.22.x, 1.23.x, 1.24.x]
19+ go :
20+ - 1.21.x
21+ - 1.22.x
22+ - 1.23.x
23+ - 1.24.x
2024
2125 steps :
2226 - uses : actions/checkout@v4
@@ -37,20 +41,171 @@ jobs:
3741 - name : Build
3842 run : go build -v ./...
3943
40- - name : Run tests
41- run : go test -v -race -coverprofile=coverage.out ./...
44+ - name : Run tests with enhanced reporting
45+ id : test
46+ run : |
47+ echo "## 🔧 Test Environment" >> $GITHUB_STEP_SUMMARY
48+ echo "- **Go Version:** ${{ matrix.go }}" >> $GITHUB_STEP_SUMMARY
49+ echo "- **OS:** ubuntu-latest" >> $GITHUB_STEP_SUMMARY
50+ echo "- **Timestamp:** $(date -u)" >> $GITHUB_STEP_SUMMARY
51+ echo "" >> $GITHUB_STEP_SUMMARY
52+
53+ echo "Running tests with coverage..."
54+ go test -v -race -coverprofile=coverage.out ./... 2>&1 | tee test-output.log
55+
56+ # Extract test results for summary
57+ TEST_STATUS=$?
58+ TOTAL_TESTS=$(grep -c "=== RUN" test-output.log || echo "0")
59+ PASSED_TESTS=$(grep -c "--- PASS:" test-output.log || echo "0")
60+ FAILED_TESTS=$(grep -c "--- FAIL:" test-output.log || echo "0")
61+ SKIPPED_TESTS=$(grep -c "--- SKIP:" test-output.log || echo "0")
62+
63+ # Generate test summary
64+ echo "## 🧪 Test Results (Go ${{ matrix.go }})" >> $GITHUB_STEP_SUMMARY
65+ echo "" >> $GITHUB_STEP_SUMMARY
66+ echo "| Metric | Value |" >> $GITHUB_STEP_SUMMARY
67+ echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
68+ echo "| Total Tests | $TOTAL_TESTS |" >> $GITHUB_STEP_SUMMARY
69+ echo "| Passed | ✅ $PASSED_TESTS |" >> $GITHUB_STEP_SUMMARY
70+ echo "| Failed | ❌ $FAILED_TESTS |" >> $GITHUB_STEP_SUMMARY
71+ echo "| Skipped | ⏭️ $SKIPPED_TESTS |" >> $GITHUB_STEP_SUMMARY
72+ echo "| Status | $([ $TEST_STATUS -eq 0 ] && echo "✅ PASSED" || echo "❌ FAILED") |" >> $GITHUB_STEP_SUMMARY
73+ echo "" >> $GITHUB_STEP_SUMMARY
74+
75+ # Add package breakdown
76+ echo "### 📦 Package Test Results" >> $GITHUB_STEP_SUMMARY
77+ echo "" >> $GITHUB_STEP_SUMMARY
78+ echo "| Package | Status |" >> $GITHUB_STEP_SUMMARY
79+ echo "|---------|--------|" >> $GITHUB_STEP_SUMMARY
80+
81+ # Extract package results
82+ grep "^ok\|^FAIL" test-output.log | while read line; do
83+ if [[ $line == ok* ]]; then
84+ pkg=$(echo $line | awk '{print $2}')
85+ echo "| $pkg | ✅ PASS |" >> $GITHUB_STEP_SUMMARY
86+ elif [[ $line == FAIL* ]]; then
87+ pkg=$(echo $line | awk '{print $2}')
88+ echo "| $pkg | ❌ FAIL |" >> $GITHUB_STEP_SUMMARY
89+ fi
90+ done
91+
92+ echo "" >> $GITHUB_STEP_SUMMARY
93+
94+ # Add detailed results if tests failed
95+ if [ $TEST_STATUS -ne 0 ]; then
96+ echo "### ❌ Failed Tests Details" >> $GITHUB_STEP_SUMMARY
97+ echo "" >> $GITHUB_STEP_SUMMARY
98+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
99+ grep -A 10 "--- FAIL:" test-output.log | head -100 >> $GITHUB_STEP_SUMMARY
100+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
101+ echo "" >> $GITHUB_STEP_SUMMARY
102+ fi
103+
104+ # Set outputs for other steps
105+ echo "test-status=$TEST_STATUS" >> $GITHUB_OUTPUT
106+ echo "total-tests=$TOTAL_TESTS" >> $GITHUB_OUTPUT
107+ echo "passed-tests=$PASSED_TESTS" >> $GITHUB_OUTPUT
108+ echo "failed-tests=$FAILED_TESTS" >> $GITHUB_OUTPUT
109+
110+ # Exit with the original test status
111+ exit $TEST_STATUS
112+
113+ - name : Generate coverage report
114+ if : always()
115+ run : |
116+ if [ -f coverage.out ]; then
117+ go tool cover -html=coverage.out -o coverage.html
118+ COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print $3}')
119+
120+ echo "## 📊 Code Coverage (Go ${{ matrix.go }})" >> $GITHUB_STEP_SUMMARY
121+ echo "" >> $GITHUB_STEP_SUMMARY
122+ echo "**Total Coverage: $COVERAGE**" >> $GITHUB_STEP_SUMMARY
123+ echo "" >> $GITHUB_STEP_SUMMARY
124+
125+ # Add coverage by package
126+ echo "### 📋 Coverage by Package" >> $GITHUB_STEP_SUMMARY
127+ echo "" >> $GITHUB_STEP_SUMMARY
128+ echo "| Package | Coverage |" >> $GITHUB_STEP_SUMMARY
129+ echo "|---------|----------|" >> $GITHUB_STEP_SUMMARY
130+
131+ go tool cover -func=coverage.out | grep -v total | while read line; do
132+ if [[ $line == *".go:"* ]]; then
133+ pkg=$(echo $line | awk '{print $1}' | cut -d'/' -f1-3)
134+ coverage=$(echo $line | awk '{print $3}')
135+ echo "| $pkg | $coverage |" >> $GITHUB_STEP_SUMMARY
136+ fi
137+ done | sort -u
138+
139+ echo "" >> $GITHUB_STEP_SUMMARY
140+ else
141+ echo "## ⚠️ Coverage Report" >> $GITHUB_STEP_SUMMARY
142+ echo "No coverage file generated" >> $GITHUB_STEP_SUMMARY
143+ echo "" >> $GITHUB_STEP_SUMMARY
144+ fi
145+
146+ - name : Upload test artifacts
147+ if : failure()
148+ uses : actions/upload-artifact@v4
149+ with :
150+ name : test-results-go-${{ matrix.go }}
151+ path : |
152+ test-output.log
153+ coverage.out
154+ coverage.html
155+ retention-days : 7
42156
43157 - name : Run go vet
44- run : go vet ./...
158+ run : |
159+ echo "## 🔍 Static Analysis (Go ${{ matrix.go }})" >> $GITHUB_STEP_SUMMARY
160+ echo "" >> $GITHUB_STEP_SUMMARY
161+
162+ VET_OUTPUT=$(go vet ./... 2>&1 || echo "")
163+ VET_STATUS=$?
164+
165+ if [ $VET_STATUS -eq 0 ]; then
166+ echo "✅ **go vet:** No issues found" >> $GITHUB_STEP_SUMMARY
167+ else
168+ echo "❌ **go vet:** Issues found" >> $GITHUB_STEP_SUMMARY
169+ echo "" >> $GITHUB_STEP_SUMMARY
170+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
171+ echo "$VET_OUTPUT" >> $GITHUB_STEP_SUMMARY
172+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
173+ fi
174+ echo "" >> $GITHUB_STEP_SUMMARY
175+
176+ exit $VET_STATUS
45177
46178 - name : Run go fmt
47179 run : |
48- if [ "$(gofmt -s -l . | wc -l)" -gt 0 ]; then
49- echo "The following files are not formatted:"
50- gofmt -s -l .
180+ FMT_OUTPUT=$(gofmt -s -l . 2>&1 || echo "")
181+
182+ if [ -z "$FMT_OUTPUT" ]; then
183+ echo "✅ **go fmt:** All files properly formatted" >> $GITHUB_STEP_SUMMARY
184+ else
185+ echo "❌ **go fmt:** Files need formatting" >> $GITHUB_STEP_SUMMARY
186+ echo "" >> $GITHUB_STEP_SUMMARY
187+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
188+ echo "$FMT_OUTPUT" >> $GITHUB_STEP_SUMMARY
189+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
190+ echo "" >> $GITHUB_STEP_SUMMARY
51191 exit 1
52192 fi
53193
194+ - name : Job Summary
195+ if : always()
196+ run : |
197+ echo "## 📋 Job Summary (Go ${{ matrix.go }})" >> $GITHUB_STEP_SUMMARY
198+ echo "" >> $GITHUB_STEP_SUMMARY
199+ echo "| Step | Status |" >> $GITHUB_STEP_SUMMARY
200+ echo "|------|--------|" >> $GITHUB_STEP_SUMMARY
201+ echo "| Dependencies | ✅ Success |" >> $GITHUB_STEP_SUMMARY
202+ echo "| Build | ✅ Success |" >> $GITHUB_STEP_SUMMARY
203+ echo "| Tests | ${{ steps.test.outcome == 'success' && '✅ Success' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
204+ echo "| Coverage | ${{ job.status == 'success' && '✅ Generated' || '⚠️ Partial' }} |" >> $GITHUB_STEP_SUMMARY
205+ echo "| Static Analysis | ${{ job.status == 'success' && '✅ Clean' || '❌ Issues' }} |" >> $GITHUB_STEP_SUMMARY
206+ echo "| Code Formatting | ${{ job.status == 'success' && '✅ Clean' || '❌ Issues' }} |" >> $GITHUB_STEP_SUMMARY
207+ echo "" >> $GITHUB_STEP_SUMMARY
208+
54209 - name : Upload coverage reports to Codecov
55210 uses : codecov/codecov-action@v5
56211 with :
81236 fail-on-severity : moderate
82237 comment-summary-in-pr : always
83238
84- # # Use comma-separated names to pass list arguments:
85- # deny-licenses: LGPL-2.0, BSD-2-Clause
86-
87239 release :
88240 name : Release
89241 runs-on : ubuntu-latest
@@ -103,7 +255,26 @@ jobs:
103255 check-latest : true
104256
105257 - name : Run tests
106- run : go test -v ./...
258+ run : |
259+ echo "## 🚀 Release Tests" >> $GITHUB_STEP_SUMMARY
260+ echo "" >> $GITHUB_STEP_SUMMARY
261+
262+ go test -v ./... 2>&1 | tee release-test-output.log
263+ TEST_STATUS=$?
264+
265+ TOTAL_TESTS=$(grep -c "=== RUN" release-test-output.log || echo "0")
266+ PASSED_TESTS=$(grep -c "--- PASS:" release-test-output.log || echo "0")
267+ FAILED_TESTS=$(grep -c "--- FAIL:" release-test-output.log || echo "0")
268+
269+ echo "| Metric | Value |" >> $GITHUB_STEP_SUMMARY
270+ echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
271+ echo "| Total Tests | $TOTAL_TESTS |" >> $GITHUB_STEP_SUMMARY
272+ echo "| Passed | ✅ $PASSED_TESTS |" >> $GITHUB_STEP_SUMMARY
273+ echo "| Failed | ❌ $FAILED_TESTS |" >> $GITHUB_STEP_SUMMARY
274+ echo "| Status | $([ $TEST_STATUS -eq 0 ] && echo "✅ PASSED" || echo "❌ FAILED") |" >> $GITHUB_STEP_SUMMARY
275+ echo "" >> $GITHUB_STEP_SUMMARY
276+
277+ exit $TEST_STATUS
107278
108279 - name : Install UPX
109280 run : |
@@ -112,6 +283,9 @@ jobs:
112283
113284 - name : Build binaries
114285 run : |
286+ echo "## 🔨 Build Process" >> $GITHUB_STEP_SUMMARY
287+ echo "" >> $GITHUB_STEP_SUMMARY
288+
115289 # Set the build time environment variable
116290 BUILD_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
117291
@@ -121,20 +295,31 @@ jobs:
121295 # Display help information for the build script
122296 ./scripts/build.sh --help
123297
298+ echo "**Build Configuration:**" >> $GITHUB_STEP_SUMMARY
299+ echo "- Version: ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
300+ echo "- Build Time: $BUILD_TIME" >> $GITHUB_STEP_SUMMARY
301+ echo "- Git Commit: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
302+ echo "" >> $GITHUB_STEP_SUMMARY
303+
124304 # Build for all platforms
125305 ./scripts/build.sh \
126306 --verbose \
127307 -ldflags "-s -w -X github.com/kjanat/articulate-parser/internal/version.Version=${{ github.ref_name }} -X github.com/kjanat/articulate-parser/internal/version.BuildTime=$BUILD_TIME -X github.com/kjanat/articulate-parser/internal/version.GitCommit=${{ github.sha }}"
128308
129309 - name : Compress binaries with UPX
130310 run : |
311+ echo "## 📦 Binary Compression" >> $GITHUB_STEP_SUMMARY
312+ echo "" >> $GITHUB_STEP_SUMMARY
313+
131314 echo "Compressing binaries with UPX..."
132315 cd build/
133316
134317 # Get original sizes
135- echo "Original sizes:"
136- ls -lah
137- echo ""
318+ echo "**Original sizes:**" >> $GITHUB_STEP_SUMMARY
319+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
320+ ls -lah >> $GITHUB_STEP_SUMMARY
321+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
322+ echo "" >> $GITHUB_STEP_SUMMARY
138323
139324 # Compress all binaries except Darwin (macOS) binaries as UPX doesn't work well with recent macOS versions
140325 for binary in articulate-parser-*; do
@@ -148,16 +333,16 @@ jobs:
148333 fi
149334 done
150335
151- echo ""
152- echo "Final sizes:"
153- ls -lah
336+ echo "**Final sizes:**" >> $GITHUB_STEP_SUMMARY
337+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
338+ ls -lah >> $GITHUB_STEP_SUMMARY
339+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
340+ echo "" >> $GITHUB_STEP_SUMMARY
154341
155342 - name : Upload a Build Artifact
156343157344 with :
158- # Artifact name
159- name : build-artifacts # optional, default is artifact
160- # A file, directory or wildcard pattern that describes what to upload
345+ name : build-artifacts
161346 path : build/
162347 if-no-files-found : ignore
163348 retention-days : 1
0 commit comments