From cfd35e562c00a2dbf8de643727eef32555d0e5a0 Mon Sep 17 00:00:00 2001 From: SuZhou-Joe Date: Wed, 8 Nov 2023 17:56:58 +0800 Subject: [PATCH 1/8] feat: add workflows Signed-off-by: SuZhou-Joe --- .github/workflows/backport.yml | 43 ++++++++ .github/workflows/changelog_verifier.yml | 19 ++++ .github/workflows/delete_backport_branch.yml | 15 +++ .github/workflows/links_checker.yml | 31 ++++++ .github/workflows/unit_test_workflow.yml | 104 +++++++++++++++++++ 5 files changed, 212 insertions(+) create mode 100644 .github/workflows/backport.yml create mode 100644 .github/workflows/changelog_verifier.yml create mode 100644 .github/workflows/delete_backport_branch.yml create mode 100644 .github/workflows/links_checker.yml create mode 100644 .github/workflows/unit_test_workflow.yml diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml new file mode 100644 index 00000000..c8dfef41 --- /dev/null +++ b/.github/workflows/backport.yml @@ -0,0 +1,43 @@ +name: Backport +on: + pull_request_target: + types: + - closed + - labeled + +jobs: + backport: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + name: Backport + # Only react to merged PRs for security reasons. + # See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target. + if: > + github.event.pull_request.merged + && ( + github.event.action == 'closed' + || ( + github.event.action == 'labeled' + && contains(github.event.label.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 }} + # opensearch-trigger-bot installation ID + installation_id: 22958780 + + - name: Backport + uses: VachaShah/backport@v2.2.0 + with: + github_token: ${{ steps.github_app_token.outputs.token }} + head_template: backport/backport-<%= number %>-to-<%= base %> + files_to_skip: "CHANGELOG.md" + labels_template: "<%= JSON.stringify([...labels, 'autocut']) %>" + failure_labels: "failed backport" diff --git a/.github/workflows/changelog_verifier.yml b/.github/workflows/changelog_verifier.yml new file mode 100644 index 00000000..0890ea8b --- /dev/null +++ b/.github/workflows/changelog_verifier.yml @@ -0,0 +1,19 @@ +name: "Changelog Verifier" +on: + pull_request: + branches: [ '**', '!feature/**' ] + 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/delete_backport_branch.yml b/.github/workflows/delete_backport_branch.yml new file mode 100644 index 00000000..387a124b --- /dev/null +++ b/.github/workflows/delete_backport_branch.yml @@ -0,0 +1,15 @@ +name: Delete merged branch of the backport PRs +on: + pull_request: + types: + - closed + +jobs: + delete-branch: + runs-on: ubuntu-latest + if: startsWith(github.event.pull_request.head.ref,'backport/') + steps: + - name: Delete merged branch + uses: SvanBoxel/delete-merged-branch@main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/links_checker.yml b/.github/workflows/links_checker.yml new file mode 100644 index 00000000..c02921d9 --- /dev/null +++ b/.github/workflows/links_checker.yml @@ -0,0 +1,31 @@ +# Copyright OpenSearch Contributors +# SPDX-License-Identifier: Apache-2.0 + +name: Link Checker + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + linkchecker: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Load Excludes + run: | + LYCHEE_EXCLUDE=$(sed -e :a -e 'N;s/\n/ --exclude /;ta' .lycheeexclude) + echo "LYCHEE_EXCLUDE=$LYCHEE_EXCLUDE" >> $GITHUB_ENV + - name: Lychee Link Checker + id: lychee + uses: lycheeverse/lychee-action@v1.0.9 + with: + args: --accept=200,403,429 --exclude ${{ env.LYCHEE_EXCLUDE }} --exclude-mail "**/*.html" "**/*.md" "**/*.txt" "**/*.json" "**/*.js" "**/*.ts" "**/*.tsx" + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + - name: Fail if there were link errors + run: exit ${{ steps.lychee.outputs.exit_code }} \ No newline at end of file diff --git a/.github/workflows/unit_test_workflow.yml b/.github/workflows/unit_test_workflow.yml new file mode 100644 index 00000000..4ff6319f --- /dev/null +++ b/.github/workflows/unit_test_workflow.yml @@ -0,0 +1,104 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Build and test + +# trigger on every commit push and PR for all branches except pushes for backport branches +on: + push: + branches: ['*'] + paths-ignore: + - '**/*.md' + - 'docs/**' + pull_request: + branches: ['*'] + paths-ignore: + - '**/*.md' + - 'docs/**' +env: + OPENSEARCH_DASHBOARDS_VERSION: '2.x' + NODE_OPTIONS: "--max-old-space-size=6144 --dns-result-order=ipv4first" + +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: + # Enable longer filenames for windows + - name: Checkout OpenSearch-Dashboards + uses: actions/checkout@v2 + with: + repository: opensearch-project/OpenSearch-Dashboards + ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }} + path: OpenSearch-Dashboards + - name: Checkout dashboards-assistant plugin + uses: actions/checkout@v2 + with: + path: OpenSearch-Dashboards/plugins/dashboards-assistant + - name: Bootstrap / Run tests + 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-assistant && + whoami && yarn osd bootstrap && yarn run test:jest --coverage" + + - name: Uploads coverage + uses: codecov/codecov-action@v1 + + tests-windows-macos: + name: Run unit tests + strategy: + matrix: + os: [macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + # 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@v2 + with: + repository: opensearch-project/OpenSearch-Dashboards + ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }} + 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: Checkout dashboards-assistant plugin + uses: actions/checkout@v2 + with: + path: OpenSearch-Dashboards/plugins/dashboards-assistant + - name: Bootstrap plugin/dashboards-assistant + run: | + cd OpenSearch-Dashboards/plugins/dashboards-assistant + yarn osd bootstrap + - name: Run tests + run: | + cd OpenSearch-Dashboards/plugins/dashboards-assistant + yarn run test:jest --coverage From 6f0c0e4feb251e04cbc003149601af517a18ca23 Mon Sep 17 00:00:00 2001 From: SuZhou-Joe Date: Wed, 8 Nov 2023 17:58:52 +0800 Subject: [PATCH 2/8] feat: remove useless workflow Signed-off-by: SuZhou-Joe --- .github/workflows/delete_backport_branch.yml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 .github/workflows/delete_backport_branch.yml diff --git a/.github/workflows/delete_backport_branch.yml b/.github/workflows/delete_backport_branch.yml deleted file mode 100644 index 387a124b..00000000 --- a/.github/workflows/delete_backport_branch.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Delete merged branch of the backport PRs -on: - pull_request: - types: - - closed - -jobs: - delete-branch: - runs-on: ubuntu-latest - if: startsWith(github.event.pull_request.head.ref,'backport/') - steps: - - name: Delete merged branch - uses: SvanBoxel/delete-merged-branch@main - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From cfc3e4d8791a56a53c3978337f2cdddbbce68bfb Mon Sep 17 00:00:00 2001 From: SuZhou-Joe Date: Thu, 9 Nov 2023 13:16:08 +0800 Subject: [PATCH 3/8] feat: fix unit test flow Signed-off-by: SuZhou-Joe --- .github/workflows/unit_test_workflow.yml | 14 +++++--------- package.json | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/unit_test_workflow.yml b/.github/workflows/unit_test_workflow.yml index 4ff6319f..752b7d1a 100644 --- a/.github/workflows/unit_test_workflow.yml +++ b/.github/workflows/unit_test_workflow.yml @@ -5,16 +5,12 @@ name: Build and test # trigger on every commit push and PR for all branches except pushes for backport branches on: - push: - branches: ['*'] - paths-ignore: - - '**/*.md' - - 'docs/**' pull_request: - branches: ['*'] - paths-ignore: - - '**/*.md' - - 'docs/**' + branches: + - "*" + push: + branches: + - "*" env: OPENSEARCH_DASHBOARDS_VERSION: '2.x' NODE_OPTIONS: "--max-old-space-size=6144 --dns-result-order=ipv4first" diff --git a/package.json b/package.json index d7d5d828..427de346 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "osd": "node ../../scripts/osd", "build": "yarn plugin-helpers build", - "test": "../../node_modules/.bin/jest --config ./test/jest.config.js", + "test:jest": "../../node_modules/.bin/jest --config ./test/jest.config.js", "plugin-helpers": "node ../../scripts/plugin_helpers", "prepare": "husky install", "lint:es": "node ../../scripts/eslint", From 4aad1b12b21cf5f26df2a5dae599f4133001ad76 Mon Sep 17 00:00:00 2001 From: SuZhou-Joe Date: Thu, 9 Nov 2023 17:49:16 +0800 Subject: [PATCH 4/8] feat: make workflow run Signed-off-by: SuZhou-Joe --- .github/workflows/unit_test_workflow.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/unit_test_workflow.yml b/.github/workflows/unit_test_workflow.yml index 752b7d1a..8c301874 100644 --- a/.github/workflows/unit_test_workflow.yml +++ b/.github/workflows/unit_test_workflow.yml @@ -6,11 +6,9 @@ name: Build and test # trigger on every commit push and PR for all branches except pushes for backport branches on: pull_request: - branches: - - "*" + branches: ["**"] push: - branches: - - "*" + branches: ["**"] env: OPENSEARCH_DASHBOARDS_VERSION: '2.x' NODE_OPTIONS: "--max-old-space-size=6144 --dns-result-order=ipv4first" From e8c9fb8d7302314256fd417dd652ded3a5fd29e5 Mon Sep 17 00:00:00 2001 From: SuZhou-Joe Date: Thu, 9 Nov 2023 17:51:34 +0800 Subject: [PATCH 5/8] feat: make workflows run Signed-off-by: SuZhou-Joe --- .github/workflows/changelog_verifier.yml | 2 +- .github/workflows/links_checker.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/changelog_verifier.yml b/.github/workflows/changelog_verifier.yml index 0890ea8b..2cf959c0 100644 --- a/.github/workflows/changelog_verifier.yml +++ b/.github/workflows/changelog_verifier.yml @@ -1,7 +1,7 @@ name: "Changelog Verifier" on: pull_request: - branches: [ '**', '!feature/**' ] + branches: [ '**' ] types: [opened, edited, review_requested, synchronize, reopened, ready_for_review, labeled, unlabeled] jobs: diff --git a/.github/workflows/links_checker.yml b/.github/workflows/links_checker.yml index c02921d9..5a5cf463 100644 --- a/.github/workflows/links_checker.yml +++ b/.github/workflows/links_checker.yml @@ -5,9 +5,9 @@ name: Link Checker on: push: - branches: [ main ] + branches: [ "**" ] pull_request: - branches: [ main ] + branches: [ "**" ] jobs: linkchecker: From 01c754729945007e0bd875056f7e088280f42102 Mon Sep 17 00:00:00 2001 From: SuZhou-Joe Date: Thu, 9 Nov 2023 17:54:52 +0800 Subject: [PATCH 6/8] feat: make workflows run Signed-off-by: SuZhou-Joe --- .github/workflows/links_checker.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/links_checker.yml b/.github/workflows/links_checker.yml index 5a5cf463..06cfbf33 100644 --- a/.github/workflows/links_checker.yml +++ b/.github/workflows/links_checker.yml @@ -16,9 +16,15 @@ jobs: steps: - uses: actions/checkout@v2 + - name: Checkout OpenSearch-Dashboards + uses: actions/checkout@v2 + with: + repository: opensearch-project/OpenSearch-Dashboards + ref: main + path: OpenSearch-Dashboards - name: Load Excludes run: | - LYCHEE_EXCLUDE=$(sed -e :a -e 'N;s/\n/ --exclude /;ta' .lycheeexclude) + LYCHEE_EXCLUDE=$(sed -e :a -e 'N;s/\n/ --exclude /;ta' OpenSearch-Dashboards/.lycheeexclude) echo "LYCHEE_EXCLUDE=$LYCHEE_EXCLUDE" >> $GITHUB_ENV - name: Lychee Link Checker id: lychee From b946d8e9d05d69edd559a2709474f23575700285 Mon Sep 17 00:00:00 2001 From: SuZhou-Joe Date: Fri, 10 Nov 2023 16:13:09 +0800 Subject: [PATCH 7/8] feat: make windows flow pass Signed-off-by: SuZhou-Joe --- .babelrc | 18 ------------------ babel.config.js | 26 ++++++++++++++++++++++++++ test/jest.config.js | 6 +----- 3 files changed, 27 insertions(+), 23 deletions(-) delete mode 100644 .babelrc create mode 100644 babel.config.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index e21b3f2f..00000000 --- a/.babelrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "targets": { "node": "10" } - } - ], - "@babel/preset-react", - "@babel/preset-typescript" - ], - "plugins": [ - "@babel/plugin-transform-modules-commonjs", - ["@babel/plugin-transform-runtime", { "regenerator": true }], - "@babel/plugin-proposal-class-properties", - "@babel/plugin-proposal-object-rest-spread" - ] -} \ No newline at end of file diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..a0f8a3ad --- /dev/null +++ b/babel.config.js @@ -0,0 +1,26 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +// babelrc doesn't respect NODE_PATH anymore but using require does. +// Alternative to install them locally in node_modules +module.exports = function (api) { + // ensure env is test so that this config won't impact build or dev server + if (api.env('test')) { + return { + presets: [ + require('@babel/preset-env'), + require('@babel/preset-react'), + require('@babel/preset-typescript'), + ], + plugins: [ + [require('@babel/plugin-transform-runtime'), { regenerator: true }], + require('@babel/plugin-proposal-class-properties'), + require('@babel/plugin-proposal-object-rest-spread'), + [require('@babel/plugin-transform-modules-commonjs'), { allowTopLevelThis: true }], + ], + }; + } + return {}; +}; diff --git a/test/jest.config.js b/test/jest.config.js index 50752886..b2e97fb7 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -22,11 +22,7 @@ module.exports = { '/public/requests/', '/__utils__/', ], - transform: { - '^.+\\.tsx?$': ['ts-jest', { diagnostics: false }], - 'node_modules/(langchain|langsmith)/.+\\.js$': ['ts-jest', { diagnostics: false }], - }, - transformIgnorePatterns: ['/node_modules/(?!langchain|langsmith)'], + transformIgnorePatterns: ['node_modules/(?!langchain|langsmith)'], moduleNameMapper: { '\\.(css|less|sass|scss)$': '/test/__mocks__/styleMock.js', '\\.(gif|ttf|eot|svg|png)$': '/test/__mocks__/fileMock.js', From 811133ed98d7a0844a163a557b859b94b416586e Mon Sep 17 00:00:00 2001 From: SuZhou-Joe Date: Fri, 10 Nov 2023 16:27:51 +0800 Subject: [PATCH 8/8] feat: change .babelrc to babel.config.js according to https://github.com/jestjs/jest/issues/6229\#issuecomment-403539460 Signed-off-by: SuZhou-Joe --- test/jest.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/jest.config.js b/test/jest.config.js index b2e97fb7..3a5ab955 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -22,6 +22,7 @@ module.exports = { '/public/requests/', '/__utils__/', ], + // https://github.com/jestjs/jest/issues/6229#issuecomment-403539460 transformIgnorePatterns: ['node_modules/(?!langchain|langsmith)'], moduleNameMapper: { '\\.(css|less|sass|scss)$': '/test/__mocks__/styleMock.js',