-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTaskfile.yml
More file actions
195 lines (163 loc) · 5.18 KB
/
Taskfile.yml
File metadata and controls
195 lines (163 loc) · 5.18 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
version: '3'
dotenv: ['.env']
vars:
BINARY_NAME: paintbar
BINARY_PATH: bin/{{.BINARY_NAME}}
tasks:
build:
desc: Build the Go server binary
cmds:
- go build -o {{.BINARY_PATH}} ./cmd/server
run:
desc: Run the Go server locally
cmds:
- go run ./cmd/server
test:
desc: Run all Go tests
cmds:
- go test ./... -v -race
test-short:
desc: Run Go tests (skip integration)
cmds:
- go test ./... -v -short
bench:
desc: Run Go benchmarks
cmds:
- go test ./... -bench=. -benchmem -run=^$ -count=1
lint:
desc: Run all linters (also available as lint:all)
aliases: ['lint:all']
cmds:
- task: lint:go
- task: lint:ts
- task: lint:md
lint:go:
desc: Run Go linters
cmds:
- go vet ./...
lint:ts:
desc: Run TypeScript type checking
cmds:
- npx tsc --project web/ts/tsconfig.json --noEmit
lint:md:
desc: Lint all Markdown files (docs/, README, CONTRIBUTING, CODE_OF_CONDUCT)
cmds:
- npx --no markdownlint 'docs/**/*.md' README.md CONTRIBUTING.md CODE_OF_CONDUCT.md
lint-fix:md:
desc: Auto-fix Markdown lint issues and format with Prettier
cmds:
- npx --no prettier --write 'docs/**/*.md' README.md CONTRIBUTING.md CODE_OF_CONDUCT.md
- npx --no markdownlint --fix 'docs/**/*.md' README.md CONTRIBUTING.md CODE_OF_CONDUCT.md
lint-fix:ts:
desc: Auto-fix TypeScript formatting with Prettier
cmds:
- npx --no prettier --write 'web/ts/**/*.ts'
lint-fix:all:
desc: Auto-fix all lint issues (Markdown, TypeScript)
cmds:
- task: lint-fix:md
- task: lint-fix:ts
ts-build:
desc: Build TypeScript with esbuild (dev — includes source maps)
cmds:
- npx esbuild web/ts/canvas/app.ts web/ts/auth/login.ts web/ts/profile/profile.ts web/ts/projects/projects.ts --bundle --splitting --format=esm --outdir=web/static/dist --minify --sourcemap
sources:
- web/ts/**/*.ts
ts-build:prod:
desc: Build TypeScript with esbuild (production — no source maps)
cmds:
- npx esbuild web/ts/canvas/app.ts web/ts/auth/login.ts web/ts/profile/profile.ts web/ts/projects/projects.ts --bundle --splitting --format=esm --outdir=web/static/dist --minify
ts-check:
desc: TypeScript type checking (no emit)
cmds:
- npx tsc --project web/ts/tsconfig.json --noEmit
ts-install:
desc: Install TypeScript dev dependencies
cmds:
- npm install --save-dev typescript esbuild @types/node
status:
- test -d node_modules/typescript
run:local:
desc: Start Docker deps, build TS, and run the Go server locally
deps: [docker:up, ts-build]
cmds:
- go run ./cmd/server
stop:local:
desc: Stop the local Go server and Docker deps
cmds:
- |
PIDS=$(lsof -ti:8080 2>/dev/null)
if [ -n "$PIDS" ]; then
echo "$PIDS" | xargs kill -INT 2>/dev/null
echo "server stopped (pids: $(echo $PIDS | tr '\n' ' '))"
for i in $(seq 1 10); do lsof -ti:8080 >/dev/null 2>&1 || break; sleep 0.5; done
else
echo "no server running on :8080"
fi
- docker compose down --remove-orphans
restart:local:
desc: Restart the local Go server (rebuild + relaunch)
cmds:
- |
PIDS=$(lsof -ti:8080 2>/dev/null)
if [ -n "$PIDS" ]; then
echo "$PIDS" | xargs kill -INT 2>/dev/null
echo "server stopped (pids: $(echo $PIDS | tr '\n' ' '))"
fi
for i in $(seq 1 10); do lsof -ti:8080 >/dev/null 2>&1 || break; sleep 0.5; done
- task: run:local
dev:
desc: Run the dev server (with TS build)
deps: [ts-build]
cmds:
- go run ./cmd/server
docker:up:
desc: Start dev dependencies (firebase + solo)
cmds:
- docker compose up firebase -d
docker:down:
desc: Stop dev dependencies
cmds:
- docker compose down
docker:up-all:
desc: Start all Docker services including app
cmds:
- docker compose up -d --build
docker:down-all:
desc: Stop all Docker services
cmds:
- docker compose down
docker-logs:
desc: Tail Docker service logs
cmds:
- docker compose logs -f
docker:reset-firebase:
desc: Reset only Firebase emulator (wipe data, restart)
cmds:
- docker compose stop firebase
- docker compose rm -f -v firebase
- docker compose up firebase -d
docker-clean:
desc: Stop services and remove volumes
aliases: ['docker:clean-all']
cmds:
- docker compose down -v --remove-orphans
deploy-preview:
desc: Deploy to Firebase preview channel + Cloud Run
cmds:
- task ts-build:prod
- gcloud run deploy paintbar --source . --region us-central1 --allow-unauthenticated
- firebase hosting:channel:deploy preview-{{.GIT_BRANCH}}
vars:
GIT_BRANCH:
sh: git rev-parse --abbrev-ref HEAD
deploy-prod:
desc: Deploy to production (Cloud Run + Firebase Hosting)
cmds:
- task ts-build:prod
- gcloud run deploy paintbar --source . --region us-central1 --allow-unauthenticated
- firebase deploy --only firestore:rules,hosting
clean:
desc: Remove build artifacts
cmds:
- rm -rf bin/ web/static/dist/