-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathMakefile
More file actions
94 lines (72 loc) · 2.07 KB
/
Copy pathMakefile
File metadata and controls
94 lines (72 loc) · 2.07 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
ROOT := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
MK_HOST_ARCH := $(shell uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
export MK_HOST_ARCH
MK_REPO_ID := $(shell echo -n "$(ROOT)$$(cat /etc/machine-id 2>/dev/null)" | sha256sum | cut -c1-8)
export MK_REPO_ID
MK_DOCKER_PROGRESS ?= plain
export MK_DOCKER_PROGRESS
DOCKER_BUILDKIT := 1
export DOCKER_BUILDKIT
BUILD_FOR_CI ?=
export BUILD_FOR_CI
ifdef CI
BOLD :=
CYAN :=
RESET :=
else
BOLD := \033[1m
CYAN := \033[36m
RESET := \033[0m
endif
BANNER = @printf "$(BOLD)$(CYAN)[target: $@]$(RESET)\n"
DOCKER_BUILD = docker build \
--progress=$(MK_DOCKER_PROGRESS) \
--build-arg MK_REPO_ID \
--build-arg MK_HOST_ARCH \
-f $(ROOT)/Dockerfile $(ROOT)
.DEFAULT_GOAL := ci
.PHONY: build validate validate-ci test generate generate-manifest package ci gen-version-env clean
# ---- gen-version-env ----
# Pre-generate version env for container builds (no .git needed inside Docker).
# Also handles git worktree checkouts where .git is a pointer file to an external directory.
gen-version-env:
@bash $(ROOT)/scripts/version > /dev/null
# ---- build ----
build: gen-version-env | $(ROOT)/bin
$(BANNER)
$(DOCKER_BUILD) --target build-output \
--output type=local,dest=$(ROOT)
$(ROOT)/bin:
@mkdir -p $(ROOT)/bin
# ---- validate ----
validate: gen-version-env
$(BANNER)
$(DOCKER_BUILD) --target validate
# ---- validate-ci ----
validate-ci: gen-version-env
$(BANNER)
$(DOCKER_BUILD) --target validate-ci
# ---- test ----
test: gen-version-env
$(BANNER)
$(DOCKER_BUILD) --target test
# ---- generate ----
generate: gen-version-env
$(BANNER)
$(DOCKER_BUILD) --target generate-output \
--output type=local,dest=$(ROOT)
# ---- generate-manifest ----
generate-manifest: gen-version-env
$(BANNER)
$(DOCKER_BUILD) --target generate-manifest-output \
--output type=local,dest=$(ROOT)
# ---- package ----
package: build
$(BANNER)
ARCH=$(MK_HOST_ARCH) $(ROOT)/scripts/package
# ---- ci ----
ci: build test validate validate-ci package
# ---- clean ----
clean:
@rm -rf $(ROOT)/bin
@rm -f $(ROOT)/scripts/.version_env