Skip to content

Commit c4b5e47

Browse files
committed
align Makefile with dex
1 parent 0556033 commit c4b5e47

1 file changed

Lines changed: 65 additions & 26 deletions

File tree

Makefile

Lines changed: 65 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,79 @@
66
#
77
# common targets
88
#
9-
NAMESPACE:=dm
10-
DMC:=dmc
9+
NAMESPACE:=dockmaster
1110
prefix = $(DESTDIR)/usr/local/bin
1211

13-
.PHONY: all clean
14-
all: $(NAMESPACE) # dmc not yet completed, not built by default
12+
.PHONY: all clean clean-% dockerbuild-% install uninstall
13+
14+
all: $(NAMESPACE)
1515

1616
clean:
17-
rm -rf $(CURDIR)/dist
17+
rm -rf $(CURDIR)/dist $(CURDIR)/.stack-work
18+
19+
clean-%:
20+
rm -rf $(CURDIR)/dist/$*
21+
22+
clean-tests: clean
23+
@rm -rf $(CURDIR)/tests/bats/tmp
24+
25+
clean-dockerbuilds:
26+
for id in $$(docker images -q makefile-$(NAMESPACE)-*) ; do docker rmi $$id ; done
27+
28+
dockerbuild-%:
29+
echo "--- building Dockerfiles from $*/ ---"
30+
docker build \
31+
--build-arg NAMESPACE=$(NAMESPACE) \
32+
--tag makefile-$(NAMESPACE)-$* \
33+
$*/
34+
35+
install: dist/dm dist/dmc
36+
$(info * installing into $(prefix))
37+
# use mkdir vs. install -D/d (macos portability)
38+
@mkdir -p $(prefix)
39+
@cp -a dist/ $(prefix)/
40+
41+
uninstall:
42+
rm -rf $(prefix)/dm $(prefix)/dmc
1843

1944
#
2045
# app targets
2146
#
22-
.PHONY: $(NAMESPACE) $(DMC) tests
23-
$(NAMESPACE):
24-
$(call compile,$(NAMESPACE))
25-
26-
$(DMC):
27-
$(call compile,$(DMC))
47+
.PHONY: $(NAMESPACE) compile-%
2848

29-
tests:
49+
$(NAMESPACE): compile-dm compile-dmc
50+
compile-%: clean-%
51+
$(info * building dist/$* ...)
3052
@( \
31-
cd $(CURDIR) ; \
32-
stack test \
53+
cd $(CURDIR) ; \
54+
mkdir -p dist ; \
55+
PATH="$(CURDIR)/dist:$$PATH" ; \
56+
stack install --system-ghc --local-bin-path dist dockmaster:exe:$* \
3357
)
3458

35-
define compile
36-
$(info * building dist/$(1)) \
37-
@( \
38-
cd $(CURDIR) ; \
39-
rm -rf dist/$(1) ; \
40-
mkdir -p dist ; \
41-
stack build dockmaster:exe:$(1) --copy-bins --local-bin-path dist \
42-
)
43-
endef
44-
59+
#
60+
# test targets
61+
#
62+
63+
TEST ?=
64+
SKIP_NETWORK_TEST ?=
65+
DOCKER_SOCKET ?= /var/run/docker.sock
66+
DOCKER_GROUP_ID ?= $(shell ls -ln $(DOCKER_SOCKET) | awk '{print $$4}')
67+
# for docker-for-mac, we also add group-id of 50 ("authedusers") as moby distro seems to auto bind-mount /var/run/docker.sock w/ this ownership
68+
DOCKER_FOR_MAC_WORKAROUND := $(shell [[ "$$OSTYPE" == darwin* || "$$OSTYPE" == macos* ]] && echo "--group-add=50")
69+
70+
.PHONY: tests
71+
72+
tests: dockerbuild-tests clean-tests
73+
docker run -it --rm -u $$(id -u):$$(id -g) $(DOCKER_FOR_MAC_WORKAROUND) \
74+
--group-add=$(DOCKER_GROUP_ID) \
75+
--device=/dev/tty0 --device=/dev/console \
76+
-v $(CURDIR):/$(CURDIR) \
77+
-v $(DOCKER_SOCKET):/var/run/docker.sock \
78+
-e SKIP_NETWORK_TEST=$(SKIP_NETWORK_TEST) \
79+
--workdir $(CURDIR) \
80+
makefile-$(NAMESPACE)-tests bats tests/bats/$(TEST)
81+
4582
#
4683
# release targets
4784
#
@@ -84,8 +121,10 @@ _mkrelease: _release_check $(NAMESPACE)
84121
curl -sLH "Authorization: token $(GH_TOKEN)" -X PATCH --data '$(CREATE_JSON)' $(GH_URL)/repos/$(GH_PROJECT)/releases/$$id ; \
85122
fi ; \
86123
[ $$id = "null" ] && echo " !! unable to create release" && exit 1 ; \
87-
echo " * uploading dist/$(NAMESPACE) to release $(RELEASE_TAG) ($$id) ..." ; \
88-
curl -sL -H "Authorization: token $(GH_TOKEN)" -H "Content-Type: text/x-shellscript" --data-binary @"dist/$(NAMESPACE)" -X POST $(GH_UPLOAD_URL)/repos/$(GH_PROJECT)/releases/$$id/assets?name=$(NAMESPACE) &>/dev/null ; \
124+
echo " * uploading dist/dm to release $(RELEASE_TAG) ($$id) ..." ; \
125+
curl -sL -H "Authorization: token $(GH_TOKEN)" -H "Content-Type: text/x-shellscript" --data-binary @"dist/dm" -X POST $(GH_UPLOAD_URL)/repos/$(GH_PROJECT)/releases/$$id/assets?name=dm &>/dev/null ; \
126+
echo " * uploading dist/dmc to release $(RELEASE_TAG) ($$id) ..." ; \
127+
curl -sL -H "Authorization: token $(GH_TOKEN)" -H "Content-Type: text/x-shellscript" --data-binary @"dist/dmc" -X POST $(GH_UPLOAD_URL)/repos/$(GH_PROJECT)/releases/$$id/assets?name=dmc &>/dev/null ; \
89128
)
90129

91130
#

0 commit comments

Comments
 (0)