-
Notifications
You must be signed in to change notification settings - Fork 23
150 lines (135 loc) · 6.92 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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
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:
setup-matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.specs }}
steps:
- uses: actions/checkout@v3
- name: Generate test matrix
id: set-matrix
run: |
node cypress/support/generateTestMatrix.js > matrix.json
echo "::set-output name=specs::$(cat matrix.json)"
prerequisites:
runs-on: ubuntu-latest
needs: setup-matrix
outputs:
json-labels: ${{ steps.json-labels.outputs.labels }}
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%,} ]"
- 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, setup-matrix]
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) }}
spec-group: ${{ fromJson(needs.setup-matrix.outputs.matrix) }}
env:
SHOULD_RECORD: ${{ contains(github.event.head_commit.message, '[e2e record]') || contains(join(github.event.pull_request.labels.*.name), 'e2e record') }}
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: Set Cypress Environment Variables
run: |
echo "CYPRESS_GROUP=e2e-${{ matrix.versions }}-${{ matrix.spec-group.id }}" >> $GITHUB_ENV
echo "CYPRESS_TAG=${{ github.event_name }}" >> $GITHUB_ENV
echo "CYPRESS_CI_BUILD_ID=${{ github.run_id }}" >> $GITHUB_ENV
echo "CI_BUILD_ID=${{ github.run_id }}" >> $GITHUB_ENV
- name: Debug Environment Variables
run: |
echo "SHOULD_RECORD=${{ env.SHOULD_RECORD }}"
echo "CI Build ID=${{ env.CI_BUILD_ID }}"
echo "Computed Group=${{ env.SHOULD_RECORD == 'true' && env.CYPRESS_GROUP || '' }}"
echo "Computed Tag=${{ env.SHOULD_RECORD == 'true' && env.CYPRESS_TAG || '' }}"
echo "Computed CI Build ID=${{ env.SHOULD_RECORD == 'true' && env.CYPRESS_CI_BUILD_ID || '' }}"
echo "Spec=${{ join(matrix.spec-group.tests, ',') }}"
- name: Cypress run
uses: cypress-io/github-action@v6
with:
record: ${{ env.SHOULD_RECORD }}
parallel: ${{ env.SHOULD_RECORD }}
group: ${{ env.SHOULD_RECORD == 'true' && env.CYPRESS_GROUP || '' }}
tag: ${{ env.SHOULD_RECORD == 'true' && env.CYPRESS_TAG || '' }}
ci-build-id: ${{ env.SHOULD_RECORD == 'true' && env.CYPRESS_CI_BUILD_ID || '' }}
spec: ${{ join(matrix.spec-group.tests, ',') }}
browser: chrome
start: yarn start:forCypress
wait-on: http://localhost:3000
wait-on-timeout: 300
env:
CI: true
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
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 }}
CYPRESS_dhis2Username_trackerAutoTestRestricted: ${{ secrets.CYPRESS_DHIS2_USERNAME_TRACKER_AUTO_TEST_RESTRICTED }}
CYPRESS_dhis2Password_trackerAutoTestRestricted: ${{ secrets.CYPRESS_DHIS2_PASSWORD_TRACKER_AUTO_TEST_RESTRICTED }}
NODE_OPTIONS: "--openssl-legacy-provider"
call-e2e-tests-result:
needs: cypress
uses: ./.github/workflows/e2e-tests-result.yml
with:
result: true