From fd3116da935a9a0f242e61ee301b6e5be022aa11 Mon Sep 17 00:00:00 2001 From: Junqiu Lei Date: Thu, 29 Aug 2024 10:41:30 -0700 Subject: [PATCH] Use functional test repo to run maps integration test workflow Signed-off-by: Junqiu Lei --- .github/workflows/cypress-workflow.yml | 176 ----------------- .../remote-ftr-integ-test-workflow.yml | 184 ++++++++++++++++++ 2 files changed, 184 insertions(+), 176 deletions(-) delete mode 100644 .github/workflows/cypress-workflow.yml create mode 100644 .github/workflows/remote-ftr-integ-test-workflow.yml diff --git a/.github/workflows/cypress-workflow.yml b/.github/workflows/cypress-workflow.yml deleted file mode 100644 index 3023daa2..00000000 --- a/.github/workflows/cypress-workflow.yml +++ /dev/null @@ -1,176 +0,0 @@ -name: E2E Cypress tests -on: - pull_request: - branches: - - main - - 2.* - - feature/** - push: - branches: - - main - - 2.* -env: - OPENSEARCH_DASHBOARDS_BRANCH: 'main' - 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 --single-version=loose - - - 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 600 - shell: powershell - - - name: Sleep until OSD server starts - non-windows - if: ${{ matrix.os != 'windows-latest' }} - run: sleep 600 - 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') }} - - - 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 - wait-on: 'http://localhost:5601' - wait-on-timeout: 300 - env: - CYPRESS_CACHE_FOLDER: ${{ matrix.cypress_cache_folder }} - - # Screenshots are only captured on failure, will change this once we do visual regression tests - - uses: actions/upload-artifact@v1 - 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/upload-artifact@v1 - if: always() - with: - name: cypress-videos-${{ matrix.os }} - path: OpenSearch-Dashboards/plugins/dashboards-maps/cypress/videos diff --git a/.github/workflows/remote-ftr-integ-test-workflow.yml b/.github/workflows/remote-ftr-integ-test-workflow.yml new file mode 100644 index 00000000..01155bdd --- /dev/null +++ b/.github/workflows/remote-ftr-integ-test-workflow.yml @@ -0,0 +1,184 @@ +name: FTR E2E Dashboards Maps Test + +on: [pull_request, push] + +env: + PLUGIN_NAME: dashboards-maps + OPENSEARCH_DASHBOARDS_VERSION: "main" + OPENSEARCH_VERSION: "3.0.0" + OPENSEARCH_PLUGIN_VERSION: "3.0.0.0" + +jobs: + tests: + name: Run FTR E2E Dashboards Maps Test + 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: + fail-fast: false + matrix: + os: [ubuntu-latest] + java: [21] + runs-on: ${{ matrix.os }} + + steps: + - name: Set up Java 21 + uses: actions/setup-java@v3 + with: + distribution: "corretto" + java-version: "21" + + - name: Download Job Scheduler artifact + uses: suisei-cn/actions-download-file@v1.4.0 + 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 Geospatial artifact + uses: suisei-cn/actions-download-file@v1.4.0 + with: + url: https://aws.oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opensearch.plugin&a=geospatial&v=${{ env.OPENSEARCH_PLUGIN_VERSION }}-SNAPSHOT&p=zip + target: plugin-artifacts/ + filename: opensearch-geospatial.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 geospatial plugin + run: | + /bin/bash -c "yes | ./opensearch-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/bin/opensearch-plugin install file:$(pwd)/plugin-artifacts/opensearch-geospatial.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 + run: curl http://localhost:9200/ + 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 Maps 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: Boodstrap Opensearch Dashboards + run: | + yarn osd bootstrap --single-version=loose + working-directory: OpenSearch-Dashboards + + - name: Run Opensearch Dashboards with Dashboards Maps Plugin Installed + run: | + nohup yarn start --no-base-path --no-watch --server.host="0.0.0.0" | tee dashboard.log & + working-directory: OpenSearch-Dashboards + + - name: Wait OpenSearch Dashboards Compiled Completed + run: | + if timeout 900 grep -q "bundles compiled successfully after" <(tail -n0 -f dashboard.log); then + echo "OpenSearch Dashboards compiled successfully." + else + echo "Timeout for 900 seconds reached. OpenSearch Dashboards did not finish compiling." + exit 1 + fi + working-directory: OpenSearch-Dashboards + + - name: Show OpenSearch Dashboards Logs + if: always() + run: cat dashboard.log + working-directory: OpenSearch-Dashboards + + - name: OpenSearch Dashboards Health check + run: | + timeout 600 bash -c 'while [[ "$(curl -k http://localhost:5601/api/status | jq -r '.status.overall.state')" != "green" ]]; do sleep 5; done' + shell: bash + + - name: Checkout Dashboards Functional Test Repo + uses: actions/checkout@v2 + with: + path: opensearch-dashboards-functional-test + repository: junqiu-lei/opensearch-dashboards-functional-test + ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }} + fetch-depth: 0 + + - name: Install Cypress + run: | + npm install cypress --save-dev + shell: bash + working-directory: opensearch-dashboards-functional-test + + - 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-functional-test + + - name: Run Cypress tests + run: | + yarn cypress:run-without-security --browser electron --spec 'cypress/integration/plugins/custom-import-map-dashboards/*.js' + working-directory: opensearch-dashboards-functional-test + + - name: Capture failure screenshots + uses: actions/upload-artifact@v1 + if: failure() + with: + name: cypress-screenshots-${{ matrix.os }} + path: opensearch-dashboards-functional-test/cypress/screenshots + + - name: Capture test video + uses: actions/upload-artifact@v1 + if: failure() + with: + name: cypress-videos-${{ matrix.os }} + path: opensearch-dashboards-functional-test/cypress/videos