-
Notifications
You must be signed in to change notification settings - Fork 22
123 lines (109 loc) · 5.25 KB
/
e2e-tests.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
name: 'dhis2: e2e tests'
# Requirements:
#
# - Secrets:
# GITHUB_TOKEN
# CYPRESS_DHIS2_USERNAME
# CYPRESS_DHIS2_PASSWORD
#
# - Customize environment variables:
# BASE_URL_INSTANCES: Set the base url for the instances, e.g. https://test.e2e.dhis2.org
# NAME_PATTERN_LEGACY_INSTANCES: Set the name pattern for your instances. {version} will be replaced by "[majorVersion].[minorVersion]"
# NAME_PATTERN_DEV_INSTANCE: Set the name pattern for your dev instance. {version} will be replaced by "dev"
# CYPRESS_CONTAINERS: Set the number of parallel Cypress job runs running for each backend version.
# TRIGGER_LABELS: Set the labels that will trigger the workflow.
#
# - Set status check as required:
# We recommend setting "call-e2e-tests-result / e2e-tests-success" as a required step in your workflow.
# This will ensure that one of the following must be true before the PR can be merged:
# 1) The tests have successfully run
# 2) The dev took a conscious decision not to run the tests (see e2e-tests-skip.yml)
# 3) They were skipped due to a special case (see e2e-tests-exception.yml)
on:
pull_request:
types: [labeled]
env:
BASE_URL_INSTANCES: ${{ secrets.CYPRESS_DHIS2_INSTANCES_BASE_URL }}
NAME_PATTERN_LEGACY_INSTANCES: ca-test-{version}
NAME_PATTERN_DEV_INSTANCE: ca-test-dev
CYPRESS_CONTAINERS: 5
TRIGGER_LABELS: e2e-tests, testing
defaults:
run:
shell: bash
jobs:
prerequisites:
runs-on: ubuntu-latest
outputs:
json-labels: ${{ steps.json-labels.outputs.labels }}
matrix-containers: ${{ steps.matrix-containers.outputs.containers }}
versions: ${{ steps.legacy-versions.outputs.versions }}
steps:
- name: compute-json-labels
id: json-labels
run: |
arrLabels=(${TRIGGER_LABELS//,/ })
for item in ${arrLabels[@]}; do labels+=\"$item\",; done
echo "::set-output name=labels::[ ${labels%,} ]"
- name: compute-matrix-containers
id: matrix-containers
if: contains(fromJson(steps.json-labels.outputs.labels), github.event.label.name)
run: |
for (( cnt = 1; cnt <= $CYPRESS_CONTAINERS; cnt++)); do containers+=$cnt,; done
echo "::set-output name=containers::[ ${containers%,} ]"
- if: contains(fromJson(steps.json-labels.outputs.labels), github.event.label.name)
uses: actions/checkout@v2
- name: compute-instance-url
id: instance-url
if: contains(fromJson(steps.json-labels.outputs.labels), github.event.label.name)
run: echo "::set-output name=url::${BASE_URL_INSTANCES%/}/${NAME_PATTERN_DEV_INSTANCE/"{version}"/dev}"
- id: legacy-versions
if: contains(fromJson(steps.json-labels.outputs.labels), github.event.label.name)
uses: dhis2/action-supported-legacy-versions@v1
with:
instance-url-latest: ${{ steps.instance-url.outputs.url }} # can be removed if maxDHIS2Version has been specified
username: ${{ secrets.CYPRESS_DHIS2_USERNAME }} # can be removed if maxDHIS2Version has been specified
password: ${{ secrets.CYPRESS_DHIS2_PASSWORD }} # can be removed if maxDHIS2Version has been specified
cypress:
needs: prerequisites
if: contains(fromJson(needs.prerequisites.outputs.json-labels), github.event.label.name)
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
versions: ${{ fromJSON(needs.prerequisites.outputs.versions) }}
containers: ${{ fromJSON(needs.prerequisites.outputs.matrix-containers) }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18.x
- name: compute-instance-url
id: instance-url
run: echo "::set-output name=url::${BASE_URL_INSTANCES%/}/${NAME_PATTERN_LEGACY_INSTANCES/"{version}"/$version}"
env:
version: ${{ matrix.versions }}
- name: Cypress run
uses: cypress-io/github-action@v6
with:
record: true
parallel: true
group: e2e-chrome-parallel-${{ matrix.versions }}
browser: chrome
start: yarn start:forCypress
wait-on: http://localhost:3000
wait-on-timeout: 300
env:
CI: true
CYPRESS_RECORD_KEY: '6b0bce0d-a4e8-417b-bbee-9157cbe9a999'
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_dhis2BaseUrl: ${{ steps.instance-url.outputs.url }}
CYPRESS_dhis2InstanceVersion: ${{matrix.versions}}
CYPRESS_dhis2Username: ${{ secrets.CYPRESS_DHIS2_USERNAME }}
CYPRESS_dhis2Password: ${{ secrets.CYPRESS_DHIS2_PASSWORD }}
NODE_OPTIONS: "--openssl-legacy-provider"
call-e2e-tests-result:
needs: cypress
uses: ./.github/workflows/e2e-tests-result.yml
with:
result: true