Skip to content

Commit 29bef8d

Browse files
committed
WIP: unit-tests workflow: Initial commit for unit-tests.yml
1 parent 2bbd08b commit 29bef8d

File tree

3 files changed

+285
-166
lines changed

3 files changed

+285
-166
lines changed

.github/workflows/test.yml

Lines changed: 14 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -2,131 +2,14 @@ name: Test
22

33
on:
44
push:
5-
branches:
6-
- '**'
5+
branches: [main, develop]
76
pull_request:
8-
branches:
9-
- '**'
7+
branches: [main, develop]
108

119
jobs:
12-
# Run Go unit tests across all packages
13-
unit-tests:
14-
runs-on: ubuntu-latest
15-
16-
steps:
17-
- name: Checkout code
18-
uses: actions/checkout@v4
19-
20-
- name: Set up Go
21-
uses: actions/setup-go@v5
22-
with:
23-
go-version: '1.22'
24-
cache: true
25-
cache-dependency-path: src/go.sum
26-
27-
- name: Download dependencies
28-
working-directory: src
29-
run: go mod download
30-
31-
- name: Run unit tests with coverage
32-
working-directory: src
33-
run: |
34-
echo "🧪 Running unit tests across all packages..."
35-
36-
# Run tests with coverage and verbose output
37-
go test -v -race -coverprofile=coverage.out -covermode=atomic ./... 2>&1 | tee test-output.txt
38-
39-
# Check exit code
40-
TEST_EXIT_CODE=${PIPESTATUS[0]}
41-
42-
# Generate coverage report
43-
echo ""
44-
echo "📊 Coverage Report:"
45-
go tool cover -func=coverage.out | tail -20
46-
47-
# Extract total coverage
48-
TOTAL_COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print $3}')
49-
echo ""
50-
echo "📈 Total Coverage: $TOTAL_COVERAGE"
51-
52-
exit $TEST_EXIT_CODE
53-
54-
- name: Generate coverage HTML report
55-
if: always()
56-
working-directory: src
57-
run: |
58-
if [ -f coverage.out ]; then
59-
go tool cover -html=coverage.out -o coverage.html
60-
echo "✅ Coverage HTML report generated"
61-
fi
62-
63-
- name: Upload coverage report
64-
if: always()
65-
uses: actions/upload-artifact@v4
66-
with:
67-
name: coverage-report
68-
path: |
69-
src/coverage.out
70-
src/coverage.html
71-
retention-days: 7
72-
73-
- name: Upload test output
74-
if: always()
75-
uses: actions/upload-artifact@v4
76-
with:
77-
name: test-output
78-
path: src/test-output.txt
79-
retention-days: 7
80-
81-
- name: Generate test summary
82-
if: always()
83-
working-directory: src
84-
run: |
85-
echo "## 🧪 Unit Test Results" >> $GITHUB_STEP_SUMMARY
86-
echo "" >> $GITHUB_STEP_SUMMARY
87-
88-
# Count test results
89-
if [ -f test-output.txt ]; then
90-
PASSED=$(grep -c "^--- PASS" test-output.txt || echo "0")
91-
FAILED=$(grep -c "^--- FAIL" test-output.txt || echo "0")
92-
SKIPPED=$(grep -c "^--- SKIP" test-output.txt || echo "0")
93-
94-
echo "| Metric | Count |" >> $GITHUB_STEP_SUMMARY
95-
echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
96-
echo "| ✅ Passed | $PASSED |" >> $GITHUB_STEP_SUMMARY
97-
echo "| ❌ Failed | $FAILED |" >> $GITHUB_STEP_SUMMARY
98-
echo "| ⏭️ Skipped | $SKIPPED |" >> $GITHUB_STEP_SUMMARY
99-
echo "" >> $GITHUB_STEP_SUMMARY
100-
fi
101-
102-
# Add coverage info
103-
if [ -f coverage.out ]; then
104-
TOTAL_COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print $3}')
105-
echo "### 📊 Code Coverage: $TOTAL_COVERAGE" >> $GITHUB_STEP_SUMMARY
106-
echo "" >> $GITHUB_STEP_SUMMARY
107-
108-
echo "<details>" >> $GITHUB_STEP_SUMMARY
109-
echo "<summary>Coverage by package</summary>" >> $GITHUB_STEP_SUMMARY
110-
echo "" >> $GITHUB_STEP_SUMMARY
111-
echo '```' >> $GITHUB_STEP_SUMMARY
112-
go tool cover -func=coverage.out >> $GITHUB_STEP_SUMMARY
113-
echo '```' >> $GITHUB_STEP_SUMMARY
114-
echo "</details>" >> $GITHUB_STEP_SUMMARY
115-
fi
116-
117-
# List failed tests if any
118-
if [ -f test-output.txt ] && grep -q "^--- FAIL" test-output.txt; then
119-
echo "" >> $GITHUB_STEP_SUMMARY
120-
echo "### ❌ Failed Tests" >> $GITHUB_STEP_SUMMARY
121-
echo '```' >> $GITHUB_STEP_SUMMARY
122-
grep "^--- FAIL" test-output.txt >> $GITHUB_STEP_SUMMARY || true
123-
echo '```' >> $GITHUB_STEP_SUMMARY
124-
fi
125-
12610
build-test:
12711
runs-on: ubuntu-latest
128-
needs: unit-tests
129-
12+
13013
strategy:
13114
matrix:
13215
include:
@@ -136,7 +19,7 @@ jobs:
13619
- image_name: kimia-bud
13720
dockerfile: Dockerfile.buildah
13821
description: "Kimia-Bud (Buildah)"
139-
22+
14023
steps:
14124
- name: Checkout code
14225
uses: actions/checkout@v4
@@ -348,64 +231,40 @@ jobs:
348231
# Integration test summary
349232
test-summary:
350233
runs-on: ubuntu-latest
351-
needs: [unit-tests, build-test, kubernetes-test]
234+
needs: [build-test, kubernetes-test]
352235
if: always()
353-
236+
354237
steps:
355238
- name: Check test results
356239
run: |
357-
UNIT_STATUS="${{ needs.unit-tests.result }}"
358240
BUILD_STATUS="${{ needs.build-test.result }}"
359241
K8S_STATUS="${{ needs.kubernetes-test.result }}"
360-
361-
echo "## 🧪 Test Results Summary" >> $GITHUB_STEP_SUMMARY
242+
243+
echo "## 🧪 Test Results" >> $GITHUB_STEP_SUMMARY
362244
echo "" >> $GITHUB_STEP_SUMMARY
363245
echo "| Test Suite | Status |" >> $GITHUB_STEP_SUMMARY
364246
echo "|------------|--------|" >> $GITHUB_STEP_SUMMARY
365-
366-
if [[ "$UNIT_STATUS" == "success" ]]; then
367-
echo "| Unit Tests | ✅ Passed |" >> $GITHUB_STEP_SUMMARY
368-
elif [[ "$UNIT_STATUS" == "skipped" ]]; then
369-
echo "| Unit Tests | ⏭️ Skipped |" >> $GITHUB_STEP_SUMMARY
370-
else
371-
echo "| Unit Tests | ❌ Failed |" >> $GITHUB_STEP_SUMMARY
372-
fi
373-
247+
374248
if [[ "$BUILD_STATUS" == "success" ]]; then
375249
echo "| Build Tests | ✅ Passed |" >> $GITHUB_STEP_SUMMARY
376-
elif [[ "$BUILD_STATUS" == "skipped" ]]; then
377-
echo "| Build Tests | ⏭️ Skipped |" >> $GITHUB_STEP_SUMMARY
378250
else
379251
echo "| Build Tests | ❌ Failed |" >> $GITHUB_STEP_SUMMARY
380252
fi
381-
253+
382254
if [[ "$K8S_STATUS" == "success" ]]; then
383255
echo "| Kubernetes Tests | ✅ Passed |" >> $GITHUB_STEP_SUMMARY
384256
elif [[ "$K8S_STATUS" == "skipped" ]]; then
385-
echo "| Kubernetes Tests | ⏭️ Skipped (not a PR) |" >> $GITHUB_STEP_SUMMARY
257+
echo "| Kubernetes Tests | ⏭️ Skipped (not a PR) |" >> $GITHUB_STEP_SUMMARY
386258
else
387259
echo "| Kubernetes Tests | ❌ Failed |" >> $GITHUB_STEP_SUMMARY
388260
fi
389-
261+
390262
echo "" >> $GITHUB_STEP_SUMMARY
391263
echo "### Images Tested" >> $GITHUB_STEP_SUMMARY
392264
echo "- **kimia** (BuildKit-based)" >> $GITHUB_STEP_SUMMARY
393265
echo "- **kimia-bud** (Buildah-based)" >> $GITHUB_STEP_SUMMARY
394-
395-
echo "" >> $GITHUB_STEP_SUMMARY
396-
echo "### Test Packages" >> $GITHUB_STEP_SUMMARY
397-
echo "- \`cmd/kimia\` - CLI argument parsing, version, help" >> $GITHUB_STEP_SUMMARY
398-
echo "- \`internal/auth\` - Registry authentication" >> $GITHUB_STEP_SUMMARY
399-
echo "- \`internal/build\` - Build execution, Git handling" >> $GITHUB_STEP_SUMMARY
400-
echo "- \`internal/preflight\` - Environment validation" >> $GITHUB_STEP_SUMMARY
401-
402-
# Fail if unit tests or build tests failed
403-
if [[ "$UNIT_STATUS" != "success" ]]; then
404-
echo "" >> $GITHUB_STEP_SUMMARY
405-
echo "❌ **Unit tests failed - please fix before merging**" >> $GITHUB_STEP_SUMMARY
406-
exit 1
407-
fi
408-
266+
267+
# Fail if build tests failed
409268
if [[ "$BUILD_STATUS" != "success" ]]; then
410269
echo "" >> $GITHUB_STEP_SUMMARY
411270
echo "❌ **Build tests failed - please fix before merging**" >> $GITHUB_STEP_SUMMARY

0 commit comments

Comments
 (0)