AKS store demo 2.0 #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # composite workflow to test the azd deployment of the app | |
| # uses a github federated identity | |
| name: test-e2e-pr | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| permissions: | |
| id-token: write | |
| contents: read | |
| jobs: | |
| deploy: | |
| outputs: | |
| storeAdminIp: ${{ steps.kubectl_get_service.outputs.STORE_ADMIN_IP }} | |
| storeFrontIp: ${{ steps.kubectl_get_service.outputs.STORE_FRONT_IP }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Install Terraform | |
| uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd # v3 | |
| - name: Install azd | |
| uses: Azure/setup-azd@ae0f8b5482eeac61e940f447327d84c73beb8b1e # v2.1.0 | |
| - name: Install kubelogin | |
| uses: azure/use-kubelogin@76597ae0fcbaace21b05e13a2cbf8daee2c6e820 # v1 | |
| with: | |
| kubelogin-version: "v0.2.8" | |
| - name: Azure CLI login | |
| uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2 | |
| with: | |
| client-id: ${{ secrets.AZURE_CLIENT_ID }} | |
| tenant-id: ${{ secrets.AZURE_TENANT_ID }} | |
| subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| - name: Azure Developer CLI login | |
| run: | | |
| azd auth login \ | |
| --client-id ${{ secrets.AZURE_CLIENT_ID }} \ | |
| --federated-credential-provider "github" \ | |
| --tenant-id ${{ secrets.AZURE_TENANT_ID }} | |
| - name: Turn on Helm support for azd | |
| run: azd config set alpha.aks.helm on | |
| - name: Provision and deploy | |
| id: provision_deploy | |
| continue-on-error: true | |
| run: | | |
| azd env new ${{ vars.AZURE_ENV_NAME }} | |
| azd env set AKS_NODE_POOL_VM_SIZE Standard_D2_v4 | |
| azd env set BUILD_CONTAINERS true | |
| azd env set DEPLOY_AZURE_CONTAINER_REGISTRY true | |
| azd env set DEPLOY_AZURE_OPENAI true | |
| azd env set AZURE_OPENAI_LOCATION ${{ vars.AZURE_LOCATION }} | |
| azd env set DEPLOY_AZURE_OPENAI_DALL_E_MODEL false | |
| azd env set DEPLOY_AZURE_SERVICE_BUS true | |
| azd env set DEPLOY_AZURE_COSMOSDB true | |
| azd env set AZURE_COSMOSDB_ACCOUNT_KIND MongoDB | |
| azd env set DEPLOY_OBSERVABILITY_TOOLS true | |
| azd up --no-prompt | |
| env: | |
| AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} | |
| AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| - name: Save azd cache | |
| uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4 | |
| if: always() | |
| with: | |
| path: | | |
| .azure/ | |
| key: ${{ runner.os }}-azd-${{ github.run_id }}-${{ github.sha }} | |
| - name: Check provision and deploy result | |
| if: steps.provision_deploy.outcome == 'failure' | |
| run: | | |
| echo "Provision and deploy failed" | |
| exit 1 | |
| - name: Get Store IPs | |
| id: kubectl_get_service | |
| if: steps.provision_deploy.outcome == 'success' | |
| run: | | |
| eval $(azd env get-values) | |
| storeAdminIp=$(kubectl get service store-admin -n $AZURE_AKS_NAMESPACE -o jsonpath='{.status.loadBalancer.ingress[0].ip}') | |
| while [ -z "$storeAdminIp" ]; do | |
| sleep 60 | |
| storeAdminIp=$(kubectl get service store-admin -n $AZURE_AKS_NAMESPACE -o jsonpath='{.status.loadBalancer.ingress[0].ip}') | |
| done | |
| echo "STORE_ADMIN_IP=${storeAdminIp}" | |
| echo "STORE_ADMIN_IP=${storeAdminIp}" >> "$GITHUB_OUTPUT" | |
| storeFrontIp=$(kubectl get service store-front -n $AZURE_AKS_NAMESPACE -o jsonpath='{.status.loadBalancer.ingress[0].ip}') | |
| while [ -z "$storeFrontIp" ]; do | |
| sleep 60 | |
| storeFrontIp=$(kubectl get service store-front -n $AZURE_AKS_NAMESPACE -o jsonpath='{.status.loadBalancer.ingress[0].ip}') | |
| done | |
| echo "STORE_FRONT_IP=${storeFrontIp}" | |
| echo "STORE_FRONT_IP=${storeFrontIp}" >> "$GITHUB_OUTPUT" | |
| playwright-tests: | |
| needs: deploy | |
| uses: ./.github/workflows/test-playwright.yaml | |
| secrets: inherit | |
| with: | |
| storeAdminUrl: "http://${{ needs.deploy.outputs.storeAdminIp }}" | |
| storeFrontUrl: "http://${{ needs.deploy.outputs.storeFrontIp }}" | |
| teardown: | |
| if: always() | |
| needs: playwright-tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
| - name: Install Terraform | |
| uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd # v3 | |
| - name: Install azd | |
| uses: Azure/setup-azd@ae0f8b5482eeac61e940f447327d84c73beb8b1e # v2.1.0 | |
| - name: Restore azd cache | |
| uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4 | |
| with: | |
| path: | | |
| .azure/ | |
| key: ${{ runner.os }}-azd-${{ github.run_id }}-${{ github.sha }} | |
| - name: Azure CLI login | |
| uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2 | |
| with: | |
| client-id: ${{ secrets.AZURE_CLIENT_ID }} | |
| tenant-id: ${{ secrets.AZURE_TENANT_ID }} | |
| subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| - name: Azure Developer CLI login | |
| run: | | |
| azd auth login \ | |
| --client-id ${{ secrets.AZURE_CLIENT_ID }} \ | |
| --federated-credential-provider "github" \ | |
| --tenant-id ${{ secrets.AZURE_TENANT_ID }} | |
| - name: Destroy environment | |
| run: azd down --force --purge | |
| env: | |
| AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} | |
| AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| - name: Remove azd folder | |
| run: rm -rf .azure |