55 branches : [ main, develop ]
66 pull_request :
77 branches : [ main, develop ]
8- release :
9- types : [ published ]
108
119env :
1210 GO_VERSION : ' 1.25'
13- REGISTRY : ghcr.io
14- IMAGE_NAME : ${{ github.repository }}
1511
1612jobs :
1713 test :
18- name : Test
14+ name : Test & Build
1915 runs-on : ubuntu-latest
20- strategy :
21- matrix :
22- go-version : ['1.25']
2316
2417 steps :
2518 - name : Checkout code
@@ -28,17 +21,17 @@ jobs:
2821 - name : Set up Go
2922 uses : actions/setup-go@v4
3023 with :
31- go-version : ${{ matrix.go-version }}
24+ go-version : ${{ env.GO_VERSION }}
3225
3326 - name : Cache Go modules
3427 uses : actions/cache@v3
3528 with :
3629 path : |
3730 ~/.cache/go-build
3831 ~/go/pkg/mod
39- key : ${{ runner.os }}-go-${{ matrix.go-version }}-${{ hashFiles('**/go.sum') }}
32+ key : ${{ runner.os }}-go-${{ env.GO_VERSION }}-${{ hashFiles('**/go.sum') }}
4033 restore-keys : |
41- ${{ runner.os }}-go-${{ matrix.go-version }}-
34+ ${{ runner.os }}-go-${{ env.GO_VERSION }}-
4235
4336 - name : Download dependencies
4437 run : go mod download
@@ -49,257 +42,6 @@ jobs:
4942 - name : Run tests
5043 run : make test
5144
52- - name : Run tests with race detection
53- run : make test-race
54-
55- - name : Generate coverage report
56- run : make test-coverage
57-
58- - name : Upload coverage to Codecov
59- uses : codecov/codecov-action@v3
60- with :
61- file : ./coverage.out
62- flags : unittests
63- name : codecov-umbrella
64-
65- quality :
66- name : Code Quality
67- runs-on : ubuntu-latest
68-
69- steps :
70- - name : Checkout code
71- uses : actions/checkout@v4
72-
73- - name : Set up Go
74- uses : actions/setup-go@v4
75- with :
76- go-version : ${{ env.GO_VERSION }}
77-
78- - name : Cache Go modules
79- uses : actions/cache@v3
80- with :
81- path : |
82- ~/.cache/go-build
83- ~/go/pkg/mod
84- key : ${{ runner.os }}-go-${{ env.GO_VERSION }}-${{ hashFiles('**/go.sum') }}
85-
86- - name : Install tools
87- run : make tools
88-
89- - name : Run linter
90- run : make lint
91-
92- - name : Run security scan
93- run : make security
94-
95- - name : Check formatting
96- run : |
97- make fmt
98- git diff --exit-code
99-
100- - name : Validate examples
101- run : make examples
102-
103- build :
104- name : Build
105- runs-on : ubuntu-latest
106- needs : [test, quality]
107-
108- steps :
109- - name : Checkout code
110- uses : actions/checkout@v4
111-
112- - name : Set up Go
113- uses : actions/setup-go@v4
114- with :
115- go-version : ${{ env.GO_VERSION }}
116-
117- - name : Cache Go modules
118- uses : actions/cache@v3
119- with :
120- path : |
121- ~/.cache/go-build
122- ~/go/pkg/mod
123- key : ${{ runner.os }}-go-${{ env.GO_VERSION }}-${{ hashFiles('**/go.sum') }}
124-
125- - name : Build for current platform
45+ - name : Build application
12646 run : make build
127-
128- - name : Build for all platforms
129- run : make build-all
130-
131- - name : Upload build artifacts
132- uses : actions/upload-artifact@v3
133- with :
134- name : binaries
135- path : build/
136- retention-days : 30
13747
138- docker :
139- name : Docker Build
140- runs-on : ubuntu-latest
141- needs : [test, quality]
142- if : github.event_name != 'pull_request'
143-
144- steps :
145- - name : Checkout code
146- uses : actions/checkout@v4
147-
148- - name : Set up Docker Buildx
149- uses : docker/setup-buildx-action@v3
150-
151- - name : Log in to Container Registry
152- uses : docker/login-action@v3
153- with :
154- registry : ${{ env.REGISTRY }}
155- username : ${{ github.actor }}
156- password : ${{ secrets.GITHUB_TOKEN }}
157-
158- - name : Extract metadata
159- id : meta
160- uses : docker/metadata-action@v5
161- with :
162- images : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
163- tags : |
164- type=ref,event=branch
165- type=ref,event=pr
166- type=semver,pattern={{version}}
167- type=semver,pattern={{major}}.{{minor}}
168- type=semver,pattern={{major}}
169- type=sha
170-
171- - name : Build and push Docker image
172- uses : docker/build-push-action@v5
173- with :
174- context : .
175- platforms : linux/amd64,linux/arm64
176- push : true
177- tags : ${{ steps.meta.outputs.tags }}
178- labels : ${{ steps.meta.outputs.labels }}
179- cache-from : type=gha
180- cache-to : type=gha,mode=max
181-
182- release :
183- name : Release
184- runs-on : ubuntu-latest
185- needs : [test, quality, build]
186- if : github.event_name == 'release'
187-
188- steps :
189- - name : Checkout code
190- uses : actions/checkout@v4
191- with :
192- fetch-depth : 0
193-
194- - name : Set up Go
195- uses : actions/setup-go@v4
196- with :
197- go-version : ${{ env.GO_VERSION }}
198-
199- - name : Cache Go modules
200- uses : actions/cache@v3
201- with :
202- path : |
203- ~/.cache/go-build
204- ~/go/pkg/mod
205- key : ${{ runner.os }}-go-${{ env.GO_VERSION }}-${{ hashFiles('**/go.sum') }}
206-
207- - name : Build release artifacts
208- run : make release-build
209-
210- - name : Generate checksums
211- run : make release-checksums
212-
213- - name : Upload release assets
214- uses : softprops/action-gh-release@v1
215- with :
216- files : |
217- dist/release/*
218- generate_release_notes : true
219- draft : false
220- prerelease : false
221- env :
222- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
223-
224- integration :
225- name : Integration Tests
226- runs-on : ubuntu-latest
227- needs : [build]
228- if : github.event_name != 'pull_request'
229-
230- services :
231- ollama :
232- image : ollama/ollama:latest
233- ports :
234- - 11434:11434
235- options : --health-cmd="curl -f http://localhost:11434/api/tags || exit 1" --health-interval=30s --health-timeout=10s --health-retries=3
236-
237- steps :
238- - name : Checkout code
239- uses : actions/checkout@v4
240-
241- - name : Set up Go
242- uses : actions/setup-go@v4
243- with :
244- go-version : ${{ env.GO_VERSION }}
245-
246- - name : Download build artifacts
247- uses : actions/download-artifact@v3
248- with :
249- name : binaries
250- path : build/
251-
252- - name : Make binaries executable
253- run : chmod +x build/*
254-
255- - name : Wait for Ollama to be ready
256- run : |
257- timeout 300 bash -c 'until curl -f http://localhost:11434/api/tags; do sleep 5; done'
258-
259- - name : Pull test model
260- run : |
261- curl -X POST http://localhost:11434/api/pull -d '{"name": "llama3.1:8b"}'
262-
263- - name : Run integration tests
264- run : make test-integration
265- env :
266- OLLAMA_ENDPOINT : http://localhost:11434
267-
268- performance :
269- name : Performance Tests
270- runs-on : ubuntu-latest
271- needs : [build]
272- if : github.event_name == 'push' && github.ref == 'refs/heads/main'
273-
274- steps :
275- - name : Checkout code
276- uses : actions/checkout@v4
277-
278- - name : Set up Go
279- uses : actions/setup-go@v4
280- with :
281- go-version : ${{ env.GO_VERSION }}
282-
283- - name : Download build artifacts
284- uses : actions/download-artifact@v3
285- with :
286- name : binaries
287- path : build/
288-
289- - name : Make binaries executable
290- run : chmod +x build/*
291-
292- - name : Run benchmarks
293- run : make benchmark
294-
295- - name : Run performance tests
296- run : make profile
297-
298- - name : Upload performance results
299- uses : actions/upload-artifact@v3
300- with :
301- name : performance-results
302- path : |
303- *.prof
304- benchmark-results/
305- retention-days : 7
0 commit comments