name: E2E on: pull_request: types: [edited, labeled] jobs: get-selected-tags-and-containers: if: ${{ contains(github.event.pull_request.labels.*.name, 'run e2e') }} runs-on: ubuntu-latest outputs: tags: ${{steps.get_tags.outputs.result}} containers: ${{ steps.get_containers.outputs.result}} steps: - name: Get tags id: get_tags uses: actions/github-script@v6 env: pullRequestBody: ${{ github.event.pull_request.body }} with: result-encoding: string script: | const { pullRequestBody } = process.env const tags = ["@critical"]; try{ const removedPullRequestBodyBeforeTests = pullRequestBody.split(`### Do you want to run more stable tests?`); const removedPullRequestBodyAfterTests = removedPullRequestBodyBeforeTests[1].split(`CONTAINERS`); let tagsInString = removedPullRequestBodyAfterTests[0]; tagsInString = tagsInString.split('\n'); tagsInString.forEach(line => { if (line.includes('[x]')) tags.push(line.replace(/[0-9]+\. \[x\] /, "@stable+@")) }); const tagsToReturn = tags.join(",").toString(); return tagsToReturn.replace(/\r/g, '') }catch{ return '@critical' } - name: get-containers id: get_containers uses: actions/github-script@v6 env: pullRequestBody: ${{ github.event.pull_request.body }} with: script: | const { pullRequestBody } = process.env const containers = []; const numberOfContainersRegex = /CONTAINERS=(\d*)/ const numberOfContainers = pullRequestBody.match(numberOfContainersRegex); for(let i=1; i<=numberOfContainers[1]; i++){ containers.push(i) } return {"containers": containers} install-cypress: needs: get-selected-tags-and-containers runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Setup Node uses: actions/setup-node@v3 with: node-version-file: '.nvmrc' - name: Wait for Deploy and tests uses: lewagon/wait-on-check-action@v1.0.0 with: ref: ${{ github.event.pull_request.head.sha }} repo-token: ${{ secrets.GITHUB_TOKEN }} running-workflow-name: e2e check-name: deploy wait-interval: 10 - name: Cypress install uses: cypress-io/github-action@v4 with: # Disable running of tests within install job runTests: false run-tests-in-parallel-on-label: needs: [get-selected-tags-and-containers, install-cypress] runs-on: ubuntu-latest env: NODE_OPTIONS: "--max_old_space_size=4096" container: cypress/browsers:node18.12.0-chrome106-ff106 strategy: fail-fast: false max-parallel: 10 matrix: ${{ fromJson(needs.get-selected-tags-and-containers.outputs.containers) }} # run copies of the current job in parallel steps: - uses: rlespinasse/github-slug-action@3.1.0 - name: Set domain id: set-domain run: | echo "domain=${{ env.GITHUB_HEAD_REF_SLUG_URL }}.dashboard.saleor.rocks" >> $GITHUB_OUTPUT - name: Get API_URI id: api_uri # Search for API_URI in PR description and use default if not defined env: pull_request_body: ${{ github.event.pull_request.body }} prefix: API_URI= pattern: (http|https)://[a-zA-Z0-9.-]+/graphql/? fallback_uri: ${{ secrets.CYPRESS_API_URI }} run: | echo "custom_api_uri=$(echo "$pull_request_body" | grep -Eo "$prefix$pattern" | sed s/$prefix// | head -n 1 | { read custom_uri; if [ -z "$custom_uri" ]; then echo "$fallback_uri"; else echo "$custom_uri"; fi })" >> $GITHUB_OUTPUT - name: Checkout uses: actions/checkout@v2 - name: Cypress run uses: cypress-io/github-action@v4 env: API_URI: ${{ steps.api_uri.outputs.custom_api_uri }} APP_MOUNT_URI: ${{ secrets.APP_MOUNT_URI }} CYPRESS_baseUrl: https://${{ steps.set-domain.outputs.domain }}/ CYPRESS_USER_NAME: ${{ secrets.CYPRESS_USER_NAME }} CYPRESS_SECOND_USER_NAME: ${{ secrets.CYPRESS_SECOND_USER_NAME }} CYPRESS_USER_PASSWORD: ${{ secrets.CYPRESS_USER_PASSWORD }} CYPRESS_PERMISSIONS_USERS_PASSWORD: ${{ secrets.CYPRESS_PERMISSIONS_USERS_PASSWORD }} CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} CYPRESS_mailHogUrl: ${{ secrets.CYPRESS_MAILHOG }} COMMIT_INFO_MESSAGE: ${{ needs.get-selected-tags-and-containers.outputs.tags }} tests triggered on PR - https://github.com/${{ github.repository }}/pull/${{ github.ref_name }} CYPRESS_grepTags: ${{ needs.get-selected-tags-and-containers.outputs.tags }} CYPRESS_MAILPITURL: ${{ secrets.CYPRESS_MAILPITURL }} with: parallel: true group: 'UI - Chrome' record: true tag: e2eTestsOnPR