From bea6fa4080f404b9ad12949a4676e1808108fa41 Mon Sep 17 00:00:00 2001 From: Junqiu Lei Date: Wed, 28 Aug 2024 10:44:31 -0700 Subject: [PATCH] Add functional test repo integration test Signed-off-by: Junqiu Lei --- .github/workflows/add-untriaged.yml | 19 -- .github/workflows/auto-release.yml | 28 --- .github/workflows/backport.yml | 28 --- .github/workflows/changelog_verifier.yml | 18 -- .github/workflows/cypress-workflow.yml | 176 ------------------ .github/workflows/remote-integration-test.yml | 175 +++++++++++++++++ .github/workflows/unit-tests-workflow.yml | 115 ------------ .../workflows/verify-binary-installation.yml | 55 ------ 8 files changed, 175 insertions(+), 439 deletions(-) delete mode 100644 .github/workflows/add-untriaged.yml delete mode 100644 .github/workflows/auto-release.yml delete mode 100644 .github/workflows/backport.yml delete mode 100644 .github/workflows/changelog_verifier.yml delete mode 100644 .github/workflows/cypress-workflow.yml create mode 100644 .github/workflows/remote-integration-test.yml delete mode 100644 .github/workflows/unit-tests-workflow.yml delete mode 100644 .github/workflows/verify-binary-installation.yml diff --git a/.github/workflows/add-untriaged.yml b/.github/workflows/add-untriaged.yml deleted file mode 100644 index 9dcc7020..00000000 --- a/.github/workflows/add-untriaged.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Apply 'untriaged' label during issue lifecycle - -on: - issues: - types: [opened, reopened, transferred] - -jobs: - apply-label: - runs-on: ubuntu-latest - steps: - - uses: actions/github-script@v6 - with: - script: | - github.rest.issues.addLabels({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['untriaged'] - }) diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml deleted file mode 100644 index 44985274..00000000 --- a/.github/workflows/auto-release.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Releases - -on: - push: - tags: - - '*' - -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: GitHub App token - id: github_app_token - uses: tibdex/github-app-token@v1.5.0 - with: - app_id: ${{ secrets.APP_ID }} - private_key: ${{ secrets.APP_PRIVATE_KEY }} - installation_id: 22958780 - - name: Get tag - id: tag - uses: dawidd6/action-get-tag@v1 - - uses: actions/checkout@v2 - - uses: ncipollo/release-action@v1 - with: - github_token: ${{ steps.github_app_token.outputs.token }} - bodyFile: release-notes/opensearch-dashboards-maps.release-notes-${{steps.tag.outputs.tag}}.md diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml deleted file mode 100644 index cc046cc5..00000000 --- a/.github/workflows/backport.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Backport -on: - pull_request_target: - types: - - closed - - labeled - -jobs: - backport: - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - name: Backport - steps: - - name: GitHub App token - id: github_app_token - uses: tibdex/github-app-token@v1.5.0 - with: - app_id: ${{ secrets.APP_ID }} - private_key: ${{ secrets.APP_PRIVATE_KEY }} - installation_id: 22958780 - - - name: Backport - uses: VachaShah/backport@v1.1.4 - with: - github_token: ${{ steps.github_app_token.outputs.token }} - branch_name: backport/backport-${{ github.event.number }} \ No newline at end of file diff --git a/.github/workflows/changelog_verifier.yml b/.github/workflows/changelog_verifier.yml deleted file mode 100644 index 992a38b6..00000000 --- a/.github/workflows/changelog_verifier.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: "Changelog Verifier" -on: - pull_request: - types: [opened, edited, review_requested, synchronize, reopened, ready_for_review, labeled, unlabeled] - -jobs: - # Enforces the update of a changelog file on every pull request - verify-changelog: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - ref: ${{ github.event.pull_request.head.sha }} - - - uses: dangoslen/changelog-enforcer@v3 - with: - skipLabels: "autocut, skip-changelog" 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-integration-test.yml b/.github/workflows/remote-integration-test.yml new file mode 100644 index 00000000..21b70dd9 --- /dev/null +++ b/.github/workflows/remote-integration-test.yml @@ -0,0 +1,175 @@ +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 | 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: Checkout Dashboards Functional Test Repo + uses: actions/checkout@v2 + with: + path: opensearch-dashboards-functional-test + repository: opensearch-project/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 chromium --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 diff --git a/.github/workflows/unit-tests-workflow.yml b/.github/workflows/unit-tests-workflow.yml deleted file mode 100644 index 2f817b27..00000000 --- a/.github/workflows/unit-tests-workflow.yml +++ /dev/null @@ -1,115 +0,0 @@ -name: Unit tests workflow -on: - push: - branches: - - main - - 2.* - pull_request: - branches: - - main - - 2.* - - feature/** - -env: - OPENSEARCH_DASHBOARDS_BRANCH: 'main' -jobs: - Get-CI-Image-Tag: - uses: opensearch-project/opensearch-build/.github/workflows/get-ci-image-tag.yml@main - with: - product: opensearch-dashboards - - tests-linux: - needs: Get-CI-Image-Tag - name: Run unit tests - runs-on: ubuntu-latest - container: - # using the same image which is used by opensearch-build team to build the OpenSearch Distribution - # this image tag is subject to change as more dependencies and updates will arrive over time - image: ${{ needs.Get-CI-Image-Tag.outputs.ci-image-version-linux }} - # need to switch to root so that github actions can install runner binary on container without permission issues. - options: --user root - - steps: - - 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: Move plugin to OpenSearch-Dashboard Plugins Directory - run: mv dashboards-maps OpenSearch-Dashboards/plugins/dashboards-maps - - - name: Bootstrap plugin - run: | - chown -R 1000:1000 `pwd` - cd ./OpenSearch-Dashboards/ - su `id -un 1000` -c "source $NVM_DIR/nvm.sh && nvm use && node -v && yarn -v && - cd ./plugins/dashboards-maps && - whoami && yarn osd bootstrap --single-version=loose && yarn run test:jest --coverage" - - - name: Uploads coverage - uses: codecov/codecov-action@v1 - - tests-windows-macos: - strategy: - matrix: - os: [ windows-latest, macos-latest ] - - name: Run unit tests - runs-on: ${{ matrix.os }} - steps: - - name: Checkout Plugin - uses: actions/checkout@v3 - with: - path: dashboards-maps - - # Enable longer filenames for windows - - name: Enable longer filenames - if: ${{ matrix.os == 'windows-latest' }} - run: git config --system core.longpaths true - - - 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: Move plugin to OpenSearch-Dashboard 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 tests with coverage - run: | - cd OpenSearch-Dashboards/plugins/dashboards-maps - yarn run test:jest --coverage - - - name: Uploads coverage - uses: codecov/codecov-action@v1 diff --git a/.github/workflows/verify-binary-installation.yml b/.github/workflows/verify-binary-installation.yml deleted file mode 100644 index 4bc2a864..00000000 --- a/.github/workflows/verify-binary-installation.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: 'Install Dashboards with Plugin via Binary' - -on: [push, pull_request] -env: - OPENSEARCH_VERSION: '3.0.0' - CI: 1 - # avoid warnings like "tput: No value for $TERM and no -T specified" - TERM: xterm - -jobs: - verify-binary-installation: - name: Run binary installation - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest] - # TODO: add windows support when OSD core is stable on windows - runs-on: ${{ matrix.os }} - steps: - - name: Checkout Branch - uses: actions/checkout@v3 - - - name: Set env - run: | - opensearch_version=$(node -p "require('./opensearch_dashboards.json').opensearchDashboardsVersion") - plugin_version=$(node -p "require('./opensearch_dashboards.json').version") - echo "OPENSEARCH_VERSION=$opensearch_version" >> $GITHUB_ENV - echo "PLUGIN_VERSION=$plugin_version" >> $GITHUB_ENV - shell: bash - - - name: Run Opensearch - uses: derek-ho/start-opensearch@v2 - with: - opensearch-version: ${{ env.OPENSEARCH_VERSION }} - security-enabled: false - - - name: Run Dashboards - id: setup-dashboards - uses: derek-ho/setup-opensearch-dashboards@v2 - with: - plugin_name: dashboards-maps - built_plugin_name: customImportMapDashboards - built_plugin_suffix: ${{ env.OPENSEARCH_VERSION }} - install_zip: true - - - name: Start the binary - run: | - nohup ./bin/opensearch-dashboards & - working-directory: ${{ steps.setup-dashboards.outputs.dashboards-binary-directory }} - shell: bash - - - name: Health check - run: | - timeout 300 bash -c 'while [[ "$(curl http://localhost:5601/api/status | jq -r '.status.overall.state')" != "green" ]]; do sleep 5; done' - shell: bash \ No newline at end of file