-
Notifications
You must be signed in to change notification settings - Fork 856
Expand file tree
/
Copy pathMakefile
More file actions
101 lines (85 loc) · 2.77 KB
/
Makefile
File metadata and controls
101 lines (85 loc) · 2.77 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
TEST_IMAGE?=ubuntu:22.04
VERSION?=
CHANNEL?=
VOLUME_MOUNTS=-v "$(CURDIR)":/v
SHELLCHECK_EXCLUSIONS=$(addprefix -e, SC1091 SC1117 SC2317 SC2329)
SHELLCHECK=docker run --rm $(VOLUME_MOUNTS) -w /v koalaman/shellcheck:stable $(SHELLCHECK_EXCLUSIONS)
ENVSUBST_VARS=LOAD_SCRIPT_COMMIT_SHA LOAD_SCRIPT_STABLE_LATEST LOAD_SCRIPT_TEST_LATEST
# Define the channels we want to build for
CHANNELS=test stable
FILES=build/test/install.sh build/stable/install.sh build/stable/rootless-install.sh
STABLE_LATEST=$(shell ./scripts/get-version.sh stable)
TEST_LATEST=$(shell ./scripts/get-version.sh test)
# Error checking for empty version variables
ifeq ($(STABLE_LATEST),)
$(error STABLE_LATEST is empty)
endif
ifeq ($(TEST_LATEST),)
$(error TEST_LATEST is empty)
endif
.PHONY: build
build: $(FILES)
build/%/install.sh: install.sh
mkdir -p $(@D)
sed 's/DEFAULT_CHANNEL_VALUE="stable"/DEFAULT_CHANNEL_VALUE="$*"/' $< | \
LOAD_SCRIPT_COMMIT_SHA='$(shell git rev-parse HEAD)' \
LOAD_SCRIPT_STABLE_LATEST='$(STABLE_LATEST)' \
LOAD_SCRIPT_TEST_LATEST='$(TEST_LATEST)' \
envsubst '$(addprefix $$,$(ENVSUBST_VARS))' > $@
chmod +x $@
build/%/rootless-install.sh: rootless-install.sh
mkdir -p $(@D)
sed 's/DEFAULT_CHANNEL_VALUE="stable"/DEFAULT_CHANNEL_VALUE="$*"/' $< | \
LOAD_SCRIPT_COMMIT_SHA='$(shell git rev-parse HEAD)' \
LOAD_SCRIPT_STABLE_LATEST='$(STABLE_LATEST)' \
LOAD_SCRIPT_TEST_LATEST='$(TEST_LATEST)' \
envsubst '$(addprefix $$,$(ENVSUBST_VARS))' > $@
chmod +x $@
.PHONY: shellcheck
shellcheck: $(FILES)
$(SHELLCHECK) $^
.PHONY: test
test: $(foreach channel,$(CHANNELS),build/$(channel)/install.sh)
for file in $^; do \
(set -eux; docker run --rm -i \
$(VOLUME_MOUNTS) \
--privileged \
-e HOME=/tmp \
-v /var/lib/docker \
-w /v \
-e VERSION \
-e CHANNEL \
$(TEST_IMAGE) \
sh $$file) || exit $$?; \
done
AWS?=docker run \
-v ./build:/build \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
--rm amazon/aws-cli
.PHONY: deploy
deploy: build/$(CHANNEL)/install.sh build/$(CHANNEL)/rootless-install.sh
ifeq ($(S3_BUCKET),)
$(error S3_BUCKET is empty.)
endif
ifeq ($(CF_DISTRIBUTION_ID),)
$(error CF_DISTRIBUTION_ID is empty.)
endif
ifeq ($(CHANNEL),)
$(error CHANNEL is empty.)
endif
$(AWS) s3 cp --acl public-read --content-type 'text/plain' /build/$(CHANNEL)/install.sh s3://$(S3_BUCKET)/index
ifeq ($(CHANNEL),stable)
$(AWS) s3 cp --acl public-read --content-type 'text/plain' /build/$(CHANNEL)/rootless-install.sh s3://$(S3_BUCKET)/rootless
endif
$(AWS) cloudfront create-invalidation --distribution-id $(CF_DISTRIBUTION_ID) --paths '/*'
.PHONY: diff
diff: build/$(CHANNEL)/install.sh build/$(CHANNEL)/rootless-install.sh
ifeq ($(CHANNEL),)
$(error CHANNEL is empty.)
endif
./diff.sh $(CHANNEL) || true
.PHONY: clean
clean:
$(RM) -r build/