Skip to content
This repository has been archived by the owner on May 10, 2024. It is now read-only.

Commit

Permalink
refactor: Extract environment setup int env.mk as a preparation for m…
Browse files Browse the repository at this point in the history
…aking it a part of CI
  • Loading branch information
B&R committed Mar 21, 2023
1 parent 595603a commit a3e01e4
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 36 deletions.
4 changes: 4 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ENV_CLUSTER_NAME=rkt
ENV_NS=backups
ENV_APP_SVC=server-backup-repository-server
ENV_PORT_FORWARD=8050:8080
8 changes: 4 additions & 4 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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: './'
Expand Down
37 changes: 5 additions & 32 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
include env.mk

SUDO=

.EXPORT_ALL_VARIABLES:
Expand All @@ -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; \
Expand Down
48 changes: 48 additions & 0 deletions env.mk
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit a3e01e4

Please sign in to comment.