Skip to content

v0.4.9

v0.4.9 #26

name: Release Microservices
on:
release:
types:
- "released"
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.sha }}-release
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
environment: production
strategy:
matrix:
app: [advertisements, accounts, messages, gateway]
steps:
- uses: actions/checkout@v4
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
enable-AzPSSession: true
- name: Build image on ACR
uses: azure/CLI@v1
with:
inlineScript: |
az configure --defaults acr=${{ vars.AZURE_CONTAINER_REGISTRY }}
az acr build -t ${{ vars.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ vars.AZURE_PROJECT_NAME }}-${{ matrix.app }}:${{ github.event.release.tag_name }} -r ${{ vars.AZURE_CONTAINER_REGISTRY }} ./apps/${{ matrix.app }}/
deploy:
needs: build
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Gets K8s context
id: context
uses: azure/aks-set-context@v3
with:
resource-group: ${{ vars.AZURE_RESOURCE_GROUP }}
cluster-name: ${{ vars.AZURE_CLUSTER_NAME }}
- name: "Ensure app routing"
continue-on-error: true
run: az aks approuting enable -g ${{ vars.AZURE_RESOURCE_GROUP }} -n ${{ vars.AZURE_CLUSTER_NAME }}
- name: Delete auth secrets
continue-on-error: true
run: kubectl delete secret auth-secrets
- name: Delete gateway secrets
continue-on-error: true
run: kubectl delete secret gateway-secrets
- name: Delete accounts secrets
continue-on-error: true
run: kubectl delete secret account-service-secrets
- name: Delete advertisements secrets
continue-on-error: true
run: kubectl delete secret advertisement-service-secrets
- name: Delete messages secrets
continue-on-error: true
run: kubectl delete secret messaging-service-secrets
- name: Set secrets
run: |
kubectl create secret generic auth-secrets \
--from-literal=AUTH_AUDIENCE="${{ vars.BACKEND_URL }}" \
--from-literal=AUTH_ISSUER_URL="${{ vars.AUTH_ISSUER_URL }}"
kubectl create secret generic gateway-secrets \
--from-literal=ALLOWED_ORIGIN="${{ vars.FRONTEND_URL }}"
kubectl create secret generic account-service-secrets \
--from-literal=DATABASE_USER="${{ secrets.DB_ADMIN_USER }}@${{ vars.ACCOUNTS_AZURE_DB_NAME }}" \
--from-literal=DATABASE_PASSWORD="${{ secrets.DB_ADMIN_PASSWORD }}" \
--from-literal=DATABASE_HOST="${{ vars.ACCOUNTS_AZURE_DB_NAME }}.mysql.database.azure.com" \
--from-literal=DATABASE_PORT="3306" \
--from-literal=DATABASE_NAME="accounts"
kubectl create secret generic advertisement-service-secrets \
--from-literal=DATABASE_USER="${{ secrets.DB_ADMIN_USER }}@${{ vars.ADVERTISEMENTS_AZURE_DB_NAME }}" \
--from-literal=DATABASE_PASSWORD="${{ secrets.DB_ADMIN_PASSWORD }}" \
--from-literal=DATABASE_HOST="${{ vars.ADVERTISEMENTS_AZURE_DB_NAME }}.mysql.database.azure.com" \
--from-literal=DATABASE_PORT="3306" \
--from-literal=DATABASE_NAME="advertisements" \
--from-literal=STORAGE_DRIVER="azure" \
--from-literal=STORAGE_AZURE_CONNECTION_STRING="$(az storage account show-connection-string --name ${{ vars.ADVERTISEMENTS_AZURE_STORAGE_ACCOUNT }} -o tsv)"
kubectl create secret generic messaging-service-secrets \
--from-literal=DATABASE_USER="${{ secrets.DB_ADMIN_USER }}@${{ vars.MESSAGES_AZURE_DB_NAME }}" \
--from-literal=DATABASE_PASSWORD="${{ secrets.DB_ADMIN_PASSWORD }}" \
--from-literal=DATABASE_HOST="${{ vars.MESSAGES_AZURE_DB_NAME }}.mysql.database.azure.com" \
--from-literal=DATABASE_PORT="3306" \
--from-literal=DATABASE_NAME="messages" \
--from-literal=STORAGE_DRIVER="azure" \
--from-literal=STORAGE_AZURE_CONNECTION_STRING="$(az storage account show-connection-string --name ${{ vars.MESSAGES_AZURE_STORAGE_ACCOUNT }} -o tsv)"
- name: Deploys application
uses: Azure/k8s-deploy@v4
with:
manifests: |
k8s/azure-gateway-ingress.yml
k8s/gateway-deployment.yml
k8s/account-deployment.yml
k8s/advertisement-deployment.yml
k8s/message-queue-deployment.yml
images: |
${{ vars.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ vars.AZURE_PROJECT_NAME }}-gateway:${{ github.event.release.tag_name }}
${{ vars.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ vars.AZURE_PROJECT_NAME }}-accounts:${{ github.event.release.tag_name }}
${{ vars.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ vars.AZURE_PROJECT_NAME }}-advertisements:${{ github.event.release.tag_name }}
imagepullsecrets: |
${{ vars.PROJECT_NAME }}
- name: "Install azure-frontdoor extension"
run: az extension add --name front-door
- name: "Set api ip-address"
run: |
az network front-door backend-pool backend update \
-g squaremarket-group \
-f squaremarket-frontdoor \
--pool-name api \
--index 1 \
--backend-host-header $(kubectl get ingress gateway-ingress -o json | jq -r .status.loadBalancer.ingress[0].ip) \
--address $(kubectl get ingress gateway-ingress -o json | jq -r .status.loadBalancer.ingress[0].ip)