-
Notifications
You must be signed in to change notification settings - Fork 3
137 lines (118 loc) · 3.27 KB
/
ci.yml
File metadata and controls
137 lines (118 loc) · 3.27 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
# Continuous Integration workflow
# Runs tests, linting, and build verification on all PRs and pushes
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
permissions:
contents: read
jobs:
lint:
name: Lint
runs-on: arc-runner-set-large
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v6
- name: golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: latest
args: --timeout=10m
test:
name: Test
needs: lint
runs-on: arc-runner-set-large
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Go Test Cache
uses: actions/cache@v5
with:
path: ~/.cache/go-build
key: ${{ runner.os }}-go-test-${{ hashFiles('**/*.go') }}
restore-keys: |
${{ runner.os }}-go-test-
- name: Download dependencies
run: go mod download
- name: Run tests
run: go test -v -coverprofile=coverage.out ./...
- name: Upload coverage
uses: codecov/codecov-action@v4
with:
files: ./coverage.out
fail_ci_if_error: false
continue-on-error: true
test-race:
name: Test (Race Detection)
needs: lint
runs-on: ubuntu-4c
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Go Test Cache (Race)
uses: actions/cache@v5
with:
path: ~/.cache/go-build
key: ${{ runner.os }}-go-test-race-${{ hashFiles('**/*.go') }}
restore-keys: |
${{ runner.os }}-go-test-race-
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true
- name: Run tests with race detector
run: go test -race ./...
build:
name: Build
needs: lint
runs-on: arc-runner-set-large
timeout-minutes: 20
strategy:
matrix:
goos: [linux, darwin, windows]
goarch: [amd64, arm64]
exclude:
- goos: windows
goarch: arm64
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Go Build Cache
uses: actions/cache@v5
with:
path: ~/.cache/go-build
key: ${{ runner.os }}-go-build-${{ matrix.goos }}-${{ matrix.goarch }}-${{ hashFiles('**/*.go') }}
restore-keys: |
${{ runner.os }}-go-build-${{ matrix.goos }}-${{ matrix.goarch }}-
${{ runner.os }}-go-build-
- name: Build
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: 0
run: |
go build -ldflags="-s -w -X main.version=ci -X main.commit=${{ github.sha }} -X main.date=$(date -u +%Y-%m-%dT%H:%M:%SZ)" -o kspec-${{ matrix.goos }}-${{ matrix.goarch }} ./cmd/kspec
goreleaser-check:
name: GoReleaser Check
needs: lint
runs-on: arc-runner-set
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Check GoReleaser config
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: "~> v2"
args: check