-
Notifications
You must be signed in to change notification settings - Fork 35
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CI/CD] Add E2E Cypress workflow for Dashboards Reporting (#262)
* [CI/CD] Add E2E Cypress workflow for Dashboards Reporting Signed-off-by: Ryan Liang <[email protected]> * Enable multiple try for bootstrap Signed-off-by: Ryan Liang <[email protected]> * Add 3 times retry for osd bootstrap Signed-off-by: Ryan Liang <[email protected]> * Correct the name of the job and title Signed-off-by: Ryan Liang <[email protected]> --------- Signed-off-by: Ryan Liang <[email protected]>
- Loading branch information
Showing
4 changed files
with
220 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,180 @@ | ||
name: Cypress E2E Dashboards Reporting Plugin Test | ||
|
||
on: [pull_request, push] | ||
|
||
env: | ||
CI: 1 | ||
# avoid warnings like "tput: No value for $TERM and no -T specified" | ||
TERM: xterm | ||
OPENSEARCH_DASHBOARDS_VERSION: 'main' | ||
OPENSEARCH_VERSION: '3.0.0' | ||
OPENSEARCH_PLUGIN_VERSION: '3.0.0.0' | ||
PLUGIN_NAME: dashboards-reporting | ||
|
||
jobs: | ||
tests: | ||
name: Run Cypress E2E Dashboards Reporting Plugin Tests | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
os: [ ubuntu-latest ] | ||
jdk: [ 11 ] | ||
runs-on: ${{ matrix.os }} | ||
|
||
steps: | ||
- name: Set up JDK | ||
uses: actions/setup-java@v1 | ||
with: | ||
java-version: ${{ matrix.jdk }} | ||
|
||
- name: Download Job Scheduler artifact | ||
uses: suisei-cn/[email protected] | ||
with: | ||
url: https://aws.oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opensearch.plugin&a=opensearch-job-scheduler&v=${{ env.OPENSEARCH_PLUGIN_VERSION }}-SNAPSHOT&p=zip | ||
target: plugin-artifacts/ | ||
filename: job-scheduler.zip | ||
|
||
- name: Download Reports Scheduler artifact | ||
uses: suisei-cn/[email protected] | ||
with: | ||
url: https://aws.oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opensearch.plugin&a=opensearch-reports-scheduler&v=${{ env.OPENSEARCH_PLUGIN_VERSION }}-SNAPSHOT&p=zip | ||
target: plugin-artifacts/ | ||
filename: reports-scheduler.zip | ||
|
||
- name: Download OpenSearch | ||
uses: peternied/download-file@v2 | ||
with: | ||
url: https://artifacts.opensearch.org/snapshots/core/opensearch/${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/opensearch-min-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT-linux-x64-latest.tar.gz | ||
|
||
- name: Extract OpenSearch | ||
run: | | ||
tar -xzf opensearch-*.tar.gz | ||
rm -f opensearch-*.tar.gz | ||
shell: bash | ||
|
||
- name: Install Job Scheduler | ||
run: | | ||
/bin/bash -c "yes | ./opensearch-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/bin/opensearch-plugin install file:$(pwd)/plugin-artifacts/job-scheduler.zip" | ||
shell: bash | ||
|
||
- name: Install Reports Scheduler | ||
run: | | ||
/bin/bash -c "yes | ./opensearch-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/bin/opensearch-plugin install file:$(pwd)/plugin-artifacts/reports-scheduler.zip" | ||
shell: bash | ||
|
||
- name: Run OpenSearch | ||
run: | | ||
/bin/bash -c "./opensearch-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/bin/opensearch &" | ||
sleep 30 | ||
shell: bash | ||
|
||
- name: Check OpenSearch Running on Linux | ||
if: ${{ runner.os != 'Windows'}} | ||
run: curl http://localhost:9200/ | ||
shell: bash | ||
|
||
- name: Show OpenSearch Logs | ||
if: always() | ||
run: cat ./opensearch-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/logs/opensearch.log | ||
shell: bash | ||
|
||
- name: Checkout OpenSearch Dashboards | ||
uses: actions/checkout@v2 | ||
with: | ||
path: OpenSearch-Dashboards | ||
repository: opensearch-project/OpenSearch-Dashboards | ||
ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }} | ||
fetch-depth: 0 | ||
filter: | | ||
cypress | ||
test | ||
- name: Checkout Dashboards Reporting Plugin in OpenSearch Dashboards Plugins Dir | ||
uses: actions/checkout@v2 | ||
with: | ||
path: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} | ||
|
||
- id: tool-versions | ||
run: | | ||
echo "node_version=$(cat .node-version)" >> $GITHUB_OUTPUT | ||
echo "yarn_version=$(jq -r '.engines.yarn' package.json)" >> $GITHUB_OUTPUT | ||
working-directory: OpenSearch-Dashboards | ||
shell: bash | ||
|
||
- uses: actions/setup-node@v1 | ||
with: | ||
node-version: ${{ steps.tool-versions.outputs.node_version }} | ||
registry-url: 'https://registry.npmjs.org' | ||
|
||
- name: Setup Opensearch Dashboards | ||
run: | | ||
npm uninstall -g yarn | ||
echo "Installing yarn ${{ steps.tool-versions.outputs.yarn_version }}" | ||
npm i -g yarn@${{ steps.tool-versions.outputs.yarn_version }} | ||
yarn cache clean | ||
working-directory: OpenSearch-Dashboards | ||
shell: bash | ||
|
||
- name: OpenSearch Dashboards Plugin Bootstrap | ||
run: | | ||
max_retries=3 | ||
count=0 | ||
until yarn osd bootstrap; do | ||
exit_code=$? | ||
count=$(($count + 1)) | ||
echo "Attempt $count/$max_retries failed with exit code $exit_code, retrying..." | ||
if [ $count -ge $max_retries ]; then | ||
echo "Reached maximum retry attempts, stopping..." | ||
exit $exit_code | ||
fi | ||
sleep 5 # Wait for 5 seconds before retrying | ||
done | ||
working-directory: OpenSearch-Dashboards | ||
shell: bash | ||
|
||
- name: Run Opensearch Dashboards with Dashboards Reporting Plugin Installed | ||
run: | | ||
nohup yarn start --no-base-path --no-watch | tee dashboard.log & | ||
working-directory: OpenSearch-Dashboards | ||
|
||
- name : Check If OpenSearch Dashboards Is Ready | ||
if: ${{ runner.os == 'Linux' }} | ||
run: | | ||
if timeout 600 grep -q "bundles compiled successfully after" <(tail -n0 -f dashboard.log); then | ||
echo "OpenSearch Dashboards compiled successfully." | ||
else | ||
echo "Timeout for 600 seconds reached. OpenSearch Dashboards did not finish compiling." | ||
exit 1 | ||
fi | ||
working-directory: OpenSearch-Dashboards | ||
|
||
- name: Install Cypress | ||
run: | | ||
npx cypress install | ||
shell: bash | ||
working-directory: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} | ||
|
||
- name: Get Cypress version | ||
id: cypress_version | ||
run: | | ||
echo "::set-output name=cypress_version::$(cat ./package.json | jq '.dependencies.cypress' | tr -d '"')" | ||
working-directory: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} | ||
|
||
- name: Run Cypress tests | ||
run: | | ||
yarn cypress:run --browser chrome --headless --spec '.cypress/integration/*' | ||
working-directory: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} | ||
|
||
- name: Capture failure screenshots | ||
uses: actions/upload-artifact@v1 | ||
if: failure() | ||
with: | ||
name: cypress-screenshots-${{ matrix.os }} | ||
path: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}/.cypress/screenshots | ||
|
||
- name: Capture test video | ||
uses: actions/upload-artifact@v1 | ||
if: failure() | ||
with: | ||
name: cypress-videos-${{ matrix.os }} | ||
path: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }}/.cypress/videos |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
const { defineConfig } = require('cypress'); | ||
|
||
module.exports = defineConfig({ | ||
video: true, | ||
chromeWebSecurity: true, | ||
fixturesFolder: '.cypress/fixtures', | ||
screenshotsFolder: '.cypress/screenshots', | ||
videosFolder: '.cypress/videos', | ||
downloadsFolder: '.cypress/downloads', | ||
viewportWidth: 2000, | ||
viewportHeight: 1320, | ||
requestTimeout: 60000, | ||
responseTimeout: 60000, | ||
defaultCommandTimeout: 60000, | ||
//experimentalNetworkStubbing: true, | ||
//experimentalMemoryManagement: true, | ||
numTestsKeptInMemory: 10, //Default value 50, chrome crashes without lowering | ||
env: { | ||
opensearch: 'localhost:9200', | ||
opensearchDashboards: 'localhost:5601', | ||
security_enabled: true, | ||
}, | ||
'cypress-watch-and-reload': { | ||
watch: ['common/**', 'public/**', 'server/**'], | ||
}, | ||
e2e: { | ||
// We've imported your old cypress plugins here. | ||
// You may want to clean this up later by importing these. | ||
setupNodeEvents(on, config) { | ||
return require('./.cypress/plugins/index.js')(on, config); | ||
}, | ||
baseUrl: 'http://localhost:5601', | ||
specPattern: '.cypress/integration/**/*.spec.{js,jsx,ts,tsx}', | ||
supportFile: '.cypress/support/index.js', | ||
}, | ||
}); |
This file was deleted.
Oops, something went wrong.