-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTaskfile.yml
More file actions
275 lines (241 loc) · 6.63 KB
/
Taskfile.yml
File metadata and controls
275 lines (241 loc) · 6.63 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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
version: "3"
vars:
BINARY_NAME: sdt
BINARY_PATH: ./bin/{{.BINARY_NAME}}
DOCKER_IMAGE: sandrolain/sdt
VERSION:
sh: git tag --sort=-version:refname | head -n 1 || echo "v0.0.0"
COMMIT:
sh: git rev-parse HEAD
BUILD_DATE:
sh: date +"%Y-%m-%dT%H:%M:%S%z"
tasks:
default:
desc: Show available tasks
cmds:
- task --list
# Build tasks
build:
desc: Build the CLI binary
sources:
- "cli/**/*.go"
- "go.mod"
- "go.sum"
generates:
- "{{.BINARY_PATH}}"
cmds:
- go build -ldflags="-s -w -X main.version={{.VERSION}} -X main.commit={{.COMMIT}} -X main.date={{.BUILD_DATE}}" -o {{.BINARY_PATH}} "./cli"
build-compress:
desc: Build and compress the binary with UPX
deps: [build]
cmds:
- upx --best --lzma {{.BINARY_PATH}}
build-all:
desc: Build all variants (CLI, web, WASM)
cmds:
- task: build
- task: build-web
- task: wasm-build
install:
desc: Install the binary to GOPATH/bin
deps: [build]
cmds:
- cp {{.BINARY_PATH}} $(go env GOPATH)/bin/{{.BINARY_NAME}}
# Test tasks
test:
desc: Run unit tests
cmds:
- go test -coverprofile=coverage.out ./cli/...
- go tool cover -html=coverage.out -o coverage.html
- echo "Coverage report generated at coverage.html"
test-race:
desc: Run tests with race detector
cmds:
- go test -race -v ./cli/...
test-bench:
desc: Run benchmarks
cmds:
- go test -bench=. -benchmem ./cli/...
test-all:
desc: Run all tests (unit, race, benchmarks)
cmds:
- task: test
- task: test-race
- task: test-bench
# Code quality tasks
fmt:
desc: Format Go code with simplification
cmds:
- gofmt -s -l -w .
lint:
desc: Run golangci-lint
cmds:
- golangci-lint run ./cli/...
vet:
desc: Run go vet for static analysis
cmds:
- go vet ./cli/...
check:
desc: Run all checks (fmt, lint, vet, test, security)
cmds:
- task: fmt
- task: lint
- task: vet
- task: test
- task: gosec
- task: govulncheck
# Security tasks
gosec:
desc: Run security checks with gosec
cmds:
- |
if ! command -v gosec &> /dev/null; then
echo "Installing gosec..."
go install github.com/securego/gosec/v2/cmd/gosec@latest
fi
gosec -fmt=json -out=security-report.json ./cli/...
govulncheck:
desc: Run vulnerability scanner
cmds:
- |
if ! command -v govulncheck &> /dev/null; then
echo "Installing govulncheck..."
go install golang.org/x/vuln/cmd/govulncheck@latest
fi
govulncheck ./cli/...
trivy:
desc: Run Trivy vulnerability scanner
cmds:
- |
if ! command -v trivy &> /dev/null; then
echo "Trivy is not installed. Installing..."
brew install aquasecurity/trivy/trivy || echo "Please install Trivy manually"
fi
trivy fs --scanners vuln,secret,misconfig .
trivy fs --format json --output trivy-results.json .
# Docker tasks
docker-build:
desc: Build Docker image
cmds:
- task: build-web
- |
cd ./docker && \
docker build -t {{.DOCKER_IMAGE}}:{{.VERSION}} -t {{.DOCKER_IMAGE}}:latest .
docker-build-multi:
desc: Build multi-arch Docker image and push
cmds:
- task: build-web
- |
cd ./docker && \
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t {{.DOCKER_IMAGE}}:{{.VERSION}} \
-t {{.DOCKER_IMAGE}}:latest \
--push .
docker-push:
desc: Push Docker images to registry
deps: [docker-build]
cmds:
- docker push {{.DOCKER_IMAGE}}:{{.VERSION}}
- docker push {{.DOCKER_IMAGE}}:latest
# Release tasks
release-snapshot:
desc: Create a snapshot release with GoReleaser
cmds:
- goreleaser release --snapshot --clean
release:
desc: Create and publish a new release with GoReleaser
cmds:
- goreleaser release --clean
# Version management tasks
version-major:
desc: Increment major version (x.0.0)
cmds:
- |
CURRENT=$(git describe --abbrev=0 --tags 2>/dev/null || echo "v0.0.0")
CURRENT=${CURRENT#v}
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT"
NEW_VERSION="v$((MAJOR+1)).0.0"
git tag $NEW_VERSION
git push origin $NEW_VERSION
echo "Created and pushed tag: $NEW_VERSION"
version-minor:
desc: Increment minor version (x.y.0)
cmds:
- |
CURRENT=$(git describe --abbrev=0 --tags 2>/dev/null || echo "v0.0.0")
CURRENT=${CURRENT#v}
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT"
NEW_VERSION="v$MAJOR.$((MINOR+1)).0"
git tag $NEW_VERSION
git push origin $NEW_VERSION
echo "Created and pushed tag: $NEW_VERSION"
version-patch:
desc: Increment patch version (x.y.z)
cmds:
- |
CURRENT=$(git describe --abbrev=0 --tags 2>/dev/null || echo "v0.0.0")
CURRENT=${CURRENT#v}
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT"
NEW_VERSION="v$MAJOR.$MINOR.$((PATCH+1))"
git tag $NEW_VERSION
git push origin $NEW_VERSION
echo "Created and pushed tag: $NEW_VERSION"
# Web tasks
build-web:
desc: Build web frontend
dir: web
cmds:
- npm install
- npm run build
- mkdir -p ../docker/dist
- cp -R ./dist/* ../docker/dist/
wasm-build:
desc: Build WASM version
cmds:
- mkdir -p web/src
- GOOS=js GOARCH=wasm go build -o web/src/sdt.wasm ./cli
- cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" web/src/
serve-web:
desc: Serve web interface locally
deps: [build-web]
cmds:
- cd docker/dist && python3 -m http.server 3000
# Dependencies tasks
tidy:
desc: Tidy and verify go modules
cmds:
- go mod tidy
- go mod verify
vendor:
desc: Vendor dependencies
cmds:
- go mod vendor
update-deps:
desc: Update all dependencies
cmds:
- go get -u ./...
- task: tidy
# Documentation tasks
update-docs:
desc: Generate CLI documentation
cmds:
- go run ./cli docs
- echo "Documentation updated in ./docs/"
# Clean tasks
clean:
desc: Clean build artifacts
cmds:
- rm -rf bin/
- rm -rf dist/
- rm -rf vendor/
- rm -rf coverage.out coverage.html
- rm -rf security-report.json
- rm -rf trivy-results.json
- rm -rf docker/dist/
clean-all:
desc: Clean all generated files including dependencies
cmds:
- task: clean
- rm -rf web/node_modules/
- rm -rf web/dist/