From 016b924757d85454696b93b641a194ae84b753d5 Mon Sep 17 00:00:00 2001 From: Vaibhav Kamra Date: Fri, 16 Dec 2022 09:32:59 -0800 Subject: [PATCH] CI: Pick a M365 app from a pool (#1841) ## Description Attempt to reduce flakiness in CI due to a single CI app accessing the same test users mailbox across different CI jobs. Introduces logic to pick one of the 4 pre-configured apps for CI. ## Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No ## Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Test - [x] :computer: CI/Deployment - [ ] :hamster: Trivial/Minor ## Issue(s) * #1776 ## Test Plan - [ ] :muscle: Manual - [x] :zap: Unit test - [ ] :green_heart: E2E --- .github/workflows/ci.yml | 46 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f3a36319..9decbca07 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,6 +50,41 @@ jobs: with: go-version-file: src/go.mod + # SetM365App will decide which M365 app to use for this CI run + SetM365App: + environment: Testing + runs-on: ubuntu-latest + outputs: + client_app_slot: ${{ steps.roundrobin.outputs.CLIENT_APP_SLOT }} + client_id_env: ${{ steps.roundrobin.outputs.CLIENT_ID_ENV }} + client_secret_env: ${{ steps.roundrobin.outputs.CLIENT_SECRET_ENV }} + steps: + - name: Figure out which client id to use + id: roundrobin + run: | + slot=$((GITHUB_RUN_NUMBER % 4)) + echo "CLIENT_APP_SLOT=$slot" >> $GITHUB_OUTPUT + + case $slot in + + 0) + echo "CLIENT_ID_ENV=CLIENT_ID" >> $GITHUB_OUTPUT + echo "CLIENT_SECRET_ENV=CLIENT_SECRET" >> $GITHUB_OUTPUT + ;; + 1) + echo "CLIENT_ID_ENV=CLIENT_ID_2" >> $GITHUB_OUTPUT + echo "CLIENT_SECRET_ENV=CLIENT_SECRET_2" >> $GITHUB_OUTPUT + ;; + 2) + echo "CLIENT_ID_ENV=CLIENT_ID_3" >> $GITHUB_OUTPUT + echo "CLIENT_SECRET_ENV=CLIENT_SECRET_3" >> $GITHUB_OUTPUT + ;; + 3) + echo "CLIENT_ID_ENV=CLIENT_ID_4" >> $GITHUB_OUTPUT + echo "CLIENT_SECRET_ENV=CLIENT_SECRET_4" >> $GITHUB_OUTPUT + ;; + esac + SetEnv: environment: Testing runs-on: ubuntu-latest @@ -129,13 +164,18 @@ jobs: # ---------------------------------------------------------------------------------------------------- Test-Suite-Trusted: - needs: [Precheck, Checkout] + needs: [Precheck, Checkout, SetM365App] environment: Testing runs-on: ubuntu-latest if: (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main') || (needs.precheck.outputs.srcfileschanged == 'true' && github.event.pull_request.head.repo.full_name == github.repository) defaults: run: working-directory: src + env: + # Resolve the name of the secret that contains the Azure client ID/secret + AZURE_CLIENT_ID_NAME: ${{ needs.SetM365App.outputs.client_id_env }} + AZURE_CLIENT_SECRET_NAME: ${{ needs.SetM365App.outputs.client_secret_env }} + CLIENT_APP_SLOT: ${{ needs.SetM365App.outputs.client_app_slot }} steps: - uses: actions/checkout@v3 @@ -161,8 +201,8 @@ jobs: # run the tests - name: Integration Tests env: - AZURE_CLIENT_ID: ${{ secrets.CLIENT_ID }} - AZURE_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }} + AZURE_CLIENT_ID: ${{ secrets[env.AZURE_CLIENT_ID_NAME] }} + AZURE_CLIENT_SECRET: ${{ secrets[env.AZURE_CLIENT_SECRET_NAME] }} AZURE_TENANT_ID: ${{ secrets.TENANT_ID }} CORSO_CI_TESTS: true CORSO_M365_TEST_USER_ID: ${{ secrets.CORSO_M365_TEST_USER_ID }}