Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
121 lines (99 loc) · 3.23 KB
/
Copy pathMakefile
File metadata and controls
121 lines (99 loc) · 3.23 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
# ==========================================
# shorturl - 构建 / 运行入口
# ==========================================
# 后端:
# make up / down / logs / status 用根目录 compose 起停完整环境
# make dev / build / test / lint 开发
# make start / stop 不用 compose 的单容器调试
#
# Raycast 扩展(需要 macOS + Node):
# make ext-install / ext-dev / ext-build / ext-lint / ext-test
# ==========================================
EXT_DIR := raycast-extension
.PHONY: help dev build test lint up down logs status start stop clean \
ext-install ext-dev ext-build ext-lint ext-test
help:
@echo "后端:"
@echo " up 用 docker compose 起完整环境(本地构建镜像)"
@echo " down 停止并移除容器(保留数据卷)"
@echo " logs 跟踪服务日志"
@echo " status 查看当前 compose 环境状态"
@echo " dev 热重载(需要 air)"
@echo " build 编译到 tmp/short-url"
@echo " test go test ./..."
@echo " lint go fmt + go vet"
@echo " start/stop 不用 compose 的单容器调试"
@echo ""
@echo "Raycast 扩展:"
@echo " ext-install 安装依赖"
@echo " ext-dev ray develop"
@echo " ext-build ray build"
@echo " ext-lint eslint"
@echo " ext-test 纯函数用例(不需要 Raycast GUI)"
# ---------- 启停 ----------
up:
docker compose up -d --build
@echo ""
@echo "已启动,验证:"
@echo " curl -s http://localhost:$${SHORTURL_PORT:-8087}/ping"
down:
docker compose down
@echo "已停止(数据卷保留;彻底删除用 docker compose down -v)"
logs:
docker compose logs -f short-url
status:
@docker compose ps 2>/dev/null || true
# ---------- 开发 ----------
dev:
go mod tidy
air
build:
go mod tidy
go build -o tmp/short-url main.go
@echo "构建完成:tmp/short-url"
test:
go test ./...
@echo "测试完成"
lint:
go fmt ./...
go vet ./...
@echo "代码检查完成"
# 不依赖 compose 的单容器调试
start:
docker build -t shorturl:local .
-docker stop short-url
-docker rm short-url
docker run -itd \
-p 8087:8087 \
--name short-url \
--restart unless-stopped \
-v shorturl-data:/data \
-e SERVER_DOMAIN="http://localhost:8087/" \
shorturl:local
@echo "已启动:http://localhost:8087(数据在命名卷 shorturl-data)"
stop:
-docker stop short-url
-docker rm short-url
@echo "调试容器已停止"
clean:
-docker stop short-url
-docker rm short-url
docker image prune -f
docker container prune -f
docker network prune -f
@echo "本地 Docker 资源已清理"
# ---------- Raycast 扩展 ----------
ext-install:
cd $(EXT_DIR) && pnpm install
ext-dev:
cd $(EXT_DIR) && pnpm run dev
ext-build:
cd $(EXT_DIR) && pnpm run build
ext-lint:
cd $(EXT_DIR) && pnpm run lint
# 扩展的纯函数用例测试:编译 src 下的纯函数,再用 node 跑断言(不需要 Raycast GUI)
ext-test:
cd $(EXT_DIR) && ./node_modules/.bin/tsc src/validate-url.ts src/api.ts \
--target ES2022 --module commonjs --outDir /tmp/shorturl-ext-test --skipLibCheck
cd $(EXT_DIR) && node tests/validate-url.test.js /tmp/shorturl-ext-test
cd $(EXT_DIR) && node tests/api.test.js /tmp/shorturl-ext-test