diff --git a/.github/workflows/after-approval-workflow.yml b/.github/workflows/after-approval-workflow.yml new file mode 100644 index 00000000000..e8bf2fc3cb7 --- /dev/null +++ b/.github/workflows/after-approval-workflow.yml @@ -0,0 +1,50 @@ +name: After Approval Add Label Workflow + +on: + workflow_run: + workflows: + - AFTER_APPROVAL + types: + - completed + +jobs: + download: + runs-on: ubuntu-latest + steps: + - name: 'Download artifact' + uses: actions/github-script@v6 + with: + script: | + let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); + let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name == "pr_number" + })[0]; + let download = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + }); + let fs = require('fs'); + fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_number.zip`, Buffer.from(download.data)); + + - name: 'Unzip artifact' + run: unzip pr_number.zip + + - name: 'Comment on PR' + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.LEXICAL_BOT_TOKEN }} + script: | + let fs = require('fs'); + let issue_number = Number(fs.readFileSync('./pr_number')); + await github.rest.issues.addLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issue_number, + labels: ['extended-tests'], + }); diff --git a/.github/workflows/after-approval.yml b/.github/workflows/after-approval.yml index a3751ecc12a..aa276e21297 100644 --- a/.github/workflows/after-approval.yml +++ b/.github/workflows/after-approval.yml @@ -1,4 +1,4 @@ -name: After Approval +name: AFTER_APPROVAL on: pull_request_review: @@ -9,18 +9,54 @@ concurrency: cancel-in-progress: true jobs: - label-pr: - if: github.event.review.state == 'approved' && !contains(github.event.pull_request.labels.*.name, 'extended-tests') + upload-pr-number: + if: github.event.review.state == 'commented' && !contains(github.event.pull_request.labels.*.name, 'extended-tests') runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: write steps: - - name: Add label for extended tests + - name: Save PR number env: - GH_TOKEN: ${{ secrets.LEXICAL_BOT_TOKEN }} - GH_REPO: ${{ github.repository }} - NUMBER: ${{ github.event.pull_request.number }} + PR_NUMBER: ${{ github.event.pull_request.number }} run: | - echo "Adding label 'extended-tests' to PR $NUMBER" - gh pr edit "$NUMBER" --add-label "extended-tests" || (echo "Failed to add label" && exit 1) + mkdir -p ./pr + echo $PR_NUMBER > ./pr/pr_number + - uses: actions/upload-artifact@v4 + with: + name: pr_number + path: pr/ + - name: 'Download artifact' + uses: actions/github-script@v6 + with: + script: | + let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); + let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name == "pr_number" + })[0]; + let download = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + }); + let fs = require('fs'); + fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_number.zip`, Buffer.from(download.data)); + + - name: 'Unzip artifact' + run: unzip pr_number.zip + + - name: 'Comment on PR' + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.LEXICAL_BOT_TOKEN }} + script: | + let fs = require('fs'); + let issue_number = Number(fs.readFileSync('./pr_number')); + await github.rest.issues.addLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issue_number, + labels: ['extended-tests'], + }); diff --git a/.github/workflows/call-core-tests.yml b/.github/workflows/call-core-tests.yml index bb38f9e9a07..3b13700da30 100644 --- a/.github/workflows/call-core-tests.yml +++ b/.github/workflows/call-core-tests.yml @@ -1,51 +1,51 @@ -name: Lexical Core Tests +# name: Lexical Core Tests -on: - workflow_call: +# on: +# workflow_call: -jobs: - integrity: - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [20.11.0] - env: - CI: true - GITHUB_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }} - steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: npm - - name: Install dependencies - run: npm ci - - run: npm run ci-check - - run: npm run build - - run: npm run build-www +# jobs: +# integrity: +# runs-on: ubuntu-latest +# strategy: +# matrix: +# node-version: [20.11.0] +# env: +# CI: true +# GITHUB_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }} +# steps: +# - uses: actions/checkout@v4 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v4 +# with: +# node-version: ${{ matrix.node-version }} +# cache: npm +# - name: Install dependencies +# run: npm ci +# - run: npm run ci-check +# - run: npm run build +# - run: npm run build-www - unit: - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.18.0] - override-react-version: ['', 'beta'] - env: - CI: true - steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: npm - - name: Install dependencies - run: npm ci - - name: Install React ${{ matrix.override-react-version }} - if: matrix.override-react-version != '' - # This should be safe since we are caching ~/.npm and not node_modules - run: | - node ./scripts/override-react.js --version=${{ matrix.override-react-version }} - grep version node_modules/{react,react-dom}/package.json - - run: npm run test-unit +# unit: +# runs-on: ubuntu-latest +# strategy: +# matrix: +# node-version: [18.18.0] +# override-react-version: ['', 'beta'] +# env: +# CI: true +# steps: +# - uses: actions/checkout@v4 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v4 +# with: +# node-version: ${{ matrix.node-version }} +# cache: npm +# - name: Install dependencies +# run: npm ci +# - name: Install React ${{ matrix.override-react-version }} +# if: matrix.override-react-version != '' +# # This should be safe since we are caching ~/.npm and not node_modules +# run: | +# node ./scripts/override-react.js --version=${{ matrix.override-react-version }} +# grep version node_modules/{react,react-dom}/package.json +# - run: npm run test-unit diff --git a/.github/workflows/call-e2e-test.yml b/.github/workflows/call-e2e-test.yml index a7ab4e4d4c7..e2f55538706 100644 --- a/.github/workflows/call-e2e-test.yml +++ b/.github/workflows/call-e2e-test.yml @@ -1,68 +1,68 @@ -name: Lexical e2e test runner +# name: Lexical e2e test runner -on: - workflow_call: - inputs: - os: {required: true, type: string} - node-version: {required: true, type: string} - browser: {required: true, type: string} - editor-mode: {required: true, type: string} - events-mode: {required: true, type: string} - prod: {required: false, type: boolean} - override-react-version: {required: false, type: string} +# on: +# workflow_call: +# inputs: +# os: {required: true, type: string} +# node-version: {required: true, type: string} +# browser: {required: true, type: string} +# editor-mode: {required: true, type: string} +# events-mode: {required: true, type: string} +# prod: {required: false, type: boolean} +# override-react-version: {required: false, type: string} -jobs: - e2e-test: - runs-on: ${{ inputs.os }} - if: (inputs.browser != 'webkit' || inputs.os == 'macos-latest') && (inputs.editor-mode != 'rich-text-with-collab' || inputs.events-mode != 'legacy-events') - env: - CI: true - E2E_EDITOR_MODE: ${{ inputs.editor-mode }} - E2E_EVENTS_MODE: ${{ inputs.events-mode }} - OVERRIDE_REACT_VERSION: ${{ inputs.override-react-version }} - cache_playwright_path: ${{ inputs.os == 'macos-latest' && '~/Library/Caches/ms-playwright' || inputs.os == 'windows-latest' && 'C:\Users\runneradmin\AppData\Local\ms-playwright' || '~/.cache/ms-playwright' }} - test_results_path: ${{ inputs.os == 'windows-latest' && '~/.npm/_logs/' || 'test-results/' }} - test_script: test-e2e-${{ inputs.editor-mode == 'rich-text-with-collab' && 'collab-' || '' }}${{ inputs.prod && 'prod-' || '' }}ci-${{ inputs.browser }} - steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ inputs.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ inputs.node-version }} - cache: npm - - name: Install required ubuntu-latest packages - if: inputs.os == 'ubuntu-latest' - run: | - sudo apt-get update - sudo apt-get install xvfb - - name: Install dependencies - run: npm ci - - name: Install React ${{ inputs.override-react-version }} - if: inputs.override-react-version != '' - # This should be safe since we are caching ~/.npm and not node_modules - run: | - node ./scripts/override-react.js --version=${{ inputs.override-react-version }} - grep version node_modules/{react,react-dom}/package.json - - name: Restore playwright from cache - uses: actions/cache/restore@v4 - id: playwright-cache - with: - path: ${{ env.cache_playwright_path }} - key: playwright-${{ inputs.node-version }}-${{ runner.os }}-${{ runner.arch }}-v${{ secrets.CACHE_VERSION }}-${{ hashFiles('package-lock.json') }} - - name: Install playwright - run: npx playwright install - - name: Save playwright to cache - uses: actions/cache/save@v4 - if: steps.playwright-cache.outputs.cache-hit != 'true' - with: - path: ${{ env.cache_playwright_path }} - key: ${{ steps.playwright-cache.outputs.cache-primary-key }} - - name: Run tests - run: npm run ${{ env.test_script }} - - name: Upload Artifacts - if: failure() - uses: actions/upload-artifact@v4 - with: - name: Test Results ${{ inputs.os }}-${{ inputs.browser }}-${{ inputs.editor-mode }}-${{ inputs.events-mode }}-${{ inputs.prod && 'prod' || 'dev' }}-${{ inputs.node-version }}-${{ inputs.override-react-version }} - path: ${{ env.test_results_path }} - retention-days: 7 +# jobs: +# e2e-test: +# runs-on: ${{ inputs.os }} +# if: (inputs.browser != 'webkit' || inputs.os == 'macos-latest') && (inputs.editor-mode != 'rich-text-with-collab' || inputs.events-mode != 'legacy-events') +# env: +# CI: true +# E2E_EDITOR_MODE: ${{ inputs.editor-mode }} +# E2E_EVENTS_MODE: ${{ inputs.events-mode }} +# OVERRIDE_REACT_VERSION: ${{ inputs.override-react-version }} +# cache_playwright_path: ${{ inputs.os == 'macos-latest' && '~/Library/Caches/ms-playwright' || inputs.os == 'windows-latest' && 'C:\Users\runneradmin\AppData\Local\ms-playwright' || '~/.cache/ms-playwright' }} +# test_results_path: ${{ inputs.os == 'windows-latest' && '~/.npm/_logs/' || 'test-results/' }} +# test_script: test-e2e-${{ inputs.editor-mode == 'rich-text-with-collab' && 'collab-' || '' }}${{ inputs.prod && 'prod-' || '' }}ci-${{ inputs.browser }} +# steps: +# - uses: actions/checkout@v4 +# - name: Use Node.js ${{ inputs.node-version }} +# uses: actions/setup-node@v4 +# with: +# node-version: ${{ inputs.node-version }} +# cache: npm +# - name: Install required ubuntu-latest packages +# if: inputs.os == 'ubuntu-latest' +# run: | +# sudo apt-get update +# sudo apt-get install xvfb +# - name: Install dependencies +# run: npm ci +# - name: Install React ${{ inputs.override-react-version }} +# if: inputs.override-react-version != '' +# # This should be safe since we are caching ~/.npm and not node_modules +# run: | +# node ./scripts/override-react.js --version=${{ inputs.override-react-version }} +# grep version node_modules/{react,react-dom}/package.json +# - name: Restore playwright from cache +# uses: actions/cache/restore@v4 +# id: playwright-cache +# with: +# path: ${{ env.cache_playwright_path }} +# key: playwright-${{ inputs.node-version }}-${{ runner.os }}-${{ runner.arch }}-v${{ secrets.CACHE_VERSION }}-${{ hashFiles('package-lock.json') }} +# - name: Install playwright +# run: npx playwright install +# - name: Save playwright to cache +# uses: actions/cache/save@v4 +# if: steps.playwright-cache.outputs.cache-hit != 'true' +# with: +# path: ${{ env.cache_playwright_path }} +# key: ${{ steps.playwright-cache.outputs.cache-primary-key }} +# - name: Run tests +# run: npm run ${{ env.test_script }} +# - name: Upload Artifacts +# if: failure() +# uses: actions/upload-artifact@v4 +# with: +# name: Test Results ${{ inputs.os }}-${{ inputs.browser }}-${{ inputs.editor-mode }}-${{ inputs.events-mode }}-${{ inputs.prod && 'prod' || 'dev' }}-${{ inputs.node-version }}-${{ inputs.override-react-version }} +# path: ${{ env.test_results_path }} +# retention-days: 7 diff --git a/.github/workflows/tests-extended.yml b/.github/workflows/tests-extended.yml index fbb522084a8..6440aab4a83 100644 --- a/.github/workflows/tests-extended.yml +++ b/.github/workflows/tests-extended.yml @@ -1,21 +1,21 @@ -name: Lexical Tests (Extended) +# name: Lexical Tests (Extended) -on: - pull_request: - types: [labeled, synchronize, reopened] - paths-ignore: - - 'packages/lexical-website/**' - - 'packages/*/README.md' +# on: +# pull_request: +# types: [labeled, synchronize, reopened] +# paths-ignore: +# - 'packages/lexical-website/**' +# - 'packages/*/README.md' -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true +# concurrency: +# group: ${{ github.workflow }}-${{ github.ref }} +# cancel-in-progress: true -jobs: - e2e-tests: - if: github.repository_owner == 'facebook' && contains(github.event.pull_request.labels.*.name, 'extended-tests') - uses: ./.github/workflows/call-e2e-all-tests.yml +# jobs: +# e2e-tests: +# if: github.repository_owner == 'facebook' && contains(github.event.pull_request.labels.*.name, 'extended-tests') +# uses: ./.github/workflows/call-e2e-all-tests.yml - integration-tests: - if: github.repository_owner == 'facebook' && contains(github.event.pull_request.labels.*.name, 'extended-tests') - uses: ./.github/workflows/call-integration-tests.yml +# integration-tests: +# if: github.repository_owner == 'facebook' && contains(github.event.pull_request.labels.*.name, 'extended-tests') +# uses: ./.github/workflows/call-integration-tests.yml