apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: build-workflow- spec: entrypoint: main serviceAccountName: edu-agentpool volumeClaimTemplates: - metadata: name: workspace spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi templates: # ๐Ÿ” Main steps sequence - name: main steps: - - name: checkout template: git-checkout arguments: {} - - 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/repo cd /workspace/repo 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/repo/api python3 -m venv env . env/bin/activate pip install -r requirements.txt pytest python3 -m pytest --junit-xml=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/repo 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) volumeMounts: - name: workspace mountPath: /workspace