Repository navigation
Expand file tree
/
Copy pathTaskfile.yml
More file actions
152 lines (134 loc) · 3.83 KB
/
Copy pathTaskfile.yml
File metadata and controls
152 lines (134 loc) · 3.83 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
version: "3"
vars:
VERSION_PKG: github.com/scotthaleen/issues/internal/versioninfo
VERSION:
sh: date -u +%Y.%m.%d
COMMIT:
sh: git rev-parse HEAD 2>/dev/null || echo unknown
DATE:
sh: date -u +%Y-%m-%dT%H:%M:%SZ
LDFLAGS: >-
-s -w
-X {{.VERSION_PKG}}.Version={{.VERSION}}
-X {{.VERSION_PKG}}.Commit={{.COMMIT}}
-X {{.VERSION_PKG}}.Date={{.DATE}}
tasks:
default:
desc: Build both binaries
deps: [build]
build:
desc: Build server and CLI binaries
deps: [build:server, build:cli]
build:server:
desc: Build issue-server binary
cmds:
- CGO_ENABLED=0 go build -ldflags="{{.LDFLAGS}}" -o dist/issue-server ./cmd/server
sources:
- cmd/server/**/*.go
- internal/**/*.go
- go.mod
- go.sum
- .git/HEAD
- .git/refs/heads/**
generates:
- dist/issue-server
build:cli:
desc: Build issues (CLI) binary
cmds:
- CGO_ENABLED=0 go build -ldflags="{{.LDFLAGS}}" -o dist/issues ./cmd/cli
sources:
- cmd/cli/**/*.go
- internal/**/*.go
- go.mod
- go.sum
- .git/HEAD
- .git/refs/heads/**
generates:
- dist/issues
lint:
desc: Run golangci-lint
cmds:
- go tool golangci-lint run ./...
fmt:
desc: Format code
cmds:
- go tool golangci-lint fmt ./...
test:
desc: Run tests
cmds:
- go test -race -count=1 ./...
test:cover:
desc: Run tests with coverage
cmds:
- go test -race -count=1 -coverprofile=dist/coverage.out ./...
- go tool cover -func=dist/coverage.out
tidy:
desc: Tidy go modules
cmds:
- go mod tidy
clean:
desc: Remove build artifacts
cmds:
- rm -rf dist/
check:
desc: Run fmt, lint, and test
cmds:
- task: fmt
- task: lint
- task: test
dev:
desc: Run server with ISSUES_HOME=./tmp for local dev
deps: [build:server]
env:
ISSUES_HOME: ./tmp
cmds:
- ./dist/issue-server start -v 2
dev:clean:
desc: Wipe local dev database
cmds:
- rm -f tmp/issues.db tmp/issues.db-shm tmp/issues.db-wal
install:
desc: Build and install both binaries to ~/.local/bin
deps: [build]
cmds:
- mkdir -p ~/.local/bin
# Stop server if running (binary can't be overwritten while in use).
- systemctl --user stop issue-server 2>/dev/null || true
- cp dist/issue-server ~/.local/bin/issue-server
- cp dist/issues ~/.local/bin/issues
# Restart server if it was enabled.
- systemctl --user start issue-server 2>/dev/null || true
install:cli:
desc: Build and install only the CLI binary (no server needed)
deps: [build:cli]
cmds:
- mkdir -p ~/.local/bin
- cp dist/issues ~/.local/bin/issues
release:
desc: Cross-compile CLI and server for all platforms
cmds:
- mkdir -p dist/release
- |
for pair in linux/amd64 linux/arm64 darwin/amd64 darwin/arm64; do
os="${pair%%/*}"
arch="${pair##*/}"
echo "Building ${os}/${arch}..."
CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go build -ldflags="{{.LDFLAGS}}" \
-o "dist/release/issues-${os}-${arch}" ./cmd/cli
CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go build -ldflags="{{.LDFLAGS}}" \
-o "dist/release/issue-server-${os}-${arch}" ./cmd/server
done
- ls -lh dist/release/
release:cli:
desc: Cross-compile only the CLI for all platforms
cmds:
- mkdir -p dist/release
- |
for pair in linux/amd64 linux/arm64 darwin/amd64 darwin/arm64; do
os="${pair%%/*}"
arch="${pair##*/}"
echo "Building ${os}/${arch}..."
CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go build -ldflags="{{.LDFLAGS}}" \
-o "dist/release/issues-${os}-${arch}" ./cmd/cli
done
- ls -lh dist/release/issues-*