-
-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathTaskfile.dist.yml
More file actions
164 lines (146 loc) · 5.58 KB
/
Taskfile.dist.yml
File metadata and controls
164 lines (146 loc) · 5.58 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
version: "3"
env:
GOTOOLCHAIN: auto
GOPROXY: direct
APP_VERSION:
sh: echo -n "${APP_VERSION:-$(git rev-parse --short HEAD)-dev}"
UID:
sh: '{{if ne OS "windows"}}id -u{{end}}'
GID:
sh: '{{if ne OS "windows"}}id -g{{end}}'
dotenv: [".env"]
includes:
docker: ./scripts/tasks/docker.yml
batocera: ./scripts/tasks/batocera.yml
bazzite: ./scripts/tasks/bazzite.yml
chimeraos: ./scripts/tasks/chimeraos.yml
libreelec: ./scripts/tasks/libreelec.yml
linux: ./scripts/tasks/linux.yml
mac: ./scripts/tasks/mac.yml
mister: ./scripts/tasks/mister.yml
mistex: ./scripts/tasks/mistex.yml
recalbox: ./scripts/tasks/recalbox.yml
retropie: ./scripts/tasks/retropie.yml
steamos: ./scripts/tasks/steamos.yml
windows: ./scripts/tasks/windows.yml
zigcc: ./scripts/tasks/zigcc.yml
tasks:
build:
vars:
APP_BIN: '{{default "zaparoo" .APP_BIN}}'
BUILD_OS: "{{default OS .BUILD_OS}}"
BUILD_ARCH: "{{default ARCH .BUILD_ARCH}}"
PLATFORM: '{{default (OS | replace "darwin" "mac") .PLATFORM}}'
BUILD_DIR: "_build/{{.PLATFORM}}_{{.BUILD_ARCH}}"
EXTRA_LDFLAGS: "{{.EXTRA_LDFLAGS}}"
EXTRA_TAGS: "{{.EXTRA_TAGS}}"
env:
GO111MODULE: on
CGO_ENABLED: 1
GOARCH: "{{.BUILD_ARCH}}"
GOOS: "{{.BUILD_OS}}"
CGO_LDFLAGS: "{{if not .NO_LIBNFC}}-lnfc -lusb{{end}}"
PLATFORM: "{{.PLATFORM}}"
CC: "{{.CC}}"
CXX: "{{.CXX}}"
cmds:
- >-
go build -trimpath
-ldflags "-X 'github.com/ZaparooProject/zaparoo-core/v2/pkg/config.AppVersion=${APP_VERSION}'
-linkmode external -extldflags
'{{if not .NO_LIBNFC}}${CGO_LDFLAGS}{{end}}
{{if not .NO_STATIC}}-static{{end}}'
-s -w {{.EXTRA_LDFLAGS}}"
-tags "netgo,osusergo,sqlite_omit_load_extension{{if .EXTRA_TAGS}},{{.EXTRA_TAGS}}{{end}}"
-o "{{.BUILD_DIR}}/{{.APP_BIN}}"
"./cmd/${PLATFORM}"
clean:
desc: Clean build artifacts (optionally specific platform/arch)
vars:
PLATFORM: '{{default "" .PLATFORM}}'
ARCH: '{{default "" .ARCH}}'
TARGET_DIR: "{{if and .PLATFORM .ARCH}}_build/{{.PLATFORM}}_{{.ARCH}}{{else if .PLATFORM}}_build/{{.PLATFORM}}_*{{else}}_build{{end}}"
cmds:
- '{{if eq OS "windows"}}powershell rm -Recurse -Force{{else}}rm -rf{{end}} {{.TARGET_DIR}}'
test:
desc: Run all tests
vars:
TEST_ARGS: '{{default "./..." .CLI_ARGS}}'
cmds:
- go test -race {{.TEST_ARGS}}
fuzz:
desc: Run fuzz tests (default 30s per test, use FUZZ_TIME to override)
vars:
FUZZ_TIME: '{{default "30s" .FUZZ_TIME}}'
cmds:
# NDEF parser fuzz tests
- go test -run "^$" -fuzz=FuzzParseToText -fuzztime={{.FUZZ_TIME}} ./pkg/readers/shared/ndef/...
- go test -run "^$" -fuzz=FuzzValidateNDEFMessage -fuzztime={{.FUZZ_TIME}} ./pkg/readers/shared/ndef/...
# Filename parser fuzz tests
- go test -run "^$" -fuzz=FuzzParseFilenameToCanonicalTags -fuzztime={{.FUZZ_TIME}} ./pkg/database/tags/...
- go test -run "^$" -fuzz=FuzzExtractTags -fuzztime={{.FUZZ_TIME}} ./pkg/database/tags/...
- go test -run "^$" -fuzz=FuzzParseTitleFromFilename -fuzztime={{.FUZZ_TIME}} ./pkg/database/tags/...
# Barcode parser fuzz tests
- go test -run "^$" -fuzz=FuzzParseLine -fuzztime={{.FUZZ_TIME}} ./pkg/readers/rs232barcode/...
lint:
desc: Run golangci-lint
cmds:
- golangci-lint run ./...
lint-fix:
desc: Run golangci-lint with auto-fixes
cmds:
- golangci-lint run --fix ./...
vulncheck:
desc: Run govulncheck for security vulnerabilities
cmds:
- govulncheck ./...
nilcheck:
desc: Run nilaway for nil-pointer analysis
cmds:
- nilaway ./...
deadlock:
desc: Run tests with go-deadlock to detect lock ordering violations
cmds:
- go test -tags=deadlock -race -count=1 ./...
mutesting:
desc: Run mutation testing on a package
cmds:
- go-mutesting {{.CLI_ARGS}}
# Benchmark workflow:
# 1. task bench-baseline (generates testdata/benchmarks/baseline.txt, commit this)
# 2. make changes
# 3. task bench-compare (compares current vs committed baseline via benchstat)
# Quick runs: task bench (count=3) or task bench-db (database only)
bench:
desc: Run all benchmarks
cmds:
- go test -run='^$' -bench=. -benchmem -count=3 -timeout=30m ./...
bench-db:
desc: Run database benchmarks only
cmds:
- go test -run='^$' -bench=. -benchmem -count=3 -timeout=20m ./pkg/database/...
bench-baseline:
desc: Generate benchmark baseline (commit the output)
cmds:
- bash -o pipefail -c 'go test -run="^$$" -bench=. -benchmem -count=6 -timeout=45m ./... | grep -E "^(Benchmark|goos:|goarch:|pkg:|cpu:)" | tee testdata/benchmarks/baseline.txt'
bench-compare:
desc: Compare current benchmarks against baseline (requires benchstat, install with go install golang.org/x/perf/cmd/benchstat@latest)
cmds:
- bash -o pipefail -c 'go test -run="^$$" -bench=. -benchmem -count=6 -timeout=45m ./... | grep -E "^(Benchmark|goos:|goarch:|pkg:|cpu:)" > /tmp/zaparoo-bench-current.txt'
- benchstat testdata/benchmarks/baseline.txt /tmp/zaparoo-bench-current.txt
get-logs:
desc: Download and decode logs from Zaparoo API
vars:
ENDPOINT: '{{default "localhost:7497" .CLI_ARGS}}'
UUID:
sh: uuidgen
cmds:
- >-
curl -X POST http://{{.ENDPOINT}}/api/v0.1
-H "Content-Type: application/json"
-d '{
"jsonrpc": "2.0",
"method": "settings.logs.download",
"params": {},
"id": "{{.UUID}}"
}' | jq -r '.result.content' | base64 -d