Skip to content

Commit

Permalink
[Backport 2.x] Add E2E Cypress workflow for Dashboards Reporting (#265)
Browse files Browse the repository at this point in the history
* [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]>

* [Backport 2.x] Add E2E Cypress workflow for Dashboards Reporting

Signed-off-by: Ryan Liang <[email protected]>

---------

Signed-off-by: Ryan Liang <[email protected]>
RyanL1997 authored Dec 19, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 7dd5e6b commit 59b3157
Showing 4 changed files with 220 additions and 18 deletions.
180 changes: 180 additions & 0 deletions .github/workflows/cypress-e2e-reporting-test.yml
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: '2.x'
OPENSEARCH_VERSION: '2.12.0'
OPENSEARCH_PLUGIN_VERSION: '2.12.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
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -9,4 +9,7 @@ yarn-error.log
.history/
.eslintcache
package-lock.json
/target/
/target/
.cypress/screenshots
.cypress/videos
.cypress/downloads
36 changes: 36 additions & 0 deletions cypress.config.js
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',
},
});
17 changes: 0 additions & 17 deletions cypress.json

This file was deleted.

0 comments on commit 59b3157

Please sign in to comment.