From 1a60c58f12e0298525e17d9b573f020d79eac838 Mon Sep 17 00:00:00 2001 From: Steven Murawski Date: Fri, 2 Feb 2024 10:33:09 -0600 Subject: [PATCH] test azd from ci --- .github/workflows/test-azd-deployment.yaml | 160 ++++++++++++++++++ ...st-playwright.yml => test-playwright.yaml} | 9 +- 2 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/test-azd-deployment.yaml rename .github/workflows/{test-playwright.yml => test-playwright.yaml} (81%) diff --git a/.github/workflows/test-azd-deployment.yaml b/.github/workflows/test-azd-deployment.yaml new file mode 100644 index 00000000..197443eb --- /dev/null +++ b/.github/workflows/test-azd-deployment.yaml @@ -0,0 +1,160 @@ +# composite workflow to test the azd deployment of the app +# uses a github federated identity +name: Test AZD Deployment + +on: + push: + branches: + - wasm_rules_engine + +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@v3 + + - uses: actions/cache@v3 + with: + path: | + .azure/ + key: ${{ runner.os }}-azd-${{ hashFiles('infra/**') }}-${{ env.BUST_CACHE }}-${{ github.sha }} + + - name: Install azd + uses: Azure/setup-azd@v0.1.0 + + - name: Install Nodejs + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Login az + uses: azure/login@v1 + with: + creds: ${{ secrets.AZURE_CREDENTIALS }} + + - name: Set az account + uses: azure/CLI@v1 + with: + inlineScript: | + az account set --subscription ${{vars.AZURE_SUBSCRIPTION_ID}} + + - name: Log in with Azure + run: | + $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable; + Write-Host "::add-mask::$($info.clientSecret)" + + azd auth login ` + --client-id "$($info.clientId)" ` + --client-secret "$($info.clientSecret)" ` + --tenant-id "$($info.tenantId)" + shell: pwsh + env: + AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} + + - name: Provision Infrastructure + run: azd provision --no-prompt + env: + AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} + AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} + AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} + ARM_TENANT_ID: ${{ vars.ARM_TENANT_ID }} + ARM_CLIENT_ID: ${{ vars.ARM_CLIENT_ID }} + ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} + + - name: Deploy Application + run: azd deploy --no-prompt + env: + AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} + AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} + AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} + + - name: Get Store IPs + id: kubectl_get_service + run: | + eval $(azd env get-values) + az aks get-credentials --resource-group $rg_name --name $aks_name + storeAdminIp=$(kubectl get service store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + while [ -z "$storeAdminIp" ]; then + sleep 60 + storeAdminIp=$(kubectl get service store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + fi + echo "STORE_ADMIN_IP=${storeAdminIp}" + echo "STORE_ADMIN_IP=${storeAdminIp}" >> "$GITHUB_OUTPUT" + storeFrontIp=$(kubectl get service store-front -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + while [ -z "$storeFrontIp" ]; then + sleep 60 + storeFrontIp=$(kubectl get service store-front -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + fi + echo "STORE_FRONT_IP=${storeFrontIp}" + echo "STORE_FRONT_IP=${storeFrontIp}" >> "$GITHUB_OUTPUT" + + playwright-tests: + needs: deploy + uses: ./.github/workflows/test-playwright.yaml + 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@v3 + + - uses: actions/cache@v3 + with: + path: | + .azure/ + key: ${{ runner.os }}-azd-${{ hashFiles('infra/**') }}-${{ env.BUST_CACHE }}-${{ github.sha }} + + - name: Install azd + uses: Azure/setup-azd@v0.1.0 + + - name: Install Nodejs + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Login az + uses: azure/login@v1 + with: + creds: ${{ secrets.AZURE_CREDENTIALS }} + + - name: Set az account + uses: azure/CLI@v1 + with: + inlineScript: | + az account set --subscription ${{vars.AZURE_SUBSCRIPTION_ID}} + + - name: Log in with Azure + run: | + $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable; + Write-Host "::add-mask::$($info.clientSecret)" + + azd auth login ` + --client-id "$($info.clientId)" ` + --client-secret "$($info.clientSecret)" ` + --tenant-id "$($info.tenantId)" + shell: pwsh + env: + AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} + + - name: Azd down + run: azd down --no-prompt --force + env: + AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} + AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} + AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} + ARM_TENANT_ID: ${{ vars.ARM_TENANT_ID }} + ARM_CLIENT_ID: ${{ vars.ARM_CLIENT_ID }} + ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} \ No newline at end of file diff --git a/.github/workflows/test-playwright.yml b/.github/workflows/test-playwright.yaml similarity index 81% rename from .github/workflows/test-playwright.yml rename to .github/workflows/test-playwright.yaml index 98c7681b..44abb195 100644 --- a/.github/workflows/test-playwright.yml +++ b/.github/workflows/test-playwright.yaml @@ -2,12 +2,6 @@ name: Playwright Tests on: workflow_call: inputs: - testName: - required: true - type: string - runPlaywrightTests: - required: true - type: boolean storeAdminUrl: required: true type: string @@ -17,7 +11,6 @@ on: jobs: playwright-tests: - if: inputs.runPlaywrightTests timeout-minutes: 60 runs-on: ubuntu-latest steps: @@ -42,6 +35,6 @@ jobs: - uses: actions/upload-artifact@v3 if: always() with: - name: playwright-report-${{ inputs.testName }} + name: playwright-report-store-admin path: tests/playwright-report/ retention-days: 30