From a3acd6c4277355041b353d608009244f9fd9e164 Mon Sep 17 00:00:00 2001 From: kahoona77 Date: Mon, 1 Jul 2024 12:24:27 +0200 Subject: [PATCH] Feature/149 update baseimage (#150) * #149 update makefiles * #149 update base image * #149 update makefiles * #142 Use local config for persistent state Move state that should be persistent between restarts to local config. * #142 Add default for check to avoid error * #142 Add comment * #142 Remove state since it is not used * #142 Update makefiles and include k8s-dogu targets * #142 Fix bats tests * #149 update makefiles * #149 update changelog --------- Co-authored-by: Jeremias Weber --- .env.template | 6 +++ .gitignore | 1 + CHANGELOG.md | 3 ++ Dockerfile | 6 +-- Makefile | 3 +- batsTests/logging.bats | 6 +-- build/make/build.mk | 2 +- build/make/k8s-component.mk | 25 ++++++----- build/make/k8s-crd.mk | 18 ++++---- build/make/k8s-dogu.mk | 16 +++---- build/make/k8s.mk | 85 +++++++++++++++++++++++++++++------ build/make/mocks.mk | 2 +- build/make/static-analysis.mk | 6 +-- resources/logging.sh | 1 - resources/post-upgrade.sh | 2 - resources/startup.sh | 9 ---- 16 files changed, 124 insertions(+), 67 deletions(-) create mode 100644 .env.template diff --git a/.env.template b/.env.template new file mode 100644 index 00000000..abfa3906 --- /dev/null +++ b/.env.template @@ -0,0 +1,6 @@ +STAGE=development +LOG_LEVEL=debug +NAMESPACE=ecosystem + +# Use this to deploy to remote k8s-clusters +# RUNTIME_ENV=remote diff --git a/.gitignore b/.gitignore index 2ade773b..30afd6d1 100644 --- a/.gitignore +++ b/.gitignore @@ -490,3 +490,4 @@ app/.project **/target/** **/build/tmp/** .npmrc +.bin/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c3558ae..1de814bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Changed +- Update base-image to java:8u402-3 to use doguctl v0.12.0 (#92) +- Remove state since it is not used (#142) ## [v1.14.3-2] - 2024-06-06 ### Fixed diff --git a/Dockerfile b/Dockerfile index 8471ce61..d07caa85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ COPY app/ . RUN ./mvnw package -FROM registry.cloudogu.com/official/base:3.17.3-2 as tomcat +FROM registry.cloudogu.com/official/base:3.20.1-2 as tomcat ARG TOMCAT_MAJOR_VERSION ARG TOMCAT_VERSION @@ -38,7 +38,7 @@ RUN set -eux && \ && rm "apache-tomcat-${TOMCAT_VERSION}.tar" -FROM registry.cloudogu.com/official/java:8u392-1 AS binaryConcentrator +FROM registry.cloudogu.com/official/java:8u402-3 AS binaryConcentrator # Prepare all file system actions here to achieve a simpler dogu build below. # Also this allows the developers to act on a finer granularity when it comes to file system changes ARG TOMCAT_VERSION @@ -68,7 +68,7 @@ RUN set -eux \ RUN chown -R tomcat:tomcat /opt/apache-tomcat -FROM registry.cloudogu.com/official/java:8u392-1 +FROM registry.cloudogu.com/official/java:8u402-3 ARG TOMCAT_VERSION diff --git a/Makefile b/Makefile index 390ebd9f..eec35b0d 100644 --- a/Makefile +++ b/Makefile @@ -7,13 +7,14 @@ ADDITIONAL_LDFLAGS="" NPM_REGISTRY_RELEASE=https://ecosystem.cloudogu.com/nexus/repository/npm-releases/ NPM_REGISTRY_RC=https://ecosystem.cloudogu.com/nexus/repository/npm-releasecandidates/ UI_SRC=app/src/main/ui -MAKEFILES_VERSION=9.0.1 +MAKEFILES_VERSION=9.1.0 .DEFAULT_GOAL:=default include build/make/variables.mk include build/make/self-update.mk include build/make/release.mk include build/make/bats.mk +include build/make/k8s-dogu.mk default: dogu-release diff --git a/batsTests/logging.bats b/batsTests/logging.bats index c526439b..973c6293 100644 --- a/batsTests/logging.bats +++ b/batsTests/logging.bats @@ -142,9 +142,8 @@ teardown() { run renderLoggingProperties assert_failure - assert_equal "$(mock_get_call_num "${doguctl}")" "2" + assert_equal "$(mock_get_call_num "${doguctl}")" "1" assert_equal "$(mock_get_call_args "${doguctl}" "1")" "template /opt/apache-tomcat/conf/logging.properties.tpl /opt/apache-tomcat/conf/logging.properties" - assert_equal "$(mock_get_call_args "${doguctl}" "2")" "state LoggingTemplateError" assert_line "Could not template log /opt/apache-tomcat/conf/logging.properties.tpl to path /opt/apache-tomcat/conf/logging.properties: exited with 1" } @test "renderLogbackXml() should fail on template error" { @@ -155,8 +154,7 @@ teardown() { run renderLogbackXml assert_failure - assert_equal "$(mock_get_call_num "${doguctl}")" "2" + assert_equal "$(mock_get_call_num "${doguctl}")" "1" assert_equal "$(mock_get_call_args "${doguctl}" "1")" "template /opt/apache-tomcat/conf/logback.xml.tpl /opt/apache-tomcat/webapps/usermgt/WEB-INF/classes/logback.xml" - assert_equal "$(mock_get_call_args "${doguctl}" "2")" "state LoggingTemplateError" assert_line "Could not template log /opt/apache-tomcat/conf/logback.xml.tpl to path /opt/apache-tomcat/webapps/usermgt/WEB-INF/classes/logback.xml: exited with 1" } diff --git a/build/make/build.mk b/build/make/build.mk index b102149b..857c11d4 100644 --- a/build/make/build.mk +++ b/build/make/build.mk @@ -3,7 +3,7 @@ ADDITIONAL_LDFLAGS?=-extldflags -static LDFLAGS?=-ldflags "$(ADDITIONAL_LDFLAGS) -X main.Version=$(VERSION) -X main.CommitID=$(COMMIT_ID)" GOIMAGE?=golang -GOTAG?=1.14.13 +GOTAG?=1.22 GOOS?=linux GOARCH?=amd64 PRE_COMPILE?= diff --git a/build/make/k8s-component.mk b/build/make/k8s-component.mk index 9d291839..6c1f6c41 100644 --- a/build/make/k8s-component.mk +++ b/build/make/k8s-component.mk @@ -2,7 +2,9 @@ COMPONENT_DEV_VERSION?=${VERSION}-dev include ${BUILD_DIR}/make/k8s.mk -BINARY_HELM_ADDITIONAL_PUSH_ARGS?=--plain-http +ifeq (${RUNTIME_ENV}, local) + BINARY_HELM_ADDITIONAL_PUSH_ARGS?=--plain-http +endif BINARY_HELM_ADDITIONAL_PACK_ARGS?= BINARY_HELM_ADDITIONAL_UNINST_ARGS?= BINARY_HELM_ADDITIONAL_UPGR_ARGS?= @@ -12,6 +14,9 @@ HELM_SOURCE_DIR ?= k8s/helm HELM_RELEASE_TGZ=${HELM_TARGET_DIR}/${ARTIFACT_ID}-${VERSION}.tgz HELM_DEV_RELEASE_TGZ=${HELM_TARGET_DIR}/${ARTIFACT_ID}-${COMPONENT_DEV_VERSION}.tgz HELM_ARTIFACT_NAMESPACE?=k8s +ifeq (${RUNTIME_ENV}, remote) + HELM_ARTIFACT_NAMESPACE?=testing/k8s +endif K8S_RESOURCE_COMPONENT ?= "${K8S_RESOURCE_TEMP_FOLDER}/component-${ARTIFACT_ID}-${VERSION}.yaml" K8S_RESOURCE_COMPONENT_CR_TEMPLATE_YAML ?= $(BUILD_DIR)/make/k8s-component.tpl @@ -75,12 +80,12 @@ helm-update-dependencies: ${BINARY_HELM} ## Update Helm chart dependencies .PHONY: helm-apply helm-apply: ${BINARY_HELM} check-k8s-namespace-env-var ${IMAGE_IMPORT_TARGET} helm-generate ${HELM_PRE_APPLY_TARGETS} ## Generates and installs the Helm chart. @echo "Apply generated helm chart" - @${BINARY_HELM} upgrade -i ${ARTIFACT_ID} ${HELM_TARGET_DIR} ${BINARY_HELM_ADDITIONAL_UPGR_ARGS} --namespace ${NAMESPACE} + @${BINARY_HELM} --kube-context="${KUBE_CONTEXT_NAME}" upgrade -i ${ARTIFACT_ID} ${HELM_TARGET_DIR} ${BINARY_HELM_ADDITIONAL_UPGR_ARGS} --namespace ${NAMESPACE} .PHONY: helm-delete helm-delete: ${BINARY_HELM} check-k8s-namespace-env-var ## Uninstalls the current Helm chart. @echo "Uninstall helm chart" - @${BINARY_HELM} uninstall ${ARTIFACT_ID} --namespace=${NAMESPACE} ${BINARY_HELM_ADDITIONAL_UNINST_ARGS} || true + @${BINARY_HELM} --kube-context="${KUBE_CONTEXT_NAME}" uninstall ${ARTIFACT_ID} --namespace=${NAMESPACE} ${BINARY_HELM_ADDITIONAL_UNINST_ARGS} || true .PHONY: helm-reinstall helm-reinstall: helm-delete helm-apply ## Uninstalls the current helm chart and reinstalls it. @@ -88,11 +93,11 @@ helm-reinstall: helm-delete helm-apply ## Uninstalls the current helm chart and .PHONY: helm-chart-import helm-chart-import: ${CHECK_VAR_TARGETS} helm-generate helm-package ${IMAGE_IMPORT_TARGET} ## Imports the currently available chart into the cluster-local registry. @if [[ ${STAGE} == "development" ]]; then \ - echo "Import ${HELM_DEV_RELEASE_TGZ} into K8s cluster ${K3CES_REGISTRY_URL_PREFIX}..."; \ - ${BINARY_HELM} push ${HELM_DEV_RELEASE_TGZ} oci://${K3CES_REGISTRY_URL_PREFIX}/${HELM_ARTIFACT_NAMESPACE} ${BINARY_HELM_ADDITIONAL_PUSH_ARGS}; \ + echo "Import ${HELM_DEV_RELEASE_TGZ} into K8s cluster ${CES_REGISTRY_HOST}..."; \ + ${BINARY_HELM} push ${HELM_DEV_RELEASE_TGZ} oci://${CES_REGISTRY_HOST}/${HELM_ARTIFACT_NAMESPACE} ${BINARY_HELM_ADDITIONAL_PUSH_ARGS}; \ else \ - echo "Import ${HELM_RELEASE_TGZ} into K8s cluster ${K3CES_REGISTRY_URL_PREFIX}..."; \ - ${BINARY_HELM} push ${HELM_RELEASE_TGZ} oci://${K3CES_REGISTRY_URL_PREFIX}/${HELM_ARTIFACT_NAMESPACE} ${BINARY_HELM_ADDITIONAL_PUSH_ARGS}; \ + echo "Import ${HELM_RELEASE_TGZ} into K8s cluster ${CES_REGISTRY_HOST}..."; \ + ${BINARY_HELM} push ${HELM_RELEASE_TGZ} oci://${CES_REGISTRY_HOST}/${HELM_ARTIFACT_NAMESPACE} ${BINARY_HELM_ADDITIONAL_PUSH_ARGS}; \ fi @echo "Done." @@ -115,7 +120,7 @@ ${HELM_RELEASE_TGZ}: ${BINARY_HELM} ${HELM_TARGET_DIR}/Chart.yaml ${HELM_POST_GE .PHONY: helm-delete-existing-tgz helm-delete-existing-tgz: ## Remove an existing Helm package from the target directory. @echo "Delete ${HELM_RELEASE_TGZ}*" - @rm -f ${HELM_RELEASE_TGZ}* + @rm -f ${HELM_TARGET_DIR}/${ARTIFACT_ID}-*.tgz ##@ K8s - Helm lint targets @@ -138,12 +143,12 @@ ${K8S_RESOURCE_COMPONENT_CR_TEMPLATE_YAML}: ${K8S_RESOURCE_TEMP_FOLDER} .PHONY: component-apply component-apply: check-k8s-namespace-env-var ${COMPONENT_PRE_APPLY_TARGETS} ${IMAGE_IMPORT_TARGET} helm-generate helm-chart-import component-generate ## Applies the component yaml resource to the actual defined context. - @kubectl apply -f "${K8S_RESOURCE_COMPONENT}" --namespace="${NAMESPACE}" + @kubectl apply -f "${K8S_RESOURCE_COMPONENT}" --namespace="${NAMESPACE}" --context="${KUBE_CONTEXT_NAME}" @echo "Done." .PHONY: component-delete component-delete: check-k8s-namespace-env-var component-generate $(K8S_POST_GENERATE_TARGETS) ## Deletes the component yaml resource from the actual defined context. - @kubectl delete -f "${K8S_RESOURCE_COMPONENT}" --namespace="${NAMESPACE}" || true + @kubectl delete -f "${K8S_RESOURCE_COMPONENT}" --namespace="${NAMESPACE}" --context="${KUBE_CONTEXT_NAME}" || true @echo "Done." .PHONY: component-reinstall diff --git a/build/make/k8s-crd.mk b/build/make/k8s-crd.mk index 4cbcd884..090b0290 100644 --- a/build/make/k8s-crd.mk +++ b/build/make/k8s-crd.mk @@ -62,19 +62,19 @@ validate-crd-chart: .PHONY: crd-helm-apply crd-helm-apply: ${BINARY_HELM} check-k8s-namespace-env-var crd-helm-generate ## Generates and installs the Helm CRD chart. @echo "Apply generated Helm CRD chart" - @${BINARY_HELM} upgrade -i ${ARTIFACT_CRD_ID} ${HELM_CRD_TARGET_DIR} ${BINARY_HELM_ADDITIONAL_UPGR_ARGS} --namespace ${NAMESPACE} + @${BINARY_HELM} --kube-context="${KUBE_CONTEXT_NAME}" upgrade -i ${ARTIFACT_CRD_ID} ${HELM_CRD_TARGET_DIR} ${BINARY_HELM_ADDITIONAL_UPGR_ARGS} --namespace ${NAMESPACE} .PHONY: crd-helm-delete crd-helm-delete: ${BINARY_HELM} check-k8s-namespace-env-var ## Uninstalls the current Helm CRD chart. @echo "Uninstall Helm CRD chart" - @${BINARY_HELM} uninstall ${ARTIFACT_CRD_ID} --namespace=${NAMESPACE} ${BINARY_HELM_ADDITIONAL_UNINST_ARGS} || true + @${BINARY_HELM} --kube-context="${KUBE_CONTEXT_NAME}" uninstall ${ARTIFACT_CRD_ID} --namespace=${NAMESPACE} ${BINARY_HELM_ADDITIONAL_UNINST_ARGS} || true .PHONY: crd-helm-package crd-helm-package: crd-helm-delete-existing-tgz ${HELM_CRD_RELEASE_TGZ} ## Generates and packages the Helm CRD chart. .PHONY: crd-helm-delete-existing-tgz crd-helm-delete-existing-tgz: ## Remove an existing Helm CRD package. - @rm -f ${HELM_CRD_RELEASE_TGZ}* + @rm -f ${HELM_CRD_TARGET_DIR}/${ARTIFACT_CRD_ID}-*.tgz ${HELM_CRD_RELEASE_TGZ}: ${BINARY_HELM} crd-helm-generate ## Generates and packages the Helm CRD chart. @echo "Package generated helm crd-chart" @@ -83,11 +83,11 @@ ${HELM_CRD_RELEASE_TGZ}: ${BINARY_HELM} crd-helm-generate ## Generates and packa .PHONY: crd-helm-chart-import crd-helm-chart-import: ${CHECK_VAR_TARGETS} check-k8s-artifact-id crd-helm-generate crd-helm-package ## Imports the currently available Helm CRD chart into the cluster-local registry. @if [[ ${STAGE} == "development" ]]; then \ - echo "Import ${HELM_CRD_DEV_RELEASE_TGZ} into K8s cluster ${K3CES_REGISTRY_URL_PREFIX}..."; \ - ${BINARY_HELM} push ${HELM_CRD_DEV_RELEASE_TGZ} oci://${K3CES_REGISTRY_URL_PREFIX}/${HELM_ARTIFACT_NAMESPACE} ${BINARY_HELM_ADDITIONAL_PUSH_ARGS}; \ + echo "Import ${HELM_CRD_DEV_RELEASE_TGZ} into K8s cluster ${CES_REGISTRY_HOST}..."; \ + ${BINARY_HELM} push ${HELM_CRD_DEV_RELEASE_TGZ} oci://${CES_REGISTRY_HOST}/${HELM_ARTIFACT_NAMESPACE} ${BINARY_HELM_ADDITIONAL_PUSH_ARGS}; \ else \ - echo "Import ${HELM_CRD_RELEASE_TGZ} into K8s cluster ${K3CES_REGISTRY_URL_PREFIX}..."; \ - ${BINARY_HELM} push ${HELM_CRD_RELEASE_TGZ} oci://${K3CES_REGISTRY_URL_PREFIX}/${HELM_ARTIFACT_NAMESPACE} ${BINARY_HELM_ADDITIONAL_PUSH_ARGS}; \ + echo "Import ${HELM_CRD_RELEASE_TGZ} into K8s cluster ${CES_REGISTRY_HOST}..."; \ + ${BINARY_HELM} push ${HELM_CRD_RELEASE_TGZ} oci://${CES_REGISTRY_HOST}/${HELM_ARTIFACT_NAMESPACE} ${BINARY_HELM_ADDITIONAL_PUSH_ARGS}; \ fi @echo "Done." @@ -106,10 +106,10 @@ crd-component-generate: ${K8S_RESOURCE_TEMP_FOLDER} ## Generate the CRD componen .PHONY: crd-component-apply crd-component-apply: check-k8s-namespace-env-var crd-helm-chart-import crd-component-generate ## Applies the CRD component YAML resource to the actual defined context. - @kubectl apply -f "${K8S_RESOURCE_CRD_COMPONENT}" --namespace="${NAMESPACE}" + @kubectl apply -f "${K8S_RESOURCE_CRD_COMPONENT}" --namespace="${NAMESPACE}" --context="${KUBE_CONTEXT_NAME}" @echo "Done." .PHONY: crd-component-delete crd-component-delete: check-k8s-namespace-env-var crd-component-generate ## Deletes the CRD component YAML resource from the actual defined context. - @kubectl delete -f "${K8S_RESOURCE_CRD_COMPONENT}" --namespace="${NAMESPACE}" || true + @kubectl delete -f "${K8S_RESOURCE_CRD_COMPONENT}" --namespace="${NAMESPACE}" --context="${KUBE_CONTEXT_NAME}" || true @echo "Done." diff --git a/build/make/k8s-dogu.mk b/build/make/k8s-dogu.mk index 9c244a32..e656b173 100644 --- a/build/make/k8s-dogu.mk +++ b/build/make/k8s-dogu.mk @@ -3,15 +3,13 @@ DOGU_JSON_FILE=${WORKDIR}/dogu.json DOGU_JSON_DEV_FILE=${WORKDIR}/${TARGET_DIR}/dogu.json # Name of the dogu is extracted from the dogu.json -ARTIFACT_ID=$(shell $(BINARY_YQ) -e ".Name" $(DOGU_JSON_FILE) | sed "s|.*/||g") +ARTIFACT_ID=$(shell $(BINARY_YQ) -oy -e ".Name" $(DOGU_JSON_FILE) | sed "s|.*/||g") # Namespace of the dogu is extracted from the dogu.json -ARTIFACT_NAMESPACE=$(shell $(BINARY_YQ) -e ".Name" $(DOGU_JSON_FILE) | sed "s|/.*||g") +ARTIFACT_NAMESPACE=$(shell $(BINARY_YQ) -oy -e ".Name" $(DOGU_JSON_FILE) | sed "s|/.*||g") # Version of the dogu is extracted from the dogu.json -VERSION=$(shell $(BINARY_YQ) -e ".Version" $(DOGU_JSON_FILE)) +VERSION=$(shell $(BINARY_YQ) -oy -e ".Version" $(DOGU_JSON_FILE)) # Image of the dogu is extracted from the dogu.json -IMAGE=$(shell $(BINARY_YQ) -e ".Image" $(DOGU_JSON_FILE)):$(VERSION) -IMAGE_DEV_WITHOUT_TAG=$(shell $(BINARY_YQ) -e ".Image" $(DOGU_JSON_FILE) | sed "s|registry\.cloudogu\.com\(.\+\)|${K3CES_REGISTRY_URL_PREFIX}\1|g") -IMAGE_DEV=${IMAGE_DEV_WITHOUT_TAG}:${VERSION} +IMAGE=$(shell $(BINARY_YQ) -oy -e ".Image" $(DOGU_JSON_FILE)):$(VERSION) include $(BUILD_DIR)/make/k8s.mk @@ -37,13 +35,13 @@ create-dogu-resource: ${BINARY_YQ} $(K8S_RESOURCE_TEMP_FOLDER) .PHONY: apply-dogu-resource apply-dogu-resource: - @kubectl apply -f "$(K8S_RESOURCE_DOGU)" + @kubectl --context="${KUBE_CONTEXT_NAME}" --namespace=${NAMESPACE} apply -f "$(K8S_RESOURCE_DOGU)" ##@ K8s - Dogu .PHONY: install-dogu-descriptor install-dogu-descriptor: ${BINARY_YQ} $(TARGET_DIR) ## Installs a configmap with current dogu.json into the cluster. @echo "Generate configmap from dogu.json..." - @$(BINARY_YQ) ".Image=\"${IMAGE_DEV_WITHOUT_TAG}\"" ${DOGU_JSON_FILE} > ${DOGU_JSON_DEV_FILE} - @kubectl create configmap "$(ARTIFACT_ID)-descriptor" --from-file=$(DOGU_JSON_DEV_FILE) --dry-run=client -o yaml | kubectl apply -f - --namespace=${NAMESPACE} + @$(BINARY_YQ) -oj ".Image=\"${IMAGE_DEV}\" | .Version=\"${VERSION}\"" ${DOGU_JSON_FILE} > ${DOGU_JSON_DEV_FILE} + @kubectl --context="${KUBE_CONTEXT_NAME}" create configmap "$(ARTIFACT_ID)-descriptor" --from-file=$(DOGU_JSON_DEV_FILE) --dry-run=client -o yaml | kubectl --context="${KUBE_CONTEXT_NAME}" --namespace=${NAMESPACE} apply -f - @echo "Done." diff --git a/build/make/k8s.mk b/build/make/k8s.mk index 0f9fe02a..9f798f46 100644 --- a/build/make/k8s.mk +++ b/build/make/k8s.mk @@ -11,7 +11,7 @@ BINARY_YQ_4_VERSION?=v4.40.3 BINARY_HELM = $(UTILITY_BIN_PATH)/helm BINARY_HELM_VERSION?=v3.13.0 CONTROLLER_GEN = $(UTILITY_BIN_PATH)/controller-gen -CONTROLLER_GEN_VERSION?=v0.13.0 +CONTROLLER_GEN_VERSION?=v0.14.0 # Setting SHELL to bash allows bash commands to be executed by recipes. # Options are set to exit when a recipe line exits non-zero or a piped command fails. @@ -22,14 +22,48 @@ SHELL = /usr/bin/env bash -o pipefail IMAGE ?= # Set production as default stage. Use "development" as stage in your .env file to generate artifacts -# with development images pointing to K3S_CLUSTER_FQDN. +# with development images pointing to CES_REGISTRY_URL_PREFIX. STAGE?=production + +# Set the "local" as runtime-environment, to push images to the container-registry of the local cluster and to apply resources to the local cluster. +# Use "remote" as runtime-environment in your .env file to push images to the container-registry at "registry.cloudogu.com/testing" and to apply resources to the configured kubernetes-context in KUBE_CONTEXT_NAME. +RUNTIME_ENV?=local +$(info RUNTIME_ENV=$(RUNTIME_ENV)) + +# The host and port of the local cluster K3S_CLUSTER_FQDN?=k3ces.local K3S_LOCAL_REGISTRY_PORT?=30099 -K3CES_REGISTRY_URL_PREFIX="${K3S_CLUSTER_FQDN}:${K3S_LOCAL_REGISTRY_PORT}" + +# The URL of the container-registry to use. Defaults to the registry of the local-cluster. +# If RUNTIME_ENV is "remote" it is "registry.cloudogu.com/testing" +CES_REGISTRY_HOST?="${K3S_CLUSTER_FQDN}:${K3S_LOCAL_REGISTRY_PORT}" +CES_REGISTRY_NAMESPACE ?= +ifeq (${RUNTIME_ENV}, remote) + CES_REGISTRY_HOST="registry.cloudogu.com" + CES_REGISTRY_NAMESPACE="/testing" +endif +$(info CES_REGISTRY_HOST=$(CES_REGISTRY_HOST)) + +# The name of the kube-context to use for applying resources. +# If KUBE_CONTEXT_NAME is empty and RUNTIME_ENV is "remote" the currently configured kube-context is used. +# If KUBE_CONTEXT_NAME is empty and RUNTIME_ENV is not "remote" the "k3ces.local" is used as kube-context. +ifeq (${KUBE_CONTEXT_NAME}, ) + ifeq (${RUNTIME_ENV}, remote) + KUBE_CONTEXT_NAME = $(shell kubectl config current-context) + else + KUBE_CONTEXT_NAME = k3ces.local + endif +endif +$(info KUBE_CONTEXT_NAME=$(KUBE_CONTEXT_NAME)) + +# The git branch-name in lowercase, shortened to 63 bytes, and with everything except 0-9 and a-z replaced with -. No leading / trailing -. +GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/-/g; s/^-+|-+$$//g' | cut -c1-63) +# The short git commit-hash +GIT_HASH := $(shell git rev-parse --short HEAD) + ## Image URL to use all building/pushing image targets -IMAGE_DEV?=${K3CES_REGISTRY_URL_PREFIX}/${ARTIFACT_ID} -IMAGE_DEV_VERSION=${IMAGE_DEV}:${VERSION} +IMAGE_DEV?=$(CES_REGISTRY_HOST)$(CES_REGISTRY_NAMESPACE)/$(ARTIFACT_ID)/$(GIT_BRANCH) +IMAGE_DEV_VERSION=$(IMAGE_DEV):$(VERSION) # Variables for the temporary yaml files. These are used as template to generate a development resource containing # the current namespace and the dev image. @@ -64,13 +98,36 @@ check-k8s-artifact-id: .PHONY: check-etc-hosts check-etc-hosts: - @grep -E "^.+\s+${K3S_CLUSTER_FQDN}\$$" /etc/hosts > /dev/null || \ - (echo "Missing /etc/hosts entry for ${K3S_CLUSTER_FQDN}" && exit 1) + @if [[ ${RUNTIME_ENV} == "local" ]]; then \ + grep -E "^.+\s+${K3S_CLUSTER_FQDN}\$$" /etc/hosts > /dev/null || \ + (echo "Missing /etc/hosts entry for ${K3S_CLUSTER_FQDN}" && exit 1) \ + fi .PHONY: check-insecure-cluster-registry check-insecure-cluster-registry: - @grep "${K3CES_REGISTRY_URL_PREFIX}" /etc/docker/daemon.json > /dev/null || \ - (echo "Missing /etc/docker/daemon.json for ${K3CES_REGISTRY_URL_PREFIX}" && exit 1) + @if [[ ${RUNTIME_ENV} == "local" ]]; then \ + grep "${CES_REGISTRY_HOST}" /etc/docker/daemon.json > /dev/null || \ + (echo "Missing /etc/docker/daemon.json for ${CES_REGISTRY_HOST}" && exit 1) \ + fi + +# If the RUNTIME_ENV is "remote" checks if the current docker-client has credentials for CES_REGISTRY_HOST +# If no credentials could be found, the credentials are queried and docker-login is performed +check-docker-credentials: + @if [[ "$(RUNTIME_ENV)" == "remote" ]]; then \ + if ! grep -q $(CES_REGISTRY_HOST) ~/.docker/config.json ; then \ + echo "Error: Docker is not logged in to $(CES_REGISTRY_HOST)"; \ + read -p "Enter Docker Username for $(CES_REGISTRY_HOST): " username; \ + read -sp "Enter Docker Password for $(CES_REGISTRY_HOST): " password; \ + echo ""; \ + echo "$$password" | docker login -u "$$username" --password-stdin $(CES_REGISTRY_HOST); \ + if [ $$? -eq 0 ]; then \ + echo "Docker login to $(CES_REGISTRY_HOST) successful"; \ + else \ + echo "Docker login to $(CES_REGISTRY_HOST) failed"; \ + exit 1; \ + fi \ + fi \ + fi ##@ K8s - Resources @@ -81,7 +138,7 @@ ${K8S_RESOURCE_TEMP_FOLDER}: ##@ K8s - Docker .PHONY: docker-build -docker-build: check-k8s-image-env-var ## Builds the docker image of the K8s app. +docker-build: check-docker-credentials check-k8s-image-env-var ## Builds the docker image of the K8s app. @echo "Building docker image $(IMAGE)..." @DOCKER_BUILDKIT=1 docker build . -t $(IMAGE) @@ -93,13 +150,13 @@ docker-dev-tag: check-k8s-image-dev-var docker-build ## Tags a Docker image for .PHONY: check-k8s-image-dev-var check-k8s-image-dev-var: ifeq (${IMAGE_DEV},) - @echo "Missing make variable IMAGE_DEV detected. It should look like \$${K3CES_REGISTRY_URL_PREFIX}/docker-image:tag" + @echo "Missing make variable IMAGE_DEV detected. It should look like \$${CES_REGISTRY_HOST}/docker-image:tag" @exit 19 endif .PHONY: image-import -image-import: check-all-vars check-k8s-artifact-id docker-dev-tag ## Imports the currently available image into the cluster-local registry. - @echo "Import $(IMAGE_DEV_VERSION) into K8s cluster ${K3S_CLUSTER_FQDN}..." +image-import: check-all-vars check-k8s-artifact-id docker-dev-tag ## Imports the currently available image into the configured ces-registry. + @echo "Import $(IMAGE_DEV_VERSION) into K8s cluster ${KUBE_CONTEXT_NAME}..." @docker push $(IMAGE_DEV_VERSION) @echo "Done." @@ -145,4 +202,4 @@ ENVTEST = $(UTILITY_BIN_PATH)/setup-envtest envtest: ${ENVTEST} ## Download envtest-setup locally if necessary. ${ENVTEST}: - $(call go-get-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest@latest) \ No newline at end of file + $(call go-get-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest@latest) diff --git a/build/make/mocks.mk b/build/make/mocks.mk index e3133693..4c9697f0 100644 --- a/build/make/mocks.mk +++ b/build/make/mocks.mk @@ -1,7 +1,7 @@ ##@ Mocking MOCKERY_BIN=${UTILITY_BIN_PATH}/mockery -MOCKERY_VERSION=v2.20.0 +MOCKERY_VERSION?=v2.42.1 MOCKERY_YAML=${WORKDIR}/.mockery.yaml ${MOCKERY_BIN}: ${UTILITY_BIN_PATH} diff --git a/build/make/static-analysis.mk b/build/make/static-analysis.mk index 70e64685..0ed0de33 100644 --- a/build/make/static-analysis.mk +++ b/build/make/static-analysis.mk @@ -2,14 +2,14 @@ STATIC_ANALYSIS_DIR=$(TARGET_DIR)/static-analysis GOIMAGE?=golang -GOTAG?=1.18 +GOTAG?=1.22 CUSTOM_GO_MOUNT?=-v /tmp:/tmp REVIEW_DOG=$(TMP_DIR)/bin/reviewdog LINT=$(TMP_DIR)/bin/golangci-lint -LINT_VERSION?=v1.49.0 +LINT_VERSION?=v1.58.2 # ignore tests and mocks -LINTFLAGS=--tests=false --skip-files="^.*_mock.go$$" --skip-files="^.*/mock.*.go$$" --timeout 10m --issues-exit-code 0 +LINTFLAGS=--tests=false --exclude-files="^.*_mock.go$$" --exclude-files="^.*/mock.*.go$$" --timeout 10m --issues-exit-code 0 ADDITIONAL_LINTER=-E bodyclose -E containedctx -E contextcheck -E decorder -E dupl -E errname -E forcetypeassert -E funlen -E unparam .PHONY: static-analysis diff --git a/resources/logging.sh b/resources/logging.sh index 2849b4f4..8f6f6e08 100755 --- a/resources/logging.sh +++ b/resources/logging.sh @@ -84,7 +84,6 @@ renderLoggingFile() { doguctl template ${template} ${targetFile} || templatingSuccessful=$? if [[ ${templatingSuccessful} -ne 0 ]]; then - doguctl state "LoggingTemplateError" echo "Could not template log ${template} to path ${targetFile}: exited with ${templatingSuccessful}" sleep ${DEFAULT_SLEEP_IN_SECS_BEFORE_ERROR} exit 2 diff --git a/resources/post-upgrade.sh b/resources/post-upgrade.sh index 52c3d723..b6cf63c7 100755 --- a/resources/post-upgrade.sh +++ b/resources/post-upgrade.sh @@ -11,7 +11,6 @@ function checkSameVersion() { if [ "${FROM_VERSION}" = "${TO_VERSION}" ]; then echo "FROM and TO versions are the same" echo "Set registry flag so startup script can start afterwards..." - doguctl state "upgrade done" echo "Exiting..." exit 0 fi @@ -41,7 +40,6 @@ function run_postupgrade() { removeDeprecatedKeys echo "Set registry flag so startup script can start afterwards..." - doguctl state "upgrade done" echo "Executing Usermgt post-upgrade from ${FROM_VERSION} to ${TO_VERSION} ... Done!" } diff --git a/resources/startup.sh b/resources/startup.sh index ef907543..65e28363 100755 --- a/resources/startup.sh +++ b/resources/startup.sh @@ -36,14 +36,6 @@ printCloudoguLogo() { echo " 'V/(/////////////////////////////V' " } -waitForPostUpgrade() { - # check whether post-upgrade script is still running - while [[ "$(doguctl state)" == "upgrading" ]]; do - echo "Upgrade script is running. Waiting..." - sleep 3 - done -} - encryptLdapPassword() { LDAP_BIND_PASSWORD="$(${CIPHER_SH} encrypt "$(doguctl config -e sa-ldap/password)" | tail -1)" export LDAP_BIND_PASSWORD @@ -113,7 +105,6 @@ startTomcat() { runMain() { printCloudoguLogo - waitForPostUpgrade encryptLdapPassword copyConfigurationResources buildMailAddress