Fix CI failure on maps-dashboards #73
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
name: E2E Cypress tests | |
on: | |
pull_request: | |
branches: | |
- main | |
- 2.* | |
- feature/** | |
push: | |
branches: | |
- main | |
- 2.* | |
env: | |
OPENSEARCH_DASHBOARDS_BRANCH: 'main' | |
OPENSEARCH_VERSION: '3.0.0-SNAPSHOT' | |
GEOSPATIAL_PLUGIN_BRANCH: 'main' | |
jobs: | |
tests: | |
env: | |
# prevents extra Cypress installation progress messages | |
CI: 1 | |
# avoid warnings like "tput: No value for $TERM and no -T specified" | |
TERM: xterm | |
WORKING_DIR: ${{ matrix.working_directory }}. | |
strategy: | |
# This setting says that all jobs should finish, even if one fails | |
fail-fast: false | |
matrix: | |
os: [ ubuntu-latest, windows-latest ] | |
include: | |
- os: windows-latest | |
working_directory: X:\ | |
os_java_options: -Xmx4068M | |
cypress_cache_folder: ~/AppData/Local/Cypress/Cache | |
- os: ubuntu-latest | |
cypress_cache_folder: ~/.cache/Cypress | |
name: Test and Build Dashboards Maps on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Set up JDK | |
uses: actions/setup-java@v1 | |
with: | |
java-version: 11 | |
# This is a hack, but this step creates a link to the X: mounted drive, which makes the path | |
# short enough to work on Windows | |
- name: Shorten Path | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: subst 'X:' . | |
- name: Checkout geospatial plugin | |
uses: actions/checkout@v3 | |
with: | |
path: geospatial | |
repository: opensearch-project/geospatial | |
ref: ${{ env.GEOSPATIAL_PLUGIN_BRANCH }} | |
- name: Run Opensearch with plugin | |
working-directory: ${{ env.WORKING_DIR }} | |
run: | | |
cd geospatial | |
./gradlew run & | |
timeout 600 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:9200)" != "200" ]]; do sleep 5; done' | |
shell: bash | |
env: | |
_JAVA_OPTIONS: ${{ matrix.os_java_options }} | |
- name: Checkout Plugin | |
uses: actions/checkout@v3 | |
with: | |
path: dashboards-maps | |
- name: Checkout OpenSearch Dashboards | |
uses: actions/checkout@v3 | |
with: | |
repository: opensearch-project/OpenSearch-Dashboards | |
ref: ${{ env.OPENSEARCH_DASHBOARDS_BRANCH }} | |
path: OpenSearch-Dashboards | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version-file: './OpenSearch-Dashboards/.nvmrc' | |
registry-url: 'https://registry.npmjs.org' | |
- name: Install Yarn | |
# Need to use bash to avoid having a windows/linux specific step | |
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 | |
- run: yarn -v | |
- name: Set npm to use bash for shell | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
# Sets Windows to use bash for npm shell so the script commands work as intended | |
npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" | |
- name: Move plugin to OpenSearch-Dashboards Plugins Directory | |
run: | | |
mv dashboards-maps OpenSearch-Dashboards/plugins/dashboards-maps | |
- name: Bootstrap plugin | |
run: | | |
cd OpenSearch-Dashboards/plugins/dashboards-maps | |
yarn osd bootstrap | |
- name: Run OpenSearch Dashboards server | |
run: | | |
cd OpenSearch-Dashboards | |
yarn start --no-base-path --no-watch --server.host="0.0.0.0" & | |
shell: bash | |
- name: Sleep until OSD server starts - windows | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: Start-Sleep -s 900 | |
shell: powershell | |
- name: Sleep until OSD server starts - non-windows | |
if: ${{ matrix.os != 'windows-latest' }} | |
run: timeout 600 bash -c 'while [[ "$(curl http://localhost:5601/api/status | jq -r '.status.overall.state')" != "green" ]]; do sleep 5; done' | |
shell: bash | |
- name: Install Cypress | |
run: | | |
cd OpenSearch-Dashboards/plugins/dashboards-maps | |
# This will install Cypress in case the binary is missing which can happen on Windows | |
# If the binary exists, this will exit quickly so it should not be an expensive operation | |
npx cypress install | |
shell: bash | |
- name: Get Cypress version | |
id: cypress_version | |
run: | | |
cd OpenSearch-Dashboards/plugins/dashboards-maps | |
echo "::set-output name=cypress_version::$(cat ./package.json | jq '.dependencies.cypress' | tr -d '"')" | |
- name: Cache Cypress | |
id: cache-cypress | |
uses: actions/cache@v2 | |
with: | |
path: ${{ matrix.cypress_cache_folder }} | |
key: cypress-cache-v2-${{ runner.os }}-${{ hashFiles('**/package.json') }} | |
restore-keys: | | |
cypress-cache-v2-${{ runner.os }}-${{ hashFiles('**/package.json') }} | |
- name: Reset npm's script shell | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
# Resetting npm's script shell for Windows so `yarn run cypress` doesn't have conflicts | |
npm config delete script-shell | |
- name: Run Cypress tests | |
uses: cypress-io/github-action@v5 | |
with: | |
working-directory: OpenSearch-Dashboards/plugins/dashboards-maps | |
command: yarn run cypress run | |
browser: electron | |
env: | |
CYPRESS_CACHE_FOLDER: ${{ matrix.cypress_cache_folder }} | |
- name: List directories | |
run: | | |
cd OpenSearch-Dashboards/plugins/dashboards-maps | |
ls -la | |
ls -la cypress | |
ls -la cypress/screenshots | |
ls -la cypress/videos | |
- name: Check if the screenshot and video artifacts exist | |
if: always() | |
run: | | |
cd OpenSearch-Dashboards/plugins/dashboards-maps | |
if [ -d "cypress/screenshots" ]; then | |
echo "Screenshots directory exists" | |
else | |
echo "Screenshots directory does not exist" | |
fi | |
if [ -d "cypress/videos" ]; then | |
echo "Videos directory exists" | |
else | |
echo "Videos directory does not exist" | |
fi | |
# Screenshots are only captured on failure, will change this once we do visual regression tests | |
- uses: actions/[email protected] | |
if: failure() | |
with: | |
name: cypress-screenshots-${{ matrix.os }} | |
path: OpenSearch-Dashboards/plugins/dashboards-maps/cypress/screenshots | |
# Test run video was always captured, so this action uses "always()" condition | |
- uses: actions/[email protected] | |
if: always() | |
with: | |
name: cypress-videos-${{ matrix.os }} | |
path: OpenSearch-Dashboards/plugins/dashboards-maps/cypress/videos |