@@ -6,28 +6,95 @@ VOLUME_MOUNTS=-v "$(CURDIR)":/v
66SHELLCHECK_EXCLUSIONS =$(addprefix -e, SC1091 SC1117 SC2317 SC2329)
77SHELLCHECK =docker run --rm $(VOLUME_MOUNTS ) -w /v koalaman/shellcheck:stable $(SHELLCHECK_EXCLUSIONS )
88
9- ENVSUBST_VARS =LOAD_SCRIPT_COMMIT_SHA
9+ ENVSUBST_VARS =LOAD_SCRIPT_COMMIT_SHA LOAD_SCRIPT_STABLE_LATEST LOAD_SCRIPT_TEST_LATEST
10+
11+ # Define the channels we want to build for
12+ CHANNELS =test stable
13+
14+ FILES =build/test/install.sh build/stable/install.sh build/stable/rootless-install.sh
15+
16+ STABLE_LATEST =$(shell ./scripts/get-version.sh stable)
17+ TEST_LATEST =$(shell ./scripts/get-version.sh test)
18+
19+ # Error checking for empty version variables
20+ ifeq ($(STABLE_LATEST ) ,)
21+ $(error STABLE_LATEST is empty)
22+ endif
23+ ifeq ($(TEST_LATEST ) ,)
24+ $(error TEST_LATEST is empty)
25+ endif
1026
1127.PHONY : build
12- build : build/install.sh
28+ build : $(FILES )
29+
30+ build/% /install.sh : install.sh
31+ mkdir -p $(@D )
32+ sed ' s/DEFAULT_CHANNEL_VALUE="stable"/DEFAULT_CHANNEL_VALUE="$*"/' $< | \
33+ LOAD_SCRIPT_COMMIT_SHA=' $(shell git rev-parse HEAD)' \
34+ LOAD_SCRIPT_STABLE_LATEST=' $(STABLE_LATEST)' \
35+ LOAD_SCRIPT_TEST_LATEST=' $(TEST_LATEST)' \
36+ envsubst ' $(addprefix $$,$(ENVSUBST_VARS))' > $@
37+ chmod +x $@
1338
14- build/install.sh : install.sh
39+ build/% /rootless- install.sh : rootless- install.sh
1540 mkdir -p $(@D )
16- LOAD_SCRIPT_COMMIT_SHA=' $(shell git rev-parse HEAD)' envsubst ' $(addprefix $$,$(ENVSUBST_VARS))' < $< > $@
41+ sed ' s/DEFAULT_CHANNEL_VALUE="stable"/DEFAULT_CHANNEL_VALUE="$*"/' $< | \
42+ LOAD_SCRIPT_COMMIT_SHA=' $(shell git rev-parse HEAD)' \
43+ LOAD_SCRIPT_STABLE_LATEST=' $(STABLE_LATEST)' \
44+ LOAD_SCRIPT_TEST_LATEST=' $(TEST_LATEST)' \
45+ envsubst ' $(addprefix $$,$(ENVSUBST_VARS))' > $@
46+ chmod +x $@
1747
1848.PHONY : shellcheck
19- shellcheck : build/install.sh
20- $(SHELLCHECK ) $<
49+ shellcheck : $( FILES )
50+ $(SHELLCHECK ) $^
2151
2252.PHONY : test
23- test : build/install.sh
24- docker run --rm -i \
25- $(VOLUME_MOUNTS ) \
26- -w /v \
27- -e VERSION \
28- -e CHANNEL \
29- $(TEST_IMAGE ) \
30- sh " $<"
53+ test : $(foreach channel,$(CHANNELS ) ,build/$(channel ) /install.sh)
54+ for file in $^; do \
55+ (set -eux; docker run --rm -i \
56+ $(VOLUME_MOUNTS ) \
57+ --privileged \
58+ -e HOME=/tmp \
59+ -v /var/lib/docker \
60+ -w /v \
61+ -e VERSION \
62+ -e CHANNEL \
63+ $(TEST_IMAGE ) \
64+ sh $$ file) || exit $$? ; \
65+ done
66+
67+ AWS? =docker run \
68+ -v ./build:/build \
69+ -e AWS_ACCESS_KEY_ID \
70+ -e AWS_SECRET_ACCESS_KEY \
71+ -e AWS_SESSION_TOKEN \
72+ --rm amazon/aws-cli
73+
74+ .PHONY : deploy
75+ deploy : build/$(CHANNEL ) /install.sh build/$(CHANNEL ) /rootless-install.sh
76+ ifeq ($(S3_BUCKET ) ,)
77+ $(error S3_BUCKET is empty.)
78+ endif
79+ ifeq ($(CF_DISTRIBUTION_ID ) ,)
80+ $(error CF_DISTRIBUTION_ID is empty.)
81+ endif
82+ ifeq ($(CHANNEL ) ,)
83+ $(error CHANNEL is empty.)
84+ endif
85+ $(AWS) s3 cp --acl public-read --content-type 'text/plain' /build/$(CHANNEL)/install.sh s3://$(S3_BUCKET)/index
86+ ifeq ($(CHANNEL ) ,stable)
87+ $(AWS) s3 cp --acl public-read --content-type 'text/plain' /build/$(CHANNEL)/rootless-install.sh s3://$(S3_BUCKET)/rootless
88+ endif
89+
90+ $(AWS) cloudfront create-invalidation --distribution-id $(CF_DISTRIBUTION_ID) --paths '/*'
91+
92+ .PHONY : diff
93+ diff : build/$(CHANNEL ) /install.sh build/$(CHANNEL ) /rootless-install.sh
94+ ifeq ($(CHANNEL ) ,)
95+ $(error CHANNEL is empty.)
96+ endif
97+ ./diff.sh $(CHANNEL) || true
3198
3299.PHONY : clean
33100clean :
0 commit comments