-
Notifications
You must be signed in to change notification settings - Fork 1
136 lines (111 loc) · 4.2 KB
/
Copy pathci.yaml
File metadata and controls
136 lines (111 loc) · 4.2 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
name: CI
on:
pull_request:
branches:
- "*"
push:
branches:
- prod
- main
- master
- dev
env:
GO_VERSION: "1.25.x"
NODE_VERSION: "24"
jobs:
go-server:
name: Go Server CI
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./apps/server
services:
postgres:
image: postgres:18
env:
POSTGRES_USER: coderz-space
POSTGRES_PASSWORD: coderz-space
POSTGRES_DB: coderz
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v4
# ✅ Go setup (aligned with go.mod)
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: apps/server/go.sum
- name: Install dependencies
run: go mod download
- name: Verify dependencies
run: go mod verify
- name: Run go vet
run: go vet ./...
# ✅ staticcheck built with correct Go version
- name: Install staticcheck
run: go install honnef.co/go/tools/cmd/staticcheck@latest
- name: Run staticcheck
run: staticcheck ./...
# ✅ revive linter
- name: Install revive
run: go install github.com/mgechev/revive@latest
- name: Run revive
run: revive -config revive.toml -formatter friendly ./...
# ✅ Test env
- name: Setup test environment
run: |
touch .env.test
echo "DB_URL=postgresql://coderz-space:coderz-space@localhost:5432/coderz?sslmode=disable" >> .env.test
echo "DB_DSN=postgresql://coderz-space:coderz-space@localhost:5432/coderz?sslmode=disable" >> .env.test
# ✅ DB migrations
- name: Run migrations
run: |
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
migrate -path ./db/migrations -database "postgresql://coderz-space:coderz-space@localhost:5432/coderz?sslmode=disable" up
# ✅ Tests
- name: Run tests
env:
DB_URL: postgresql://coderz-space:coderz-space@localhost:5432/coderz?sslmode=disable
run: go test -v -race -coverprofile=coverage.out -covermode=atomic ./...
# ✅ Coverage upload
- name: Upload coverage
uses: codecov/codecov-action@v5
with:
files: ./apps/server/coverage.out
flags: go-server
fail_ci_if_error: false
# ✅ Build
- name: Build binary
run: go build -v -o bin/main ./cmd/main.go
# ✅ Swagger
- name: Install swag
run: go install github.com/swaggo/swag/cmd/swag@latest
- name: Generate Swagger docs
run: swag init -o ./swagger --parseDependency --parseInternal -g cmd/main.go
- name: Verify Swagger docs
run: test -f swagger/swagger.json && test -f swagger/swagger.yaml
docker-build:
name: Docker Build
runs-on: ubuntu-latest
needs: go-server
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker image
uses: docker/build-push-action@v6
with:
context: ./apps/server
file: ./apps/server/dockerfile
push: false
tags: coderz-space-server:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max