130 lines
5 KiB
YAML
130 lines
5 KiB
YAML
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
|
|
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 "::set-output name=domain::${{ env.GITHUB_HEAD_REF_SLUG_URL }}.dashboard.saleor.rocks"
|
|
- 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 "::set-output name=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 })"
|
|
- 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 }}
|
|
COMMIT_INFO_MESSAGE: Tests triggered on PR - ${{ github.ref_name }} with selected tags
|
|
CYPRESS_grepTags: ${{ needs.get-selected-tags-and-containers.outputs.tags }}
|
|
with:
|
|
parallel: true
|
|
group: 'UI - Chrome'
|
|
record: true
|
|
tag: e2eTestsOnPR
|