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