-
Notifications
You must be signed in to change notification settings - Fork 4
142 lines (120 loc) · 3.42 KB
/
Copy pathci.yml
File metadata and controls
142 lines (120 loc) · 3.42 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
name: CI
on:
push:
branches: [master]
pull_request:
jobs:
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
cache-dependency-path: go.sum
- name: Run tests with coverage
run: go test -coverprofile=coverage.out -covermode=atomic ./...
- name: Generate coverage summary
run: |
{
echo "## Test Coverage Report"
echo ""
} >> "$GITHUB_STEP_SUMMARY"
# Get overall coverage
COVERAGE=$(go tool cover -func=coverage.out | \
grep total | \
awk '{print $3}' \
)
{
echo "**Overall Coverage:** $COVERAGE"
echo ""
echo "### Coverage by Package"
echo ""
echo "| Package | Coverage |"
echo "|---------|----------|"
go tool cover -func=coverage.out | \
grep -v "total:" | \
awk '{print "| " $1 " " $2 " | " $3 " |"}'
} >> "$GITHUB_STEP_SUMMARY"
- name: Upload coverage to artifacts
uses: actions/upload-artifact@v7
with:
name: coverage-report
path: coverage.out
vet:
name: Vet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
cache-dependency-path: go.sum
- name: Run go vet
run: go vet ./...
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
cache-dependency-path: go.sum
- name: Install golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.11.3
- name: Run golangci-lint
run: golangci-lint run ./...
gomod:
name: Go Mod Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
cache-dependency-path: go.sum
- name: Run go mod tidy
run: go mod tidy
- name: Check for changes
run: |
git diff --exit-code go.mod go.sum || (
echo "go.mod or go.sum has uncommitted changes after 'go mod tidy'"
exit 1
)
build:
name: Build Binary
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Build binary target
run: |
docker buildx build . \
--target binary \
--output type=local,dest=build \
--cache-from type=gha \
--cache-to type=gha,mode=max
passed:
name: CI passed
needs: [test, vet, lint, gomod, build]
runs-on: ubuntu-latest
if: always()
steps:
- name: Check all jobs succeeded
run: |
if [ "${{ needs.test.result }}" != "success" ] || \
[ "${{ needs.vet.result }}" != "success" ] || \
[ "${{ needs.lint.result }}" != "success" ] || \
[ "${{ needs.gomod.result }}" != "success" ] || \
[ "${{ needs.build.result }}" != "success" ]; then
echo "❌ One or more CI jobs failed"
exit 1
fi
echo "✅ CI passed"