github.com/simonferquel/app@v0.6.1-0.20181012141724-68b7cccf26ac/docker.Makefile (about) 1 include vars.mk 2 3 LINT_IMAGE_NAME := $(BIN_NAME)-lint:$(TAG) 4 DEV_IMAGE_NAME := $(BIN_NAME)-dev:$(TAG) 5 BIN_IMAGE_NAME := $(BIN_NAME)-bin:$(TAG) 6 CROSS_IMAGE_NAME := $(BIN_NAME)-cross:$(TAG) 7 E2E_CROSS_IMAGE_NAME := $(BIN_NAME)-e2e-cross:$(TAG) 8 GRADLE_IMAGE_NAME := $(BIN_NAME)-gradle:$(TAG) 9 10 BIN_CTNR_NAME := $(BIN_NAME)-bin-$(TAG) 11 CROSS_CTNR_NAME := $(BIN_NAME)-cross-$(TAG) 12 E2E_CROSS_CTNR_NAME := $(BIN_NAME)-e2e-cross-$(TAG) 13 COV_CTNR_NAME := $(BIN_NAME)-cov-$(TAG) 14 SCHEMAS_CTNR_NAME := $(BIN_NAME)-schemas-$(TAG) 15 16 BUILD_ARGS="--build-arg=EXPERIMENTAL=$(EXPERIMENTAL)" 17 18 PKG_PATH := /go/src/$(PKG_NAME) 19 20 .DEFAULT: all 21 all: cross test 22 23 create_bin: 24 @$(call mkdir,bin) 25 26 build_dev_image: 27 docker build $(BUILD_ARGS) --target=dev -t $(DEV_IMAGE_NAME) . 28 29 shell: build_dev_image ## run a shell in the docker build image 30 docker run -ti --rm $(DEV_IMAGE_NAME) bash 31 32 cross: create_bin ## cross-compile binaries (linux, darwin, windows) 33 docker build $(BUILD_ARGS) --target=cross -t $(CROSS_IMAGE_NAME) . 34 docker create --name $(CROSS_CTNR_NAME) $(CROSS_IMAGE_NAME) noop 35 docker cp $(CROSS_CTNR_NAME):$(PKG_PATH)/bin/$(BIN_NAME)-linux bin/$(BIN_NAME)-linux 36 docker cp $(CROSS_CTNR_NAME):$(PKG_PATH)/bin/$(BIN_NAME)-darwin bin/$(BIN_NAME)-darwin 37 docker cp $(CROSS_CTNR_NAME):$(PKG_PATH)/bin/$(BIN_NAME)-windows.exe bin/$(BIN_NAME)-windows.exe 38 docker rm $(CROSS_CTNR_NAME) 39 @$(call chmod,+x,bin/$(BIN_NAME)-linux) 40 @$(call chmod,+x,bin/$(BIN_NAME)-darwin) 41 @$(call chmod,+x,bin/$(BIN_NAME)-windows.exe) 42 43 e2e-cross: create_bin 44 docker build $(BUILD_ARGS) --target=e2e-cross -t $(E2E_CROSS_IMAGE_NAME) . 45 docker create --name $(E2E_CROSS_CTNR_NAME) $(E2E_CROSS_IMAGE_NAME) noop 46 docker cp $(E2E_CROSS_CTNR_NAME):$(PKG_PATH)/bin/$(BIN_NAME)-e2e-linux bin/$(BIN_NAME)-e2e-linux 47 docker cp $(E2E_CROSS_CTNR_NAME):$(PKG_PATH)/bin/$(BIN_NAME)-e2e-darwin bin/$(BIN_NAME)-e2e-darwin 48 docker cp $(E2E_CROSS_CTNR_NAME):$(PKG_PATH)/bin/$(BIN_NAME)-e2e-windows.exe bin/$(BIN_NAME)-e2e-windows.exe 49 docker rm $(E2E_CROSS_CTNR_NAME) 50 @$(call chmod,+x,bin/$(BIN_NAME)-e2e-linux) 51 @$(call chmod,+x,bin/$(BIN_NAME)-e2e-darwin) 52 @$(call chmod,+x,bin/$(BIN_NAME)-e2e-windows.exe) 53 54 tars: 55 tar czf bin/$(BIN_NAME)-linux.tar.gz -C bin $(BIN_NAME)-linux 56 tar czf bin/$(BIN_NAME)-e2e-linux.tar.gz -C bin $(BIN_NAME)-e2e-linux 57 tar czf bin/$(BIN_NAME)-darwin.tar.gz -C bin $(BIN_NAME)-darwin 58 tar czf bin/$(BIN_NAME)-e2e-darwin.tar.gz -C bin $(BIN_NAME)-e2e-darwin 59 tar czf bin/$(BIN_NAME)-windows.tar.gz -C bin $(BIN_NAME)-windows.exe 60 tar czf bin/$(BIN_NAME)-e2e-windows.tar.gz -C bin $(BIN_NAME)-e2e-windows.exe 61 62 test: test-unit test-e2e ## run all tests 63 64 test-unit: build_dev_image ## run unit tests 65 docker run --rm $(DEV_IMAGE_NAME) make EXPERIMENTAL=$(EXPERIMENTAL) test-unit 66 67 test-e2e: build_dev_image ## run end-to-end tests 68 docker run -v /var/run:/var/run:ro --rm --network="host" $(DEV_IMAGE_NAME) make EXPERIMENTAL=$(EXPERIMENTAL) bin/$(BIN_NAME) test-e2e 69 70 COV_LABEL := com.docker.app.cov-run=$(TAG) 71 coverage: build_dev_image ## run tests with coverage 72 @$(call mkdir,_build) 73 docker run -v /var/run:/var/run:ro --name $(COV_CTNR_NAME) --network="host" -tid $(DEV_IMAGE_NAME) make COMMIT=${COMMIT} TAG=${TAG} EXPERIMENTAL=$(EXPERIMENTAL) coverage 74 docker logs -f $(COV_CTNR_NAME) 75 docker cp $(COV_CTNR_NAME):$(PKG_PATH)/_build/cov/ ./_build/ci-cov 76 docker rm $(COV_CTNR_NAME) 77 78 gradle-test: 79 tar cf - Dockerfile.gradle bin/docker-app-linux integrations/gradle | docker build -t $(GRADLE_IMAGE_NAME) -f Dockerfile.gradle - 80 docker run --rm $(GRADLE_IMAGE_NAME) bash -c "./gradlew --stacktrace build && cd example && gradle renderIt" 81 82 lint: ## run linter(s) 83 $(info Linting...) 84 docker build -t $(LINT_IMAGE_NAME) -f Dockerfile.lint . 85 docker run --rm $(LINT_IMAGE_NAME) make lint 86 87 vendor: build_dev_image 88 $(info Vendoring...) 89 docker run --rm $(DEV_IMAGE_NAME) sh -c "make vendor && hack/check-git-diff vendor" 90 91 specification/bindata.go: specification/schemas/*.json build_dev_image 92 docker run --name $(SCHEMAS_CTNR_NAME) $(DEV_IMAGE_NAME) sh -c "make schemas" 93 docker cp $(SCHEMAS_CTNR_NAME):$(PKG_PATH)/specification/bindata.go ./specification/ 94 docker rm $(SCHEMAS_CTNR_NAME) 95 96 schemas: specification/bindata.go ## generate specification/bindata.go from json schemas 97 98 help: ## this help 99 @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) | sort 100 101 .PHONY: lint test-e2e test-unit test cross e2e-cross coverage gradle-test shell build_dev_image tars vendor schemas help