From a3e01e42a583c451d2af2ef9e603cebd2799fda4 Mon Sep 17 00:00:00 2001 From: B&R Date: Tue, 21 Mar 2023 13:58:03 +0100 Subject: [PATCH] refactor: Extract environment setup int env.mk as a preparation for making it a part of CI --- .env | 4 ++++ .github/workflows/test.yaml | 8 +++---- Makefile | 37 ++++------------------------ env.mk | 48 +++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 36 deletions(-) create mode 100644 .env create mode 100644 env.mk diff --git a/.env b/.env new file mode 100644 index 00000000..511ab544 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +ENV_CLUSTER_NAME=rkt +ENV_NS=backups +ENV_APP_SVC=server-backup-repository-server +ENV_PORT_FORWARD=8050:8080 diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 6f1b12b7..c7aafb7c 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -29,15 +29,15 @@ jobs: - name: Test run: "make test" - if: "!contains(github.event.head_commit.message, 'test skip')" + if: "!contains(github.event.head_commit.message, '!test skip')" - name: Convert coverage to lcov format uses: jandelgado/gcov2lcov-action@v1.0.8 - if: "!contains(github.event.head_commit.message, 'test skip')" + if: "!contains(github.event.head_commit.message, '!test skip')" - name: Coveralls uses: coverallsapp/github-action@1.1.3 - if: "!contains(github.event.head_commit.message, 'test skip')" + if: "!contains(github.event.head_commit.message, '!test skip')" with: github-token: ${{ secrets.github_token }} path-to-lcov: coverage.lcov @@ -48,7 +48,7 @@ jobs: - name: Create Arch Linux package to check if PKGBUILD works uses: 2m/arch-pkgbuild-builder@v1.18 - if: "!contains(github.event.head_commit.message, 'pkg skip')" + if: "!contains(github.event.head_commit.message, '!pkg skip')" with: target: 'pkgbuild' pkgname: './' diff --git a/Makefile b/Makefile index e578a462..859c91a3 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,5 @@ +include env.mk + SUDO= .EXPORT_ALL_VARIABLES: @@ -11,42 +13,13 @@ build: test: ## Unit tests go test -v ./... -covermode=count -coverprofile=coverage.out -integration-test: prepare-tools skaffold-deploy _pytest ## End-To-End tests with Kubernetes +integration-test: prepare-tools _prepare-env _pytest ## End-To-End tests with Kubernetes _pytest: ## Shortcut for E2E tests without setting up the environment pipenv sync pipenv run pytest -s -k3d: prepare-tools - (${SUDO} docker ps | grep k3d-bmt-server-0 > /dev/null 2>&1) || ${SUDO} k3d cluster create bmt --registry-create bmt-registry:0.0.0.0:5000 --agents 1 -p "30080:30080@agent:0" -p "30081:30081@agent:0" -p "30050:30050@agent:0" - k3d kubeconfig merge bmt - kubectl create ns backups || true - cat /etc/hosts | grep "bmt-registry" > /dev/null || (sudo /bin/bash -c "echo '127.0.0.1 bmt-registry' >> /etc/hosts") - -prepare-tools: - mkdir -p .build - # skaffold - @test -f ./.build/skaffold || (curl -sL https://storage.googleapis.com/skaffold/releases/v2.0.0/skaffold-linux-amd64 --output ./.build/skaffold && chmod +x ./.build/skaffold) - # kubectl - @test -f ./.build/kubectl || (curl -sL https://dl.k8s.io/release/v1.25.0/bin/linux/amd64/kubectl --output ./.build/kubectl && chmod +x ./.build/kubectl) - # k3d - @test -f ./.build/k3d || (curl -sL https://github.com/k3d-io/k3d/releases/download/v5.4.6/k3d-linux-amd64 --output ./.build/k3d && chmod +x ./.build/k3d) - # helm - @test -f ./.build/helm || (curl -sL https://get.helm.sh/helm-v3.10.2-linux-amd64.tar.gz --output /tmp/helm.tar.gz && tar xf /tmp/helm.tar.gz -C /tmp && mv /tmp/linux-amd64/helm ./.build/helm && chmod +x ./.build/helm) - # kubens - @test -f ./.build/kubens || (curl -sL https://raw.githubusercontent.com/ahmetb/kubectx/master/kubens --output ./.build/kubens && chmod +x ./.build/kubens) - -skaffold-deploy: prepare-tools - skaffold deploy -p deps - skaffold build -p app --tag e2e --default-repo bmt-registry:5000 --push --insecure-registry bmt-registry:5000 --disable-multi-platform-build=true --detect-minikube=false --cache-artifacts=false - skaffold deploy -p app --tag e2e --assume-yes=true --default-repo bmt-registry:5000 - - export KUBECONFIG=~/.k3d/kubeconfig-bmt.yaml; kubectl apply -f "docs/examples/" -n backups; \ - kubectl port-forward svc/server-backup-repository-server -n backups 8050:8080 & - - -dev: ## Runs the development environment in Kubernetes - skaffold deploy -p deps - skaffold dev -p app --tag e2e --assume-yes=true --default-repo bmt-registry:5000 --force=true +_prepare-env: + kubectl apply -f "docs/examples/" -n backups run: export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE; \ diff --git a/env.mk b/env.mk new file mode 100644 index 00000000..c34af570 --- /dev/null +++ b/env.mk @@ -0,0 +1,48 @@ +SUDO= + +ifneq (,$(wildcard ./.env)) + include .env + export +endif + +# default values +ENV_CLUSTER_NAME ?= "rkt" +ENV_NS ?= "default" +ENV_APP_SVC ?= "service-name" +ENV_PORT_FORWARD ?= "8050:8080" + + +.EXPORT_ALL_VARIABLES: +PATH = $(shell pwd)/.build:$(shell echo $$PATH) +KUBECONFIG = $(shell echo "$$HOME/.k3d/kubeconfig-${ENV_CLUSTER_NAME}.yaml") + +k3d: prepare-tools + (${SUDO} docker ps | grep k3d-${ENV_CLUSTER_NAME}-server-0 > /dev/null 2>&1) || ${SUDO} k3d cluster create ${ENV_CLUSTER_NAME} --registry-create ${ENV_CLUSTER_NAME}-registry:0.0.0.0:5000 --agents 0 + k3d kubeconfig merge ${ENV_CLUSTER_NAME} + kubectl create ns ${ENV_NS} || true + cat /etc/hosts | grep "${ENV_CLUSTER_NAME}-registry" > /dev/null || (sudo /bin/bash -c "echo '127.0.0.1 ${ENV_CLUSTER_NAME}-registry' >> /etc/hosts") + +prepare-tools: ## Installs required tools + mkdir -p .build + # skaffold + @test -f ./.build/skaffold || (curl -sL https://storage.googleapis.com/skaffold/releases/v2.2.0/skaffold-linux-amd64 --output ./.build/skaffold && chmod +x ./.build/skaffold) + # kubectl + @test -f ./.build/kubectl || (curl -sL https://dl.k8s.io/release/v1.26.0/bin/linux/amd64/kubectl --output ./.build/kubectl && chmod +x ./.build/kubectl) + # k3d + @test -f ./.build/k3d || (curl -sL https://github.com/k3d-io/k3d/releases/download/v5.4.6/k3d-linux-amd64 --output ./.build/k3d && chmod +x ./.build/k3d) + # helm + @test -f ./.build/helm || (curl -sL https://get.helm.sh/helm-v3.11.2-linux-amd64.tar.gz --output /tmp/helm.tar.gz && tar xf /tmp/helm.tar.gz -C /tmp && mv /tmp/linux-amd64/helm ./.build/helm && chmod +x ./.build/helm) + # kubens + @test -f ./.build/kubens || (curl -sL https://raw.githubusercontent.com/ahmetb/kubectx/master/kubens --output ./.build/kubens && chmod +x ./.build/kubens) + +skaffold-deploy: prepare-tools ## Deploys app with dependencies using Skaffold + skaffold deploy -p deps + skaffold build -p app --tag e2e --default-repo ${ENV_CLUSTER_NAME}-registry:5000 --push --insecure-registry ${ENV_CLUSTER_NAME}-registry:5000 --disable-multi-platform-build=true --detect-minikube=false --cache-artifacts=false + skaffold deploy -p app --tag e2e --assume-yes=true --default-repo ${ENV_CLUSTER_NAME}-registry:5000 + + export KUBECONFIG=~/.k3d/kubeconfig-${ENV_CLUSTER_NAME}.yaml + kubectl port-forward svc/${ENV_APP_SVC} -n ${ENV_NS} ${ENV_PORT_FORWARD} & + +dev: ## Runs the development environment in Kubernetes + skaffold deploy -p deps + skaffold dev -p app --tag e2e --assume-yes=true --default-repo ${ENV_CLUSTER_NAME}-registry:5000 --force=true