-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFluxFile
More file actions
172 lines (143 loc) · 4.58 KB
/
Copy pathFluxFile
File metadata and controls
172 lines (143 loc) · 4.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
165
166
167
168
169
170
171
172
# HookRunner FluxFile
# Modern task runner configuration - alternative to Makefile
# Usage: flux -t build, flux -t test, flux -l
var PROJECT = hookrunner
var VERSION = v0.26.0
# ============================================================
# Build Tasks
# ============================================================
task build:
desc: Build optimized binary (31% smaller with stripped symbols)
deps: fmt, vet
cache: true
inputs:
**/*.go
go.mod
go.sum
outputs:
${PROJECT}.exe
run:
go build -ldflags="-s -w" -o ${PROJECT}.exe ./cmd/hookrunner
task build-dev:
desc: Fast development build with debug info
run:
go build -o ${PROJECT}.exe ./cmd/hookrunner
task install:
desc: Install hookrunner to GOPATH/bin
deps: fmt, vet
run:
go install -ldflags="-s -w" ./cmd/hookrunner
# ============================================================
# Code Quality
# ============================================================
task fmt:
desc: Format Go code
run:
go fmt ./...
task vet:
desc: Run go vet
run:
go vet ./...
task lint:
desc: Run golangci-lint
deps: fmt, vet
run:
golangci-lint run
# ============================================================
# Testing
# ============================================================
task test:
desc: Run all tests with coverage
deps: fmt, vet
run:
go test ./... -v -cover
task test-coverage:
desc: Generate HTML coverage report
run:
go test ./... -coverprofile=coverage.out
go tool cover -html=coverage.out -o coverage.html
task test-race:
desc: Run tests with race detector
run:
go test ./... -race -v
# ============================================================
# Development
# ============================================================
task dev:
desc: Watch and rebuild on changes
watch: **/*.go
ignore:
vendor/**
**/*_test.go
.git/**
run:
go build -o ${PROJECT}.exe ./cmd/hookrunner
./${PROJECT}.exe version
task hooks:
desc: Install git hooks
deps: build
run:
./${PROJECT}.exe install
# ============================================================
# Release
# ============================================================
task release-linux:
desc: Build Linux binaries
run:
$env:GOOS="linux"; $env:GOARCH="amd64"; go build -ldflags="-s -w" -o dist/${PROJECT}-linux-amd64 ./cmd/hookrunner
task release-darwin:
desc: Build macOS binaries
run:
$env:GOOS="darwin"; $env:GOARCH="amd64"; go build -ldflags="-s -w" -o dist/${PROJECT}-darwin-amd64 ./cmd/hookrunner
task release-windows:
desc: Build Windows binaries
run:
go build -ldflags="-s -w" -o dist/${PROJECT}-windows-amd64.exe ./cmd/hookrunner
task release-all:
desc: Build for all platforms
deps: release-linux, release-darwin, release-windows
parallel: true
run:
echo "All platforms built!"
# ============================================================
# Cleanup
# ============================================================
task clean:
desc: Remove build artifacts
run:
Remove-Item -Force -ErrorAction SilentlyContinue ${PROJECT}.exe
Remove-Item -Force -ErrorAction SilentlyContinue coverage.out, coverage.html
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue dist/
# ============================================================
# Utilities
# ============================================================
task size:
desc: Compare optimized vs debug binary sizes
run:
echo "=== Binary Size Comparison ==="
echo "Optimized build:"
go build -ldflags="-s -w" -o hookrunner_opt.exe ./cmd/hookrunner
Get-Item hookrunner_opt.exe | Select-Object Name, @{N='Size';E={"{0:N2} MB" -f ($_.Length/1MB)}}
echo "Debug build:"
go build -o hookrunner_dbg.exe ./cmd/hookrunner
Get-Item hookrunner_dbg.exe | Select-Object Name, @{N='Size';E={"{0:N2} MB" -f ($_.Length/1MB)}}
Remove-Item -Force hookrunner_opt.exe, hookrunner_dbg.exe
task doctor:
desc: Check development environment
run:
echo "Go version:"
go version
echo "Git version:"
git version
echo "HookRunner version:"
./${PROJECT}.exe version
# ============================================================
# Profiles
# ============================================================
profile dev:
env:
CGO_ENABLED = 0
HOOKRUNNER_VERBOSE = 1
profile prod:
env:
CGO_ENABLED = 0