diff --git a/.github/workflows/cypress_workflow.yml b/.github/workflows/cypress_workflow.yml index 5e78785f9b88..83ec4993c73e 100644 --- a/.github/workflows/cypress_workflow.yml +++ b/.github/workflows/cypress_workflow.yml @@ -6,16 +6,43 @@ on: branches: [ '**' ] paths-ignore: - '**/*.md' + workflow_dispatch: + inputs: + test_repo: + description: 'Test repo' + default: 'opensearch-project/opensearch-dashboards-functional-test' + required: true + type: string + test_branch: + description: 'Test branch (default: source branch)' + required: false + type: string + pr_number: + description: 'PR Number' + required: false + type: number + specs: + description: 'Additional tests to run' + required: false + type: string env: + SOURCE_REPO: ${{ github.repository }} + SOURCE_BRANCH: ${{ github.base_ref }} + TEST_REPO: ${{ inputs.test_repo != '' && inputs.test_repo || 'opensearch-project/opensearch-dashboards-functional-test' }} + TEST_BRANCH: "${{ inputs.test_branch != '' && inputs.test_branch || github.base_ref }}" FTR_PATH: 'ftr' START_CMD: 'node ../scripts/opensearch_dashboards --dev --no-base-path --no-watch' OPENSEARCH_SNAPSHOT_CMD: 'node ../scripts/opensearch snapshot' SPEC: 'cypress/integration/core-opensearch-dashboards/opensearch-dashboards/**/*.js,' + ADDITIONAL_SPEC: ${{ inputs.specs != '' && inputs.specs || '' }} CYPRESS_BROWSER: 'chromium' CYPRESS_VISBUILDER_ENABLED: true CYPRESS_DATASOURCE_MANAGEMENT_ENABLED: false OSD_SNAPSHOT_SKIP_VERIFY_CHECKSUM: true + COMMENT_TAG: '[MANUAL CYPRESS TEST RUN RESULTS]' + COMMENT_SUCCESS_MSG: ':white_check_mark: Cypress test run succeeded!' + COMMENT_FAILURE_MSG: ':x: Cypress test run failed!' jobs: cypress-tests: @@ -30,8 +57,31 @@ jobs: TERM: xterm name: Run cypress tests steps: + - name: Get source information from PR number + if: ${{ github.event_name == 'workflow_dispatch' && inputs.pr_number != '' }} + id: get_pr_info + uses: actions/github-script@v6 + with: + script: | + const { data: result } = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: ${{ inputs.pr_number }} + }); + core.setOutput('head_name', result.head.repo.full_name); + core.setOutput('head_ref', result.head.ref); + + - name: Set source repo from PR number + if: ${{ github.event_name == 'workflow_dispatch' && inputs.pr_number != '' }} + run: | + echo "SOURCE_REPO=${{ steps.get_pr_info.outputs.head_name }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH=${{ steps.get_pr_info.outputs.head_ref }}" >> $GITHUB_ENV + - name: Checkout code uses: actions/checkout@v2 + with: + repository: ${{ env.SOURCE_REPO }} + ref: '${{ env.SOURCE_BRANCH }}' - name: Setup Node uses: actions/setup-node@v2 @@ -54,8 +104,8 @@ jobs: uses: actions/checkout@v2 with: path: ${{ env.FTR_PATH }} - repository: opensearch-project/opensearch-dashboards-functional-test - ref: '${{ github.base_ref }}' + repository: ${{ env.TEST_REPO }} + ref: '${{ env.TEST_BRANCH }}' - name: Get Cypress version id: cypress_version @@ -79,7 +129,7 @@ jobs: working-directory: ${{ env.FTR_PATH }} start: ${{ env.OPENSEARCH_SNAPSHOT_CMD }}, ${{ env.START_CMD }} wait-on: 'http://localhost:9200, http://localhost:5601' - command: yarn cypress:run-without-security --browser ${{ env.CYPRESS_BROWSER }} --spec ${{ env.SPEC }} + command: yarn cypress:run-without-security --browser ${{ env.CYPRESS_BROWSER }} --spec ${{ env.SPEC }}${{ env.ADDITIONAL_SPEC }} # Screenshots are only captured on failure, will change this once we do visual regression tests - uses: actions/upload-artifact@v3 @@ -101,4 +151,39 @@ jobs: with: name: ftr-cypress-results path: ${{ env.FTR_PATH }}/cypress/results - retention-days: 1 \ No newline at end of file + retention-days: 1 + + add-comment: + needs: [cypress-tests] + if: ${{ always() && github.event_name == 'workflow_dispatch' && inputs.pr_number != '' }} + permissions: + pull-requests: write + runs-on: ubuntu-latest + steps: + - name: Find Comment + uses: peter-evans/find-comment@v2 + id: fc + with: + issue-number: ${{ inputs.pr_number }} + comment-author: 'github-actions[bot]' + body-includes: "${{ env.COMMENT_TAG }}" + + - name: Add comment on the PR + uses: peter-evans/create-or-update-comment@v3 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + issue-number: ${{ inputs.pr_number }} + body: | + ### ${{ env.COMMENT_TAG }} + + #### ${{ needs.cypress-tests.result == 'success' && env.COMMENT_SUCCESS_MSG || env.COMMENT_FAILURE_MSG }} + + #### Inputs: + Source repo: `${{ env.SOURCE_REPO }}` + Source branch: `${{ env.SOURCE_BRANCH }}` + Test repo: `${{ env.TEST_REPO }}` + Test branch: ``${{ env.TEST_BRANCH }}`` + + #### Link to results: + ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + edit-mode: replace diff --git a/CHANGELOG.md b/CHANGELOG.md index e1a20fd14d79..623c5b7206a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Re-enable CI workflows for feature branches ([#2908](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2908)) - Upgrade yarn version to be compatible with @opensearch-project/opensearch ([#3443](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3443)) - Add an achievement badger to the PR ([#3721](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3721)) +- [CI] Enable inputs for manually triggered Cypress test jobs ([#5134](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5134)) ### 📝 Documentation