-
Notifications
You must be signed in to change notification settings - Fork 108
Expand file tree
/
Copy pathaction.yaml
More file actions
196 lines (175 loc) 路 6.87 KB
/
Copy pathaction.yaml
File metadata and controls
196 lines (175 loc) 路 6.87 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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
name: "Runs the cypress test suite"
description: "Re-usable workflow to run cypress tests against a cluster with or without security"
inputs:
with-security:
description: "Whether security should be installed on the cluster the tests are run with"
required: true
runs:
using: "composite"
steps:
- name: Set up JDK
uses: actions/setup-java@v4
with:
# TODO: Parse this from index management plugin
java-version: 21
distribution: temurin
- name: Checkout index management
uses: actions/checkout@v2
with:
path: index-management
repository: opensearch-project/index-management
ref: "main"
- name: Run opensearch with plugin (no security)
shell: bash
if: ${{ inputs.with-security == 'false' }}
run: |
cd index-management
./gradlew run &
# Wait for 200 OK from OpenSearch (up to 10 min)
timeout 600 bash -lc '
until [[ "$(curl -s -o /dev/null -w "%{http_code}" http://localhost:9200)" == "200" ]]; do
echo "Waiting for OpenSearch..."
sleep 5
done
'
- name: Run opensearch with plugin (security)
shell: bash
if: ${{ inputs.with-security == 'true' }}
run: |
cd index-management
./gradlew run -Dsecurity=true -Dhttps=true &
# Wait for 200 or 401 (auth) on HTTPS (up to 10 min)
timeout 600 bash -lc '
until code=$(curl -k -s -o /dev/null -w "%{http_code}" https://localhost:9200); [[ "$code" == "200" || "$code" == "401" ]]; do
echo "Waiting for OpenSearch (secure)..."
sleep 5
done
'
- name: Checkout Index Management Dashboards plugin
uses: actions/checkout@v2
with:
path: index-management-dashboards-plugin
- name: Checkout Security Dashboards plugin
uses: actions/checkout@v2
with:
repository: opensearch-project/security-dashboards-plugin
path: security-dashboards-plugin
ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }}
- name: Checkout OpenSearch-Dashboards
uses: actions/checkout@v2
with:
repository: opensearch-project/OpenSearch-Dashboards
path: OpenSearch-Dashboards
ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }}
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version-file: "./OpenSearch-Dashboards/.nvmrc"
registry-url: "https://registry.npmjs.org"
- name: Install Yarn
shell: bash
run: |
YARN_VERSION=$(node -p "require('./OpenSearch-Dashboards/package.json').engines.yarn")
echo "Installing yarn@$YARN_VERSION"
npm i -g yarn@$YARN_VERSION
- run: node -v
shell: bash
- run: yarn -v
shell: bash
- name: Configure OpenSearch Dashboards for cypress (secure)
shell: bash
if: ${{ inputs.with-security == 'true' }}
run: |
cat << 'EOT' > ./OpenSearch-Dashboards/config/opensearch_dashboards.yml
server.host: "0.0.0.0"
opensearch.hosts: ["https://localhost:9200"]
opensearch.ssl.verificationMode: none
opensearch.username: "kibanaserver"
opensearch.password: "kibanaserver"
opensearch.requestHeadersWhitelist: [ authorization,securitytenant ]
opensearch_security.multitenancy.enabled: true
opensearch_security.multitenancy.tenants.preferred: ["Private", "Global"]
opensearch_security.readonly_mode.roles: ["kibana_read_only"]
opensearch_security.cookie.secure: false
EOT
- name: Print Dashboards Config (secure)
shell: bash
if: ${{ inputs.with-security == 'true' }}
run: cat ./OpenSearch-Dashboards/config/opensearch_dashboards.yml
- name: Bootstrap plugin/OpenSearch-Dashboards (no security)
shell: bash
if: ${{ inputs.with-security == 'false' }}
run: |
mkdir -p OpenSearch-Dashboards/plugins
mv index-management-dashboards-plugin OpenSearch-Dashboards/plugins
- name: Bootstrap plugin/OpenSearch-Dashboards (secure)
shell: bash
if: ${{ inputs.with-security == 'true' }}
run: |
mkdir -p OpenSearch-Dashboards/plugins
mv index-management-dashboards-plugin OpenSearch-Dashboards/plugins
mv security-dashboards-plugin OpenSearch-Dashboards/plugins
- name: Bootstrap the OpenSearch Dashboard
uses: nick-fields/retry@v2
with:
timeout_minutes: 20
max_attempts: 2
command: yarn --cwd OpenSearch-Dashboards osd bootstrap --oss --single-version=loose
- name: Compile OpenSearch Dashboards
shell: bash
run: |
cd OpenSearch-Dashboards
node scripts/build_opensearch_dashboards_platform_plugins --no-examples --workers=10 --verbose
- name: Run OpenSearch-Dashboards server
shell: bash
run: |
cd OpenSearch-Dashboards
# Start server
yarn start --no-base-path --no-watch --server.host="0.0.0.0" &
# Wait until OSD is green (up to 10 min)
timeout 600 bash -lc '
until curl -sf http://localhost:5601/api/status | jq -e ".status.overall.state==\"green\"" >/dev/null; do
echo "Waiting for OpenSearch Dashboards to be green..."
sleep 5
done
'
# ---- Cypress runs ----
- name: Cypress tests (no security)
uses: cypress-io/github-action@v2
if: ${{ inputs.with-security == 'false' }}
with:
working-directory: OpenSearch-Dashboards/plugins/index-management-dashboards-plugin
command: yarn run cypress run --browser chrome --config-file cypress.config.js
wait-on: "http://localhost:5601"
wait-on-timeout: 600000 # 10 minutes
browser: chrome
env:
# IMPORTANT: do not leak NODE_OPTIONS to Cypress/Electron
NODE_OPTIONS: ""
# optional: keeps CI logs quieter
CI: 1
TERM: xterm
- name: Cypress tests (secure)
uses: cypress-io/github-action@v2
if: ${{ inputs.with-security == 'true' }}
with:
working-directory: OpenSearch-Dashboards/plugins/index-management-dashboards-plugin
command: yarn run cypress run --browser chrome --config-file cypress.config.js --env SECURITY_ENABLED=true,openSearchUrl=https://localhost:9200,WAIT_FOR_LOADER_BUFFER_MS=500
wait-on: "http://localhost:5601"
wait-on-timeout: 600000 # 10 minutes
browser: chrome
env:
NODE_OPTIONS: "" # unset for Cypress/Electron
CI: 1
TERM: xterm
# Artifacts
- uses: actions/upload-artifact@v4
if: failure()
with:
name: cypress-screenshots
path: OpenSearch-Dashboards/plugins/index-management-dashboards-plugin/cypress/screenshots
- uses: actions/upload-artifact@v4
if: always()
with:
name: cypress-videos
path: OpenSearch-Dashboards/plugins/index-management-dashboards-plugin/cypress/videos