-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile.harness
79 lines (69 loc) · 3.36 KB
/
Makefile.harness
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
ifeq ($(BUILD_HARNESS_TEMPLATES_MAKEFILE_GUARD),)
BUILD_HARNESS_TEMPLATES_MAKEFILE_GUARD := included
export SHELL = /bin/bash
export PWD = $(shell pwd)
export BUILD_HARNESS_ORG ?= oneconcern
export BUILD_HARNESS_PROJECT ?= build-harness
export BUILD_HARNESS_DOCKER_IMAGE ?= $(BUILD_HARNESS_ORG)/$(BUILD_HARNESS_PROJECT)
export BUILD_HARNESS_BRANCH ?= main
export BUILD_HARNESS_CLONE_URL ?= https://github.com/$(BUILD_HARNESS_ORG)/$(BUILD_HARNESS_PROJECT).git
# Resolves BUILD_HARNESS_PATH to BUILD_HARNESS_PATH_LOCAL when BUILD_HARNESS_PATH does not exist
BUILD_HARNESS_PATH ?= $(shell until [ -d "$(BUILD_HARNESS_PROJECT)" ] || [ "`pwd`" == '/' ]; do cd ..; done; pwd)/$(BUILD_HARNESS_PROJECT)
BUILD_HARNESS_PATH_LOCAL := $(PWD)/$(BUILD_HARNESS_PROJECT)
export BUILD_HARNESS_PATH := $(or $(wildcard $(BUILD_HARNESS_PATH)),$(BUILD_HARNESS_PATH_LOCAL))
# Macro to clone/install BUILD_HARNESS_PROJECT
define harness_install
curl --retry 5 --fail --silent --retry-delay 1 \
https://raw.githubusercontent.com/$(BUILD_HARNESS_ORG)/$(BUILD_HARNESS_PROJECT)/$(BUILD_HARNESS_BRANCH)/bin/install.sh | \
bash -s "$(BUILD_HARNESS_ORG)" "$(BUILD_HARNESS_PROJECT)" "$(BUILD_HARNESS_BRANCH)"
endef
# Toggles the auto-init feature
BUILD_HARNESS_AUTO_INIT ?= false
# Macro to clone/install BUILD_HARNESS_PROJECT
define harness_install
curl --retry 5 --fail --silent --retry-delay 1 \
https://raw.githubusercontent.com/$(BUILD_HARNESS_ORG)/$(BUILD_HARNESS_PROJECT)/$(BUILD_HARNESS_BRANCH)/bin/install.sh | \
bash -s "$(BUILD_HARNESS_ORG)" "$(BUILD_HARNESS_PROJECT)" "$(BUILD_HARNESS_BRANCH)"
endef
# Macro to auto-init the BUILD_HARNESS_PROJECT with the `include` directive
# Tests if BUILD_HARNESS_PROJECT does not yet exist, or if it does exist but the
# checkout does not match BUILD_HARNESS_BRANCH
define harness_auto_init
if [[ \
-f "/build-harness/Makefile" || -f "/$(BUILD_HARNESS_PROJECT)/Makefile" \
]]; then \
echo "[.build-harness]: In $(BUILD_HARNESS_PROJECT) docker container, skipping auto-init" ;\
elif grep -q docker /proc/1/cgroup 2>/dev/null; then \
echo "[.build-harness]: In unknown docker container, skipping auto-init" ;\
elif [[ \
"$(BUILD_HARNESS_PATH)" != "$(BUILD_HARNESS_PATH_LOCAL)" && \
-f "$(BUILD_HARNESS_PATH)/Makefile" \
]]; then \
echo "[.build-harness]: Using external $(BUILD_HARNESS_PATH), skipping auto-init" ;\
elif [[ \
"$(BUILD_HARNESS_PATH)" == "$(BUILD_HARNESS_PATH_LOCAL)" && \
-f "$(BUILD_HARNESS_PATH)/Makefile" && \
"$$(git -C '$(BUILD_HARNESS_PATH_LOCAL)' ls-remote '$(BUILD_HARNESS_CLONE_URL)' '$(BUILD_HARNESS_BRANCH)' | cut -f1)" == "$$(git -C '$(BUILD_HARNESS_PATH_LOCAL)' rev-parse HEAD)" \
]]; then \
echo "[.build-harness]: Clone of $(BUILD_HARNESS_PROJECT) is up-to-date, skipping auto-init" ;\
else \
$(harness_install) ;\
fi
endef
-include $(if $(findstring true,$(BUILD_HARNESS_AUTO_INIT)),$(shell $(harness_auto_init) >&2)) $(BUILD_HARNESS_PATH)/Makefile
## Init build-harness
harness/init::
@ $(harness_install)
## Clean build-harness
harness/clean::
@if [ -d "$(BUILD_HARNESS_PATH)" ]; then \
if [ -d build-harness ] && [ "$(BUILD_HARNESS_PATH)" -ef build-harness ]; then \
echo rm -rf build-harness; \
rm -rf build-harness; \
else \
echo Not removing build harness from "$(BUILD_HARNESS_PATH)" because it appears to be shared.; \
echo If you are sure you want to delete it, run: ; \
echo ' rm -rf "$(BUILD_HARNESS_PATH)"'; \
fi; \
fi
endif