-
Notifications
You must be signed in to change notification settings - Fork 78
Expand file tree
/
Copy pathMakefile
More file actions
96 lines (80 loc) · 4.11 KB
/
Copy pathMakefile
File metadata and controls
96 lines (80 loc) · 4.11 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
.DEFAULT_GOAL := release
VERSION := $(shell node scripts/build_version.mjs latest-tag 2>/dev/null)
ROOT_DIR := $(CURDIR)
BUILD_DIR := $(ROOT_DIR)/build
CLI_DIR := $(ROOT_DIR)/apps/cli
FFMPEG_VERSION ?= unknown
define build_cli
node $(ROOT_DIR)/scripts/build_version.mjs validate "$(VERSION)"
cd $(CLI_DIR) && CGO_ENABLED=0 GOOS=$(1) GOARCH=$(2) go build -tags prod -ldflags "-X cicada/internal/version.Version=$(VERSION)" -o $(3) .
endef
define stage_ffmpeg_bundle
node scripts/prepare_ffmpeg_bundle.mjs --target $(1) --version "$(FFMPEG_VERSION)" $(if $($(2)),--archive "$($(2))") $(if $($(3)),--sha256 "$($(3))")
endef
.PHONY: pwa storybook release docker clean ffmpeg-bundles ffmpeg-bundle-darwin-arm64 ffmpeg-bundle-windows-amd64 ffmpeg-bundle-windows-arm64 ffmpeg-bundle-linux-amd64 ffmpeg-bundle-linux-arm64
## 安装前端依赖 (供 pwa 与 storybook 构建复用, 依赖 lockfile 变更时才重装)
apps/pwa/node_modules/.package-lock.json: apps/pwa/package-lock.json
npm ci --prefix apps/pwa
## 构建 PWA 并嵌入 CLI
pwa: apps/pwa/node_modules/.package-lock.json
node scripts/build_version.mjs validate "$(VERSION)"
CICADA_VERSION=$(VERSION) npm run build --prefix apps/pwa
rm -rf $(CLI_DIR)/pwa/dist
cp -R apps/pwa/dist $(CLI_DIR)/pwa/dist
## 构建 Storybook 并嵌入 CLI (托管于 /storybook)
storybook: apps/pwa/node_modules/.package-lock.json
npm run build-storybook --prefix apps/pwa
rm -rf $(CLI_DIR)/storybook/static
cp -R apps/pwa/storybook-static $(CLI_DIR)/storybook/static
ffmpeg-bundle-darwin-arm64:
$(call stage_ffmpeg_bundle,darwin-arm64,FFMPEG_ARCHIVE_DARWIN_ARM64,FFMPEG_SHA256_DARWIN_ARM64)
ffmpeg-bundle-windows-amd64:
$(call stage_ffmpeg_bundle,windows-amd64,FFMPEG_ARCHIVE_WINDOWS_AMD64,FFMPEG_SHA256_WINDOWS_AMD64)
ffmpeg-bundle-windows-arm64:
$(call stage_ffmpeg_bundle,windows-arm64,FFMPEG_ARCHIVE_WINDOWS_ARM64,FFMPEG_SHA256_WINDOWS_ARM64)
ffmpeg-bundle-linux-amd64:
$(call stage_ffmpeg_bundle,linux-amd64,FFMPEG_ARCHIVE_LINUX_AMD64,FFMPEG_SHA256_LINUX_AMD64)
ffmpeg-bundle-linux-arm64:
$(call stage_ffmpeg_bundle,linux-arm64,FFMPEG_ARCHIVE_LINUX_ARM64,FFMPEG_SHA256_LINUX_ARM64)
ffmpeg-bundles: \
ffmpeg-bundle-darwin-arm64 \
ffmpeg-bundle-windows-amd64 \
ffmpeg-bundle-windows-arm64 \
ffmpeg-bundle-linux-amd64 \
ffmpeg-bundle-linux-arm64
## 全平台构建发布包 (默认目标)
release: pwa storybook ffmpeg-bundles
rm -rf $(BUILD_DIR)
mkdir -p $(BUILD_DIR)
mkdir -p $(BUILD_DIR)/darwin-arm64
$(call build_cli,darwin,arm64,$(BUILD_DIR)/darwin-arm64/cicada)
cd $(BUILD_DIR)/darwin-arm64 && tar -zcf ../cicada-$(VERSION)-darwin-arm64.tar.gz cicada
mkdir -p $(BUILD_DIR)/windows-amd64
$(call build_cli,windows,amd64,$(BUILD_DIR)/windows-amd64/cicada.exe)
cd $(BUILD_DIR)/windows-amd64 && tar -zcf ../cicada-$(VERSION)-windows-amd64.tar.gz cicada.exe
mkdir -p $(BUILD_DIR)/windows-arm64
$(call build_cli,windows,arm64,$(BUILD_DIR)/windows-arm64/cicada.exe)
cd $(BUILD_DIR)/windows-arm64 && tar -zcf ../cicada-$(VERSION)-windows-arm64.tar.gz cicada.exe
mkdir -p $(BUILD_DIR)/linux-amd64
$(call build_cli,linux,amd64,$(BUILD_DIR)/linux-amd64/cicada)
cd $(BUILD_DIR)/linux-amd64 && tar -zcf ../cicada-$(VERSION)-linux-amd64.tar.gz cicada
mkdir -p $(BUILD_DIR)/linux-arm64
$(call build_cli,linux,arm64,$(BUILD_DIR)/linux-arm64/cicada)
cd $(BUILD_DIR)/linux-arm64 && tar -zcf ../cicada-$(VERSION)-linux-arm64.tar.gz cicada
rm -rf \
$(BUILD_DIR)/darwin-arm64 \
$(BUILD_DIR)/windows-amd64 \
$(BUILD_DIR)/windows-arm64 \
$(BUILD_DIR)/linux-amd64 \
$(BUILD_DIR)/linux-arm64
## 构建 Linux 多架构二进制 (供 Docker buildx 使用, 不压缩)
docker: pwa storybook ffmpeg-bundle-linux-amd64 ffmpeg-bundle-linux-arm64
rm -rf $(BUILD_DIR)
mkdir -p $(BUILD_DIR)/linux-amd64
$(call build_cli,linux,amd64,$(BUILD_DIR)/linux-amd64/cicada)
mkdir -p $(BUILD_DIR)/linux-arm64
$(call build_cli,linux,arm64,$(BUILD_DIR)/linux-arm64/cicada)
@echo 'skip compression on docker building.'
## 清理构建产物
clean:
rm -rf $(BUILD_DIR) apps/cli/pwa/dist apps/pwa/dist apps/cli/storybook/static apps/pwa/storybook-static apps/cli/internal/ffmpeg/generated apps/cli/internal/ffmpeg/zz_bundle_*.go