Refactor building and packing pipeline

This commit is contained in:
Denis Arh
2020-03-18 07:40:35 +01:00
parent 0c95128bdc
commit 612312c4ca
9 changed files with 97 additions and 248 deletions
+65 -25
View File
@@ -1,12 +1,34 @@
.PHONY: help docker docker-push realize qa critic vet codegen integration
.PHONY: pack build help realize qa critic vet codegen integration
GO = go
GOGET = $(GO) get -u
GO = go
GOGET = $(GO) get -u
GOTEST ?= go test
GOFLAGS ?= -mod=vendor
export GOFLAGS
BUILD_FLAVOUR ?= corteza
BUILD_APPS ?= system compose messaging monolith
BUILD_TIME ?= $(shell date +%FT%T%z)
BUILD_VERSION ?= $(shell git describe --tags --abbrev=0)
BUILD_ARCH ?= $(shell go env GOARCH)
BUILD_OS ?= $(shell go env GOOS)
BUILD_OS_is_windows = $(filter windows,$(BUILD_OS))
BUILD_DEST_DIR ?= build
BUILD_NAME = $(BUILD_FLAVOUR)-server-$*-$(BUILD_VERSION)-$(BUILD_OS)-$(BUILD_ARCH)
BUILD_BIN_NAME = $(BUILD_NAME)$(if $(BUILD_OS_is_windows),.exe,)
RELEASE_BASEDIR = $(BUILD_DEST_DIR)/pkg/$(BUILD_FLAVOUR)-server-$*
RELEASE_NAME = $(BUILD_NAME).tar.gz
RELEASE_EXTRA_FILES ?= README.md LICENSE CONTRIBUTING.md DCO .env.example
RELEASE_PKEY ?= .upload-rsa
LDFLAGS_BUILD_TIME = -X github.com/cortezaproject/corteza-server/pkg/version.BuildTime=$(BUILD_TIME)
LDFLAGS_VERSION = -X github.com/cortezaproject/corteza-server/pkg/version.Version=$(BUILD_VERSION)
LDFLAGS_EXTRA ?=
LDFLAGS = -ldflags "$(LDFLAGS_BUILD_TIME) $(LDFLAGS_GIT_TAG) $(LDFLAGS_EXTRA)"
BASEPKGS = system compose messaging
IMAGES = corteza-server-system corteza-server-compose corteza-server-messaging corteza-server
TESTABLE = messaging system compose pkg internal
# Run watcher with a different event-trigger delay, eg:
# $> WATCH_DELAY=5s make watch.test.integration
@@ -35,8 +57,12 @@ TEST_SUITE_unit = $(TEST_SUITE_pkg) $(TEST_SUITE_services)
TEST_SUITE_integration = ./tests/...
TEST_SUITE_all = $(TEST_SUITE_unit) $(TEST_SUITE_integration)
DEV_MINIO_PORT ?= 9000
# Dev Support apps settings
DEV_MINIO_PORT ?= 9000
DEV_MAILHOG_SMTP_ADDR ?= 1025
DEV_MAILHOG_HTTP_ADDR ?= 8025
DOCKER ?= docker
########################################################################################################################
# Tool bins
@@ -55,29 +81,43 @@ help:
@echo
@echo Usage: make [target]
@echo
@echo - docker-images: builds docker images locally
@echo - docker-push: push built images
@echo - build build all apps
@echo - build.<app> build a specific app
@echo - vet run go vet on all code
@echo - critic run go critic on all code
@echo - test.all run all tests
@echo - test.unit run all unit tests
@echo - test.integration run all integration tests
@echo
@echo - vet - run go vet on all code
@echo - critic - run go critic on all code
@echo - test.all - run all tests
@echo - test.unit - run all unit tests
@echo - test.integration - run all integration tests
@echo
@echo See tests/README.md for more info
@echo See tests/README.md for more info on running tests
@echo
########################################################################################################################
# Building & packing
docker-images: $(IMAGES:%=docker-image.%)
build: $(addprefix build., $(BUILD_APPS))
docker-image.%: Dockerfile.%
@ docker build --no-cache --rm -f Dockerfile.$* -t cortezaproject/$*:latest .
build.%: cmd/%
GOOS=$(BUILD_OS) GOARCH=$(BUILD_ARCH) go build $(LDFLAGS) -o $(BUILD_DEST_DIR)/$(BUILD_BIN_NAME) cmd/$*/main.go
docker-push: $(IMAGES:%=docker-push.%)
release.%: $(addprefix build., %)
@ mkdir -p $(RELEASE_BASEDIR) $(RELEASE_BASEDIR)/bin
@ cp $(RELEASE_EXTRA_FILES) $(RELEASE_BASEDIR)/
@ cp $(BUILD_DEST_DIR)/$(BUILD_BIN_NAME) $(RELEASE_BASEDIR)/bin/$(BUILD_FLAVOUR)-server-$*
@ tar -C $(dir $(RELEASE_BASEDIR)) -czf $(BUILD_DEST_DIR)/$(RELEASE_NAME) $(notdir $(RELEASE_BASEDIR))
docker-push.%: Dockerfile.%
@ docker push cortezaproject/$*:latest
release: $(addprefix release.,$(BUILD_APPS))
release-clean:
@ rm -rf $(RELEASE_BASEDIR)
upload: $(RELEASE_PKEY)
@ echo "put $(BUILD_DEST_DIR)/*.tar.gz" | sftp -q -i $(RELEASE_PKEY) $(RELEASE_SFTP_URI)
@ rm -f $(RELEASE_PKEY)
$(RELEASE_PKEY):
@ echo $(RELEASE_SFTP_KEY) | base64 -d > $(RELEASE_PKEY)
@ chmod 0400 $@
########################################################################################################################
# Development
@@ -89,12 +129,12 @@ codegen: $(PROTOGEN)
./codegen.sh
mailhog.up:
docker run --rm --publish 8025:8025 --publish 1025:1025 mailhog/mailhog
$(DOCKER) run --rm --publish $(DEV_MAILHOG_SMTP_ADDR):8025 --publish $(DEV_MAILHOG_HTTP_ADDR):1025 mailhog/mailhog
minio.up:
# Runs temp minio server
# No volume because we do not want the data to persist
docker run --rm --publish 9000:$(DEV_MINIO_PORT) --env-file .env minio/minio server /data
# No volume mounts because we do not want the data to persist
$(DOCKER) run --rm --publish $(DEV_MINIO_PORT):9000 --env-file .env minio/minio server /data
watch.test.%: $(NODEMON)
# Development helper - watches for file