-
Notifications
You must be signed in to change notification settings - Fork 134
Expand file tree
/
Copy pathversion.mk
More file actions
72 lines (61 loc) · 3.79 KB
/
version.mk
File metadata and controls
72 lines (61 loc) · 3.79 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
# version.mk — shared semver resolution
#
# Reads VERSION from package.json (or environment override), then exposes:
# SEMVER_VERSION, SEMVER_MAJOR, SEMVER_MINOR, SEMVER_PATCH,
# SEMVER_PRERELEASE, SEMVER_BUILDMETA
# BUILD_DATE, BUILD_VCS_URL, BUILD_VCS_ID, BUILD_VCS_ID_DATE
# ── Version ───────────────────────────────────────────────────
VERSION ?= $(shell node -p "require('./package.json').version" 2>/dev/null || echo "0.0.0-unknown")
SEMVER_VERSION := $(VERSION)
# Strip leading 'v' for parsing
_V := $(patsubst v%,%,$(SEMVER_VERSION))
# Split on '-' to separate core from prerelease+buildmeta
_CORE := $(firstword $(subst -, ,$(_V)))
_PRE_BUILD := $(word 2,$(subst -, ,$(_V)))
SEMVER_MAJOR := $(word 1,$(subst ., ,$(_CORE)))
SEMVER_MINOR := $(word 2,$(subst ., ,$(_CORE)))
SEMVER_PATCH := $(word 3,$(subst ., ,$(_CORE)))
# Prerelease: everything after first '-', before any '+'
SEMVER_PRERELEASE := $(firstword $(subst +, ,$(patsubst $(_CORE)-%,%,$(_V))))
ifeq ($(SEMVER_PRERELEASE),$(_V))
SEMVER_PRERELEASE :=
endif
# Build metadata: everything after '+'
SEMVER_BUILDMETA := $(word 2,$(subst +, ,$(_V)))
# ── Build metadata ────────────────────────────────────────────
BUILD_DATE := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
BUILD_VCS_URL := $(shell git remote get-url origin 2>/dev/null || echo "unknown")
BUILD_VCS_ID := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
BUILD_VCS_ID_FULL := $(shell git rev-parse HEAD 2>/dev/null || echo "unknown")
BUILD_VCS_ID_DATE := $(shell git log -1 --format=%cI 2>/dev/null || echo "unknown")
BUILD_VCS_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
BUILD_NODE_VERSION := $(shell node --version 2>/dev/null || echo "unknown")
BUILD_TS_VERSION := $(shell npx tsc --version 2>/dev/null | awk '{print $$2}' || echo "unknown")
BUILD_BUN_VERSION := $(shell bun --version 2>/dev/null || echo "unknown")
# ── Go ldflags ────────────────────────────────────────────────
GO_LDFLAGS := -X main.appVersion=$(SEMVER_VERSION) -X main.buildDate=$(BUILD_DATE) -X main.gitCommit=$(BUILD_VCS_ID) -X main.gitBranch=$(BUILD_VCS_BRANCH)
# ── Frontend build info ──────────────────────────────────────
BUILD_INFO_TS := src/frontend/packages/core/src/environments/build-info.ts
.PHONY: fe-version
fe-version:
@mkdir -p $(dir $(BUILD_INFO_TS))
@printf "export const BUILD_INFO = {\n version: '%s',\n gitCommit: '%s',\n gitBranch: '%s',\n buildDate: '%s',\n nodeVersion: '%s',\n typescriptVersion: '%s',\n bunVersion: '%s',\n};\n" \
"$(SEMVER_VERSION)" "$(BUILD_VCS_ID)" "$(BUILD_VCS_BRANCH)" "$(BUILD_DATE)" \
"$(BUILD_NODE_VERSION)" "$(BUILD_TS_VERSION)" "$(BUILD_BUN_VERSION)" \
> $(BUILD_INFO_TS)
@echo "Generated $(BUILD_INFO_TS)"
# ── Introspection ─────────────────────────────────────────────
.PHONY: dump dump-version
dump: dump-version
dump-version:
@echo "SEMVER_VERSION $(SEMVER_VERSION)"
@echo "SEMVER_MAJOR $(SEMVER_MAJOR)"
@echo "SEMVER_MINOR $(SEMVER_MINOR)"
@echo "SEMVER_PATCH $(SEMVER_PATCH)"
@echo "SEMVER_PRERELEASE $(SEMVER_PRERELEASE)"
@echo "SEMVER_BUILDMETA $(SEMVER_BUILDMETA)"
@echo "BUILD_DATE $(BUILD_DATE)"
@echo "BUILD_VCS_URL $(BUILD_VCS_URL)"
@echo "BUILD_VCS_ID $(BUILD_VCS_ID)"
@echo "BUILD_VCS_ID_DATE $(BUILD_VCS_ID_DATE)"
@echo "GO_LDFLAGS $(GO_LDFLAGS)"