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: {}