diff --git a/argo-workflows/acr-pusher.yaml b/argo-workflows/acr-pusher.yaml new file mode 100644 index 0000000..fba4ecf --- /dev/null +++ b/argo-workflows/acr-pusher.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: edu-agentpool + namespace: argo diff --git a/argo-workflows/argo-workflow-manager-role.yaml b/argo-workflows/argo-workflow-manager-role.yaml new file mode 100644 index 0000000..1a264d2 --- /dev/null +++ b/argo-workflows/argo-workflow-manager-role.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + namespace: argo + name: argo-workflow-manager +rules: + - apiGroups: ["argoproj.io"] + resources: ["workflowtaskresults"] + verbs: ["create", "get", "list", "update", "patch", "delete"] + - apiGroups: ["argoproj.io"] + resources: ["workflows"] + verbs: ["create", "get", "list", "update", "patch", "delete"] diff --git a/argo-workflows/build.yaml b/argo-workflows/build.yaml new file mode 100644 index 0000000..b773e95 --- /dev/null +++ b/argo-workflows/build.yaml @@ -0,0 +1,91 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: build-workflow +spec: + entrypoint: main + serviceAccountName: edu-agentpool + templates: + + - name: main + steps: + - - name: checkout + template: git-checkout + - - name: test-python + template: python-tests + - - name: build-and-test-image + template: docker-goss-test + - - name: deploy + template: push-docker-image + + # ๐Ÿ“ฆ GIT CHECKOUT + - name: git-checkout + script: + image: alpine/git + command: [sh] + source: | + git clone https://gitea.marcin00.pl/pikram/user-microservice.git /workspace + cd /workspace + git checkout main + volumeMounts: + - name: workspace + mountPath: /workspace + + # ๐Ÿงช PYTHON TESTS + - name: python-tests + script: + image: python:3.11.7-alpine + command: [sh] + source: | + cd /workspace/api + python3 -m venv env + . env/bin/activate + pip install -r requirements.txt pytest + python3 -m pytest --junit-xml=/workspace/pytest_junit.xml + volumeMounts: + - name: workspace + mountPath: /workspace + + # ๐Ÿณ BUILDS AND GOSS TESTS + - name: docker-goss-test + script: + image: docker:cli + command: [sh] + source: | + cd /workspace + docker build -t ${DOCKER_IMAGE} . + + curl -s -L https://github.com/aelsabbahy/goss/releases/latest/download/goss-linux-amd64 -o goss + curl -s -L https://github.com/aelsabbahy/goss/releases/latest/download/dgoss -o dgoss + chmod +rx *goss + + export GOSS_OPTS="-f junit" + export GOSS_PATH=./goss + export GOSS_SLEEP=3 + ./dgoss run -e SQLALCHEMY_DATABASE_URI=sqlite:///:memory: ${DOCKER_IMAGE} > /workspace/goss_junit.xml + env: + - name: DOCKER_IMAGE + value: marcin00.azurecr.io/user-microservice:$(WORKFLOW_ID) + volumeMounts: + - name: workspace + mountPath: /workspace + + # ๐Ÿš€ DEPLOY + - name: push-docker-image + script: + image: mcr.microsoft.com/azure-cli + command: [sh] + source: | + az login --identity + az acr login --name ${ACR_NAME} + docker push ${DOCKER_IMAGE} + env: + - name: ACR_NAME + value: marcin00 + - name: DOCKER_IMAGE + value: marcin00.azurecr.io/user-microservice:$(WORKFLOW_ID) + + # ๐Ÿ“ฆ Shared workspace volume + volumes: + - name: workspace + emptyDir: {} diff --git a/argo-workflows/role-binding.yaml b/argo-workflows/role-binding.yaml new file mode 100644 index 0000000..204bb1b --- /dev/null +++ b/argo-workflows/role-binding.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: argo-edu-agentpool-binding + namespace: argo +subjects: + - kind: ServiceAccount + name: edu-agentpool + namespace: argo +roleRef: + kind: Role + name: argo-workflow-manager + apiGroup: rbac.authorization.k8s.io