|
6 | 6 | # |
7 | 7 | # common targets |
8 | 8 | # |
9 | | -NAMESPACE:=dm |
10 | | -DMC:=dmc |
| 9 | +NAMESPACE:=dockmaster |
11 | 10 | prefix = $(DESTDIR)/usr/local/bin |
12 | 11 |
|
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) |
15 | 15 |
|
16 | 16 | 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 |
18 | 43 |
|
19 | 44 | # |
20 | 45 | # app targets |
21 | 46 | # |
22 | | -.PHONY: $(NAMESPACE) $(DMC) tests |
23 | | -$(NAMESPACE): |
24 | | - $(call compile,$(NAMESPACE)) |
25 | | - |
26 | | -$(DMC): |
27 | | - $(call compile,$(DMC)) |
| 47 | +.PHONY: $(NAMESPACE) compile-% |
28 | 48 |
|
29 | | -tests: |
| 49 | +$(NAMESPACE): compile-dm compile-dmc |
| 50 | +compile-%: clean-% |
| 51 | + $(info * building dist/$* ...) |
30 | 52 | @( \ |
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:$* \ |
33 | 57 | ) |
34 | 58 |
|
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 | + |
45 | 82 | # |
46 | 83 | # release targets |
47 | 84 | # |
@@ -84,8 +121,10 @@ _mkrelease: _release_check $(NAMESPACE) |
84 | 121 | curl -sLH "Authorization: token $(GH_TOKEN)" -X PATCH --data '$(CREATE_JSON)' $(GH_URL)/repos/$(GH_PROJECT)/releases/$$id ; \ |
85 | 122 | fi ; \ |
86 | 123 | [ $$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 ; \ |
89 | 128 | ) |
90 | 129 |
|
91 | 130 | # |
|
0 commit comments