-
Notifications
You must be signed in to change notification settings - Fork 138
Expand file tree
/
Copy pathrelease-e2e-workflow-template.yml
More file actions
165 lines (165 loc) · 7.43 KB
/
release-e2e-workflow-template.yml
File metadata and controls
165 lines (165 loc) · 7.43 KB
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
name: Release tests workflow in Bundled OpenSearch Dashboards
on:
workflow_call:
inputs:
test-name:
required: true
type: string
test-command:
required: true
type: string
osd-serve-args:
required: false
type: string
security-enabled:
required: false
type: string
artifact-name-suffix:
required: false
type: string
multi-opensearch-enabled:
required: false
type: boolean
default: true
jobs:
tests:
name: Run Cypress E2E tests for ${{ inputs.test-name }}
runs-on: ubuntu-latest
env:
# prevents extra Cypress installation progress messages
CI: 1
# avoid warnings like "tput: No value for $TERM and no -T specified"
TERM: xterm
# make Node run in ipv4 first so that cypress can detect 5601 port in CI environment
NODE_OPTIONS: '--max-old-space-size=6144 --dns-result-order=ipv4first'
# 2.12 onwards security demo configuration require a custom admin password
OPENSEARCH_INITIAL_ADMIN_PASSWORD: 'myStrongPassword123!'
steps:
- name: Checkout Branch
uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: 21
- name: Checkout cypress-test
uses: actions/checkout@v2
with:
repository: ${{github.repository}}
path: cypress-test
- name: Get package version
working-directory: cypress-test
run: |
echo "VERSION=$(yarn --silent pkg-version)" >> $GITHUB_ENV
- name: Get security setups
run: |
SECURITY_ENABLED=${{ inputs.security-enabled }}
if [ "$SECURITY_ENABLED" != 'false' ]; then
echo "SECURITY_ENABLED=true" >> $GITHUB_ENV
else
echo "SECURITY_ENABLED=false" >> $GITHUB_ENV
fi
- name: Get and run OpenSearch
run: |
wget https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/${{ env.VERSION }}/latest/linux/x64/tar/dist/opensearch/opensearch-${{ env.VERSION }}-linux-x64.tar.gz
tar -xzf opensearch-${{ env.VERSION }}-linux-x64.tar.gz
cd opensearch-${{ env.VERSION }}/
# Disable disk space threshold to prevent allocation issues in CI
echo "cluster.routing.allocation.disk.threshold_enabled: false" >> config/opensearch.yml
if [ "$SECURITY_ENABLED" = 'false' ]; then
echo "Remove OpenSearch Security"
[ -d "plugins/opensearch-security" ] && echo "plugins.security.disabled: true" >> config/opensearch.yml
./opensearch-tar-install.sh &
timeout 900 bash -c 'while [[ "$(curl -o /dev/null -w ''%{http_code}'' http://localhost:9200)" != "200" ]]; do sleep 5; done'
curl http://localhost:9200
else
echo "Keep OpenSearch Security"
./opensearch-tar-install.sh &
timeout 900 bash -c 'while [[ "$(curl -o /dev/null -w ''%{http_code}'' -u admin:${{ env.OPENSEARCH_INITIAL_ADMIN_PASSWORD }} -k https://localhost:9200)" != "200" ]]; do sleep 5; done'
curl https://localhost:9200 -u admin:${{ env.OPENSEARCH_INITIAL_ADMIN_PASSWORD }} --insecure
fi
- uses: ./.github/actions/start-opensearch
if: ${{ inputs.multi-opensearch-enabled }}
with:
opensearch-version: ${{ env.VERSION }}
security-enabled: false
port: 9201
transport_port: 9301
- uses: ./.github/actions/start-opensearch
if: ${{ inputs.multi-opensearch-enabled }}
with:
opensearch-version: ${{ env.VERSION }}
security-enabled: true
admin-password: myStrongPassword123!
port: 9202
transport_port: 9302
- name: Get OpenSearch-Dashboards
run: |
wget https://ci.opensearch.org/ci/dbc/distribution-build-opensearch-dashboards/${{ env.VERSION }}/latest/linux/x64/tar/dist/opensearch-dashboards/opensearch-dashboards-${{ env.VERSION }}-linux-x64.tar.gz
tar -xzf opensearch-dashboards-${{ env.VERSION }}-linux-x64.tar.gz
- name: Get node and yarn versions
id: versions
run: |
node_version_temp=$(node -p "require('./opensearch-dashboards-${{ env.VERSION }}/package.json').engines.node")
echo "node_version=$node_version_temp" >> $GITHUB_OUTPUT
echo "Extracted Node.js version/range: $node_version_temp"
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: ${{ steps.versions.outputs.node_version }}
registry-url: 'https://registry.npmjs.org'
- name: Run OpenSearch-Dashboards server
run: |
cd opensearch-dashboards-${{ env.VERSION }}
if [ "$SECURITY_ENABLED" = 'false' ]; then
echo "Remove Dashboards Security"
./bin/opensearch-dashboards-plugin remove securityDashboards
sed -i /^opensearch_security/d config/opensearch_dashboards.yml
sed -i 's/https/http/' config/opensearch_dashboards.yml
bin/opensearch-dashboards serve ${{ inputs.osd-serve-args }} &
timeout 300 bash -c 'while [[ "$(curl http://localhost:5601/api/status | jq -r '.status.overall.state')" != "green" ]]; do sleep 5; done'
curl http://localhost:5601/api/status
else
echo "Keep Dashboards Security"
bin/opensearch-dashboards serve ${{ inputs.osd-serve-args }} &
timeout 300 bash -c 'while [[ "$(curl -u admin:${{ env.OPENSEARCH_INITIAL_ADMIN_PASSWORD }} -k http://localhost:5601/api/status | jq -r '.status.overall.state')" != "green" ]]; do sleep 5; done'
curl http://localhost:5601/api/status -u admin:${{ env.OPENSEARCH_INITIAL_ADMIN_PASSWORD }} --insecure
fi
- name: Get Cypress version
id: cypress_version
run: |
cypress_version_temp=$(cat ./monetery-test/package.json | jq -r '.devDependencies.cypress')
echo "cypress_version=$cypress_version_temp" >> $GITHUB_ENV
- name: Cache Cypress
id: cache-cypress
uses: actions/cache@v4
with:
path: ~/.cache/Cypress
key: cypress-cache-v2-${{ runner.os }}-${{ hashFiles('**/package.json') }}
env:
CYPRESS_INSTALL_BINARY: ${{ steps.cypress_version.outputs.cypress_version }}
- run: npx cypress cache list
- run: npx cypress cache path
- name: Cypress tests
uses: cypress-io/github-action@v2
with:
working-directory: cypress-test
command: ${{ inputs.test-command }}
wait-on: 'http://localhost:5601'
# Screenshots are only captured on failure, will change this once we do visual regression tests
- uses: actions/upload-artifact@v4
if: failure()
with:
name: cypress-screenshots${{ inputs.artifact-name-suffix }}
path: cypress-test/cypress/screenshots
# Test run video was always captured, so this action uses "always()" condition
- uses: actions/upload-artifact@v4
if: always()
with:
name: cypress-videos${{ inputs.artifact-name-suffix }}
path: cypress-test/cypress/videos
# Test reports was always captured, so this action uses "always()" condition
- uses: actions/upload-artifact@v4
if: always()
with:
name: cypress-results${{ inputs.artifact-name-suffix }}
path: cypress-test/cypress/results