1
0
mirror of https://github.com/zokradonh/kopano-docker synced 2025-06-07 16:06:14 +00:00
kopano-docker/Makefile
Felix Bartels 6b3ded8dfc
hotfix tagging of webapp builds (#143)
since the introduction of the php base image version information in the webapp container are doubled. by removing the build args from the php image at least there is no "newest" version any longer for webapp, but it still shows the version twice.

this introduces a hotfix for this behaviour.

Signed-off-by: Felix Bartels <felix@host-consultants.de>
2019-04-17 11:38:34 +02:00

302 lines
11 KiB
Makefile

# if not run in travis, get docker_login and _pwd from file
ifndef TRAVIS
docker_repo := zokradonh
docker_login := `cat ~/.docker-account-user`
docker_pwd := `cat ~/.docker-account-pwd`
endif
base_download_version := $(shell ./version.sh core)
core_download_version := $(shell ./version.sh core)
meet_download_version := $(shell ./version.sh meet)
webapp_download_version := $(shell ./version.sh webapp)
zpush_download_version := $(shell ./version.sh zpush)
KOPANO_CORE_REPOSITORY_URL := file:/kopano/repo/core
KOPANO_MEET_REPOSITORY_URL := file:/kopano/repo/meet
KOPANO_WEBAPP_REPOSITORY_URL := file:/kopano/repo/webapp
KOPANO_WEBAPP_FILES_REPOSITORY_URL := file:/kopano/repo/files
KOPANO_WEBAPP_MDM_REPOSITORY_URL := file:/kopano/repo/mdm
KOPANO_WEBAPP_SMIME_REPOSITORY_URL := file:/kopano/repo/smime
KOPANO_ZPUSH_REPOSITORY_URL := http://repo.z-hub.io/z-push:/final/Debian_9.0/
RELEASE_KEY_DOWNLOAD := 0
DOWNLOAD_COMMUNITY_PACKAGES := 1
COMPOSE_FILE := docker-compose.yml
-include .env
export
# convert lowercase componentname to uppercase
COMPONENT = $(shell echo $(component) | tr a-z A-Z)
build-all: build-base build-core build-kdav build-konnect build-kwmserver build-ldap-demo build-meet build-php build-playground build-scheduler build-ssl build-utils build-web build-webapp build-zpush
.PHONY: build
build: component ?= base
build:
ifdef TRAVIS
@echo "fetching previous build to warm up build cache (only on travis)"
docker pull $(docker_repo)/kopano_$(component) || true
docker pull $(docker_repo)/kopano_$(component):builder || true
endif
docker build \
--build-arg docker_repo=${docker_repo} \
--build-arg KOPANO_CORE_VERSION=${core_download_version} \
--build-arg KOPANO_$(COMPONENT)_VERSION=${$(component)_download_version} \
--build-arg KOPANO_CORE_REPOSITORY_URL=$(KOPANO_CORE_REPOSITORY_URL) \
--build-arg KOPANO_MEET_REPOSITORY_URL=$(KOPANO_MEET_REPOSITORY_URL) \
--build-arg KOPANO_WEBAPP_REPOSITORY_URL=$(KOPANO_WEBAPP_REPOSITORY_URL) \
--build-arg KOPANO_WEBAPP_FILES_REPOSITORY_URL=$(KOPANO_WEBAPP_FILES_REPOSITORY_URL) \
--build-arg KOPANO_WEBAPP_MDM_REPOSITORY_URL=$(KOPANO_WEBAPP_MDM_REPOSITORY_URL) \
--build-arg KOPANO_WEBAPP_SMIME_REPOSITORY_URL=$(KOPANO_WEBAPP_SMIME_REPOSITORY_URL) \
--build-arg KOPANO_ZPUSH_REPOSITORY_URL=$(KOPANO_ZPUSH_REPOSITORY_URL) \
--build-arg RELEASE_KEY_DOWNLOAD=$(RELEASE_KEY_DOWNLOAD) \
--build-arg DOWNLOAD_COMMUNITY_PACKAGES=$(DOWNLOAD_COMMUNITY_PACKAGES) \
--build-arg ADDITIONAL_KOPANO_PACKAGES="$(ADDITIONAL_KOPANO_PACKAGES)" \
--build-arg ADDITIONAL_KOPANO_WEBAPP_PLUGINS="$(ADDITIONAL_KOPANO_WEBAPP_PLUGINS)" \
--cache-from $(docker_repo)/kopano_$(component) \
--cache-from $(docker_repo)/kopano_$(component):builder \
-t $(docker_repo)/kopano_$(component) $(component)/
.PHONY: build-simple
build-simple: component ?= ssl
build-simple:
ifdef TRAVIS
@echo "fetching previous build to warm up build cache (only on travis)"
docker pull $(docker_repo)/kopano_$(component) || true
docker pull $(docker_repo)/kopano_$(component):builder || true
endif
docker build \
--cache-from $(docker_repo)/kopano_$(component) \
--cache-from $(docker_repo)/kopano_$(component):builder \
--build-arg docker_repo=$(docker_repo) \
-t $(docker_repo)/kopano_$(component) $(component)/
.PHONY: build-builder
build-builder: component ?= kdav
build-builder:
ifdef TRAVIS
@echo "fetching previous build to warm up build cache (only on travis)"
docker pull $(docker_repo)/kopano_$(component):builder || true
endif
docker build --target builder \
--build-arg docker_repo=${docker_repo} \
--build-arg KOPANO_CORE_VERSION=${core_download_version} \
--build-arg KOPANO_$(COMPONENT)_VERSION=${$(component)_download_version} \
--build-arg KOPANO_CORE_REPOSITORY_URL=$(KOPANO_CORE_REPOSITORY_URL) \
--build-arg KOPANO_MEET_REPOSITORY_URL=$(KOPANO_MEET_REPOSITORY_URL) \
--build-arg KOPANO_WEBAPP_REPOSITORY_URL=$(KOPANO_WEBAPP_REPOSITORY_URL) \
--build-arg KOPANO_WEBAPP_FILES_REPOSITORY_URL=$(KOPANO_WEBAPP_FILES_REPOSITORY_URL) \
--build-arg KOPANO_WEBAPP_MDM_REPOSITORY_URL=$(KOPANO_WEBAPP_MDM_REPOSITORY_URL) \
--build-arg KOPANO_WEBAPP_SMIME_REPOSITORY_URL=$(KOPANO_WEBAPP_SMIME_REPOSITORY_URL) \
--build-arg KOPANO_ZPUSH_REPOSITORY_URL=$(KOPANO_ZPUSH_REPOSITORY_URL) \
--build-arg RELEASE_KEY_DOWNLOAD=$(RELEASE_KEY_DOWNLOAD) \
--build-arg DOWNLOAD_COMMUNITY_PACKAGES=$(DOWNLOAD_COMMUNITY_PACKAGES) \
--build-arg ADDITIONAL_KOPANO_PACKAGES="$(ADDITIONAL_KOPANO_PACKAGES)" \
--build-arg ADDITIONAL_KOPANO_WEBAPP_PLUGINS="$(ADDITIONAL_KOPANO_WEBAPP_PLUGINS)" \
--cache-from $(docker_repo)/kopano_$(component) \
--cache-from $(docker_repo)/kopano_$(component):builder \
-t $(docker_repo)/kopano_$(component):builder $(component)/
build-base:
component=base make build
build-core: build-base
component=core make build
build-konnect:
component=konnect make build-simple
build-kwmserver:
component=kwmserver make build-simple
build-ldap-demo:
component=ldap_demo make build-simple
build-meet: build-base
component=meet make build
build-php: build-base
component=php make build
build-playground:
component=playground make build-builder
component=playground make build-simple
build-kdav:
component=kdav make build-builder
component=kdav make build
build-scheduler:
component=scheduler make build-simple
build-ssl:
component=ssl make build-simple
build-utils: build-core
component=utils make build
build-web:
component=web make build-simple
build-webapp: build-php
component=webapp make build
build-zpush:
component=zpush make build
tag-container: component ?= base
tag-container:
@echo 'create tag $($(component)_version)'
docker tag $(docker_repo)/kopano_$(component) $(docker_repo)/kopano_$(component):${$(component)_version}
@echo 'create tag latest'
docker tag $(docker_repo)/kopano_$(component) $(docker_repo)/kopano_$(component):latest
git commit -m 'ci: committing changes for $(component)' -- $(component) || true
git tag $(component)/${$(component)_version} || true
tag-base:
$(eval base_version := \
$(shell docker run --rm $(docker_repo)/kopano_base cat /kopano/buildversion))
component=base make tag-container
tag-core:
$(eval core_version := \
$(shell docker run --rm $(docker_repo)/kopano_core cat /kopano/buildversion | cut -d- -f2))
component=core make tag-container
tag-konnect:
$(eval konnect_version := \
$(shell docker run --rm $(docker_repo)/kopano_konnect env | grep CODE_VERSION | cut -d'=' -f2))
component=konnect make tag-container
tag-kwmserver:
$(eval kwmserver_version := \
$(shell docker run --rm $(docker_repo)/kopano_kwmserver env | grep CODE_VERSION | cut -d'=' -f2))
component=kwmserver make tag-container
tag-meet:
$(eval meet_version := \
$(shell docker run --rm $(docker_repo)/kopano_meet cat /kopano/buildversion | grep meet | cut -d- -f2 | cut -d+ -f1))
component=meet make tag-container
tag-php:
$(eval php_version := \
$(shell docker run --rm $(docker_repo)/kopano_php cat /kopano/buildversion | cut -d- -f2))
component=php make tag-container
tag-scheduler:
$(eval scheduler_version := \
$(shell docker run --rm $(docker_repo)/kopano_scheduler env | grep SUPERCRONIC_VERSION | cut -d'=' -f2))
component=scheduler make tag-container
tag-utils:
$(eval utils_version := \
$(shell docker run --rm $(docker_repo)/kopano_utils cat /kopano/buildversion | cut -d- -f2))
component=utils make tag-container
tag-web:
$(eval web_version := \
$(shell docker run --rm $(docker_repo)/kopano_web env | grep CODE_VERSION | cut -d'=' -f2))
component=web make tag-container
tag-webapp:
$(eval webapp_version := \
$(shell docker run --rm $(docker_repo)/kopano_webapp cat /kopano/buildversion | grep webapp | cut -d- -f2 | cut -d+ -f1 | head -n 1))
component=webapp make tag-container
tag-zpush:
$(eval zpush_version := \
$(shell docker run --rm $(docker_repo)/kopano_zpush cat /kopano/buildversion | tail -n 1 | grep -o -P '(?<=-).*(?=\+)'))
component=zpush make tag-container
# Docker publish
repo-login:
@docker login -u $(docker_login) -p $(docker_pwd)
publish: repo-login publish-base publish-core publish-kdav publish-konnect publish-kwmserver publish-meet publish-php publish-playground publish-scheduler publish-ssl publish-utils publish-web publish-webapp publish-zpush
publish-container: component ?= base
publish-container:
@echo 'publish latest to $(docker_repo)/kopano_$(component)'
docker push $(docker_repo)/kopano_$(component):${$(component)_version}
docker push $(docker_repo)/kopano_$(component):latest
publish-base: build-base tag-base
component=base make publish-container
publish-core: build-core tag-core
component=core make publish-container
publish-konnect: build-konnect tag-konnect
component=konnect make publish-container
publish-kwmserver: build-kwmserver tag-kwmserver
component=kwmserver make publish-container
publish-meet: build-meet tag-meet
component=meet make publish-container
publish-php: build-php tag-php
component=php make publish-container
publish-playground: build-playground
docker push $(docker_repo)/kopano_playground:latest
docker push $(docker_repo)/kopano_playground:builder
publish-kdav: build-kdav #tag-kdav
docker push $(docker_repo)/kopano_kdav:latest
docker push $(docker_repo)/kopano_kdav:builder
publish-scheduler: build-scheduler tag-scheduler
component=scheduler make publish-container
publish-ssl: build-ssl
docker push $(docker_repo)/kopano_ssl:latest
publish-utils: build-core build-utils tag-utils
component=utils make publish-container
publish-web: build-web tag-web
component=web make publish-container
publish-webapp: build-webapp tag-webapp
component=webapp make publish-container
publish-zpush: build-zpush tag-zpush
component=zpush make publish-container
check-scripts:
grep -rIl '^#![[:blank:]]*/bin/\(bash\|sh\|zsh\)' \
--exclude-dir=.git --exclude=*.sw? \
| xargs shellcheck -x
# List files which name starts with 'Dockerfile'
# eg. Dockerfile, Dockerfile.build, etc.
git ls-files --exclude='Dockerfile*' --ignored | xargs --max-lines=1 hadolint
test:
docker-compose -f $(COMPOSE_FILE) down -v --remove-orphans || true
make build-all
docker-compose -f $(COMPOSE_FILE) build
docker-compose -f $(COMPOSE_FILE) up -d
docker-compose -f $(COMPOSE_FILE) ps
test-update-env:
docker-compose -f $(COMPOSE_FILE) up -d
test-ci:
docker-compose -f $(COMPOSE_FILE) -f tests/test-container.yml build
docker-compose -f $(COMPOSE_FILE) -f tests/test-container.yml up -d
docker-compose -f $(COMPOSE_FILE) -f tests/test-container.yml ps
docker wait kopano_test_1
docker logs --tail 10 kopano_test_1
docker-compose -f $(COMPOSE_FILE) -f tests/test-container.yml stop 2>/dev/null
test-quick:
docker-compose -f $(COMPOSE_FILE) stop || true
docker-compose -f $(COMPOSE_FILE) up -d
docker-compose -f $(COMPOSE_FILE) ps
test-stop:
docker-compose -f $(COMPOSE_FILE) stop || true
default: build-all