-
Notifications
You must be signed in to change notification settings - Fork 0
134 lines (111 loc) · 3.26 KB
/
ci.yml
File metadata and controls
134 lines (111 loc) · 3.26 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
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24"
- name: Run go vet
run: go vet ./...
- name: Check gofmt on tracked files
run: |
UNFORMATTED=$(gofmt -l $(git ls-files '*.go'))
if [ -n "$UNFORMATTED" ]; then
echo "Unformatted files:"
echo "$UNFORMATTED"
exit 1
fi
- name: Run golangci-lint (strict rules)
uses: golangci/golangci-lint-action@v7
with:
version: latest
args: --default=none --enable=nlreturn
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
options: >-
--health-cmd "pg_isready -U postgres"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24"
- name: Download dependencies
run: go mod download
- name: Verify dependencies
run: go mod verify
- name: Run tests with coverage
env:
DB_HOST: localhost
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: postgres
run: |
go test -v -race -coverprofile=coverage.out $(go list ./... | grep -v -e '/tmp/' -e '/build/')
- name: Check coverage percentage
run: |
COVERAGE=$(go tool cover -func=coverage.out | tail -1 | awk '{print $3}' | sed 's/%//')
echo "Coverage: $COVERAGE%"
echo "Note: Current threshold is 60%. Target is 85%+ as crypto and db packages get full integration tests."
if (( $(echo "$COVERAGE < 60.0" | bc -l) )); then
echo "❌ Coverage $COVERAGE% is below 60% threshold"
exit 1
else
echo "✅ Coverage $COVERAGE% meets the 60% threshold"
fi
- name: Generate coverage report
run: go tool cover -html=coverage.out -o coverage.html
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
continue-on-error: true
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage.out
flags: unittests
name: codecov-hatmax
verbose: true
- name: Upload coverage artifacts
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage.html
build:
runs-on: ubuntu-latest
needs: [lint, test]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24"
- name: Build
run: go build -v ./...
- name: Test build works
run: |
echo "Build successful ✅"
go version