From c4d6ea9369a2aa3ed635319b4aeae6985e0a844c Mon Sep 17 00:00:00 2001 From: Sergey Chernyshev Date: Mon, 21 Oct 2024 09:56:53 -0400 Subject: [PATCH] Let's play GitTerra --- .github/workflows/compiler_playground.yml | 52 -- .github/workflows/compiler_prereleases.yml | 55 -- .../workflows/compiler_prereleases_manual.yml | 31 - .../compiler_prereleases_nightly.yml | 21 - .../workflows/compiler_prereleases_weekly.yml | 21 - .github/workflows/compiler_rust.yml | 77 --- .github/workflows/compiler_typescript.yml | 96 --- .../workflows/devtools_regression_tests.yml | 174 ----- .github/workflows/gitterra.yml | 49 ++ .github/workflows/runtime_build_and_test.yml | 615 ------------------ .../workflows/runtime_commit_artifacts.yml | 421 ------------ .github/workflows/runtime_fuzz_tests.yml | 31 - .github/workflows/runtime_prereleases.yml | 50 -- .../workflows/runtime_prereleases_manual.yml | 47 -- .../workflows/runtime_prereleases_nightly.yml | 35 - .github/workflows/shared_lint.yml | 88 --- .github/workflows/shared_stale.yml | 50 -- .gitterra.config.mjs | 6 + 18 files changed, 55 insertions(+), 1864 deletions(-) delete mode 100644 .github/workflows/compiler_playground.yml delete mode 100644 .github/workflows/compiler_prereleases.yml delete mode 100644 .github/workflows/compiler_prereleases_manual.yml delete mode 100644 .github/workflows/compiler_prereleases_nightly.yml delete mode 100644 .github/workflows/compiler_prereleases_weekly.yml delete mode 100644 .github/workflows/compiler_rust.yml delete mode 100644 .github/workflows/compiler_typescript.yml delete mode 100644 .github/workflows/devtools_regression_tests.yml create mode 100644 .github/workflows/gitterra.yml delete mode 100644 .github/workflows/runtime_build_and_test.yml delete mode 100644 .github/workflows/runtime_commit_artifacts.yml delete mode 100644 .github/workflows/runtime_fuzz_tests.yml delete mode 100644 .github/workflows/runtime_prereleases.yml delete mode 100644 .github/workflows/runtime_prereleases_manual.yml delete mode 100644 .github/workflows/runtime_prereleases_nightly.yml delete mode 100644 .github/workflows/shared_lint.yml delete mode 100644 .github/workflows/shared_stale.yml create mode 100644 .gitterra.config.mjs diff --git a/.github/workflows/compiler_playground.yml b/.github/workflows/compiler_playground.yml deleted file mode 100644 index 0d4c4d2726cc1..0000000000000 --- a/.github/workflows/compiler_playground.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: (Compiler) Playground - -on: - push: - branches: [main] - pull_request: - paths: - - compiler/** - - .github/workflows/compiler-playground.yml - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} - cancel-in-progress: true - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 - -defaults: - run: - working-directory: compiler/apps/playground - -jobs: - playground: - name: Test playground - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: compiler/**/yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: compiler-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/**/yarn.lock') }} - - name: yarn install compiler - run: yarn install --frozen-lockfile - working-directory: compiler - - name: yarn install playground - run: yarn install --frozen-lockfile - - run: npx playwright install --with-deps chromium - - run: yarn test - - name: Archive test results - uses: actions/upload-artifact@v4 - with: - name: test-results - path: test-results diff --git a/.github/workflows/compiler_prereleases.yml b/.github/workflows/compiler_prereleases.yml deleted file mode 100644 index 4f4954dd952b4..0000000000000 --- a/.github/workflows/compiler_prereleases.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: (Compiler) Publish Prereleases - -on: - workflow_call: - inputs: - commit_sha: - required: true - default: '' - type: string - release_channel: - required: true - type: string - dist_tag: - required: true - type: string - version_name: - required: true - type: string - secrets: - NPM_TOKEN: - required: true - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 - GH_TOKEN: ${{ github.token }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - -defaults: - run: - working-directory: compiler - -jobs: - publish_prerelease: - name: Publish prelease (${{ inputs.release_channel }}) ${{ inputs.commit_sha }} @${{ inputs.dist_tag }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: compiler/yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: compiler-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/**/yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Publish packages to npm - run: | - cp ./scripts/release/ci-npmrc ~/.npmrc - scripts/release/publish.js --frfr --ci --versionName=${{ inputs.version_name }} --tag ${{ inputs.dist_tag }} diff --git a/.github/workflows/compiler_prereleases_manual.yml b/.github/workflows/compiler_prereleases_manual.yml deleted file mode 100644 index 3e42ae2cf200d..0000000000000 --- a/.github/workflows/compiler_prereleases_manual.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: (Compiler) Publish Prereleases Manual - -on: - workflow_dispatch: - inputs: - prerelease_commit_sha: - required: false - release_channel: - required: true - type: string - dist_tag: - required: true - type: string - version_name: - required: true - type: string - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - -jobs: - publish_prerelease_experimental: - name: Publish to Experimental channel - uses: facebook/react/.github/workflows/compiler_prereleases.yml@main - with: - commit_sha: ${{ inputs.prerelease_commit_sha || github.sha }} - release_channel: ${{ inputs.release_channel }} - dist_tag: ${{ inputs.dist_tag }} - version_name: ${{ inputs.version_name }} - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/compiler_prereleases_nightly.yml b/.github/workflows/compiler_prereleases_nightly.yml deleted file mode 100644 index 82f893aa5ef43..0000000000000 --- a/.github/workflows/compiler_prereleases_nightly.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: (Compiler) Publish Prereleases Nightly - -on: - schedule: - # At 10 minutes past 16:00 on Mon, Tue, Wed, Thu, and Fri - - cron: 10 16 * * 1,2,3,4,5 - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - -jobs: - publish_prerelease_experimental: - name: Publish to Experimental channel - uses: facebook/react/.github/workflows/compiler_prereleases.yml@main - with: - commit_sha: ${{ github.sha }} - release_channel: experimental - dist_tag: experimental - version_name: '0.0.0' - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/compiler_prereleases_weekly.yml b/.github/workflows/compiler_prereleases_weekly.yml deleted file mode 100644 index 79a9451b6972a..0000000000000 --- a/.github/workflows/compiler_prereleases_weekly.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: (Compiler) Publish Prereleases Weekly - -on: - schedule: - # At 10 minutes past 9:00 on Mon - - cron: 10 9 * * 1 - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - -jobs: - publish_prerelease_beta: - name: Publish to beta channel - uses: facebook/react/.github/workflows/compiler_prereleases.yml@main - with: - commit_sha: ${{ github.sha }} - release_channel: beta - dist_tag: beta - version_name: '19.0.0' - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/compiler_rust.yml b/.github/workflows/compiler_rust.yml deleted file mode 100644 index 50d42a37763e3..0000000000000 --- a/.github/workflows/compiler_rust.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: (Compiler) Rust - -on: - push: - branches: ["main"] - paths: - - .github/workflows/** - - compiler/crates/** - - compiler/Cargo.* - - compiler/*.toml - pull_request: - paths: - - .github/workflows/** - - compiler/crates/** - - compiler/Cargo.* - - compiler/*.toml - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} - cancel-in-progress: true - -env: - CARGO_TERM_COLOR: always - RUSTFLAGS: -Dwarnings - TZ: /usr/share/zoneinfo/America/Los_Angeles - -defaults: - run: - working-directory: compiler - -jobs: - test: - name: Rust Test (${{ matrix.target.os }}) - strategy: - matrix: - target: - - target: ubuntu-latest - os: ubuntu-latest - # TODO: run on more platforms - # - target: macos-latest - # os: macos-latest - # - target: windows-latest - # os: windows-latest - runs-on: ${{ matrix.target.os }} - steps: - - uses: actions/checkout@v4 - - uses: Swatinem/rust-cache@v2 - - name: cargo test - run: cargo test --manifest-path=Cargo.toml --locked ${{ matrix.target.features && '--features' }} ${{ matrix.target.features }} - - lint: - name: Rust Lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions-rs/toolchain@v1 - with: - # NOTE: use `rustup run ` in commands below - # with this exact same toolchain value - toolchain: nightly-2023-08-01 - override: true - components: rustfmt, clippy - - uses: Swatinem/rust-cache@v2 - - name: rustfmt - run: grep -r --include "*.rs" --files-without-match "@generated" crates | xargs rustup run nightly-2023-08-01 rustfmt --check --config="skip_children=true" - # - name: cargo clippy - # run: rustup run nightly-2023-08-01 cargo clippy -- -Dclippy::correctness - - build: - name: Rust Build - runs-on: ubuntu-latest - # TODO: build on more platforms, deploy, etc - steps: - - uses: actions/checkout@v4 - - uses: Swatinem/rust-cache@v2 - - name: cargo build - run: cargo build --release diff --git a/.github/workflows/compiler_typescript.yml b/.github/workflows/compiler_typescript.yml deleted file mode 100644 index 7ec6297038479..0000000000000 --- a/.github/workflows/compiler_typescript.yml +++ /dev/null @@ -1,96 +0,0 @@ -name: (Compiler) TypeScript - -on: - push: - branches: [main] - pull_request: - paths: - - compiler/** - - .github/workflows/compiler_typescript.yml - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} - cancel-in-progress: true - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 - -defaults: - run: - working-directory: compiler - -jobs: - discover_yarn_workspaces: - name: Discover yarn workspaces - runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} - steps: - - uses: actions/checkout@v4 - - id: set-matrix - run: echo "matrix=$(find packages -mindepth 1 -maxdepth 1 -type d | sed 's!packages/!!g' | tr '\n' ',' | sed s/.$// | jq -Rsc '. / "," - [""]')" >> $GITHUB_OUTPUT - - # Hardcoded to improve parallelism - lint: - name: Lint babel-plugin-react-compiler - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: compiler/yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - with: - path: "**/node_modules" - key: compiler-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/**/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn workspace babel-plugin-react-compiler lint - - # Hardcoded to improve parallelism - jest: - name: Jest babel-plugin-react-compiler - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: compiler/yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: compiler-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/**/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn workspace babel-plugin-react-compiler jest - - test: - name: Test ${{ matrix.workspace_name }} - needs: discover_yarn_workspaces - runs-on: ubuntu-latest - continue-on-error: true - strategy: - matrix: - workspace_name: ${{ fromJSON(needs.discover_yarn_workspaces.outputs.matrix) }} - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: compiler/yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: compiler-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/**/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn workspace ${{ matrix.workspace_name }} test diff --git a/.github/workflows/devtools_regression_tests.yml b/.github/workflows/devtools_regression_tests.yml deleted file mode 100644 index 213f58218cc2b..0000000000000 --- a/.github/workflows/devtools_regression_tests.yml +++ /dev/null @@ -1,174 +0,0 @@ -name: (DevTools) Regression Tests - -on: - schedule: - - cron: 0 0 * * * - workflow_dispatch: - inputs: - commit_sha: - required: false - type: string - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 - -jobs: - download_build: - name: Download base build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-release-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn install --frozen-lockfile - working-directory: scripts/release - - name: Download react-devtools artifacts for base revision - run: | - git fetch origin main - GH_TOKEN=${{ github.token }} scripts/release/download-experimental-build.js --commit=${{ inputs.commit_sha || '$(git rev-parse origin/main)' }} - - name: Display structure of build - run: ls -R build - - name: Archive build - uses: actions/upload-artifact@v4 - with: - name: build - path: build - - build_devtools_and_process_artifacts: - name: Build DevTools and process artifacts - needs: download_build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore archived build - uses: actions/download-artifact@v4 - with: - name: build - path: build - - run: ./scripts/ci/pack_and_store_devtools_artifacts.sh - env: - RELEASE_CHANNEL: experimental - - name: Display structure of build - run: ls -R build - - name: Archive devtools build - uses: actions/upload-artifact@v4 - with: - name: react-devtools - path: build/devtools.tgz - # Simplifies getting the extension for local testing - - name: Archive chrome extension - uses: actions/upload-artifact@v4 - with: - name: react-devtools-chrome-extension - path: build/devtools/chrome-extension.zip - - name: Archive firefox extension - uses: actions/upload-artifact@v4 - with: - name: react-devtools-firefox-extension - path: build/devtools/firefox-extension.zip - - run_devtools_tests_for_versions: - name: Run DevTools tests for versions - needs: build_devtools_and_process_artifacts - runs-on: ubuntu-latest - strategy: - matrix: - version: - - "16.0" - - "16.5" # schedule package - - "16.8" # hooks - - "17.0" - - "18.0" - - "18.2" # compiler polyfill - continue-on-error: true - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore all archived build artifacts - uses: actions/download-artifact@v4 - - name: Display structure of build - run: ls -R build - - run: ./scripts/ci/download_devtools_regression_build.js ${{ matrix.version }} --replaceBuild - - run: node ./scripts/jest/jest-cli.js --build --project devtools --release-channel=experimental --reactVersion ${{ matrix.version }} --ci - - run_devtools_e2e_tests_for_versions: - name: Run DevTools e2e tests for versions - needs: build_devtools_and_process_artifacts - runs-on: ubuntu-latest - strategy: - matrix: - version: - - "16.0" - - "16.5" # schedule package - - "16.8" # hooks - - "17.0" - - "18.0" - continue-on-error: true - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore all archived build artifacts - uses: actions/download-artifact@v4 - - name: Display structure of build - run: ls -R build - - name: Playwright install deps - run: | - npx playwright install - sudo npx playwright install-deps - - run: ./scripts/ci/download_devtools_regression_build.js ${{ matrix.version }} - - run: ls -R build-regression - - run: ./scripts/ci/run_devtools_e2e_tests.js ${{ matrix.version }} - env: - RELEASE_CHANNEL: experimental - - name: Cleanup build regression folder - run: rm -r ./build-regression - - uses: actions/upload-artifact@v4 - with: - name: screenshots - path: ./tmp/screenshots diff --git a/.github/workflows/gitterra.yml b/.github/workflows/gitterra.yml new file mode 100644 index 0000000000000..56af8308f4268 --- /dev/null +++ b/.github/workflows/gitterra.yml @@ -0,0 +1,49 @@ +name: Play GitTerra +run-name: Playing 🌎 GitTerra on ${{ github.repository }} 🗺️ + +on: + push: + branches: + - main + pull_request: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + play-gitterra: + runs-on: ubuntu-latest + steps: + - name: Play GitTerra 🎮 + uses: GitTerraGame/Play-GitTerra-Action@main + with: + deploy-destination: https://gitterragame.github.io/sample-repo-huge-and-old-react/ + deploy-gitterra-to-gh-pages: + if: github.ref == 'refs/heads/main' + needs: play-gitterra + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@v4 + with: + name: gitterra + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: "." + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/runtime_build_and_test.yml b/.github/workflows/runtime_build_and_test.yml deleted file mode 100644 index c59d990ba0ced..0000000000000 --- a/.github/workflows/runtime_build_and_test.yml +++ /dev/null @@ -1,615 +0,0 @@ -name: (Runtime) Build and Test - -on: - push: - branches: [main] - pull_request: - paths-ignore: - - compiler/** - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} - cancel-in-progress: true - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 - -jobs: - # ----- FLOW ----- - discover_flow_inline_configs: - name: Discover flow inline configs - runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.set-matrix.outputs.result }} - steps: - - uses: actions/checkout@v4 - - uses: actions/github-script@v7 - id: set-matrix - with: - script: | - const inlinedHostConfigs = require('./scripts/shared/inlinedHostConfigs.js'); - return inlinedHostConfigs.map(config => config.shortName); - - flow: - name: Flow check ${{ matrix.flow_inline_config_shortname }} - needs: discover_flow_inline_configs - runs-on: ubuntu-latest - continue-on-error: true - strategy: - matrix: - flow_inline_config_shortname: ${{ fromJSON(needs.discover_flow_inline_configs.outputs.matrix) }} - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: node ./scripts/tasks/flow-ci ${{ matrix.flow_inline_config_shortname }} - - # ----- FIZZ ----- - check_generated_fizz_runtime: - name: Confirm generated inline Fizz runtime is up to date - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: | - yarn generate-inline-fizz-runtime - git diff --quiet || (echo "There was a change to the Fizz runtime. Run `yarn generate-inline-fizz-runtime` and check in the result." && false) - - # ----- FEATURE FLAGS ----- - flags: - name: Check flags - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn flags - - # ----- TESTS ----- - test: - name: yarn test ${{ matrix.params }} (Shard ${{ matrix.shard }}) - runs-on: ubuntu-latest - strategy: - matrix: - params: - - "-r=stable --env=development" - - "-r=stable --env=production" - - "-r=experimental --env=development" - - "-r=experimental --env=production" - - "-r=www-classic --env=development --variant=false" - - "-r=www-classic --env=production --variant=false" - - "-r=www-classic --env=development --variant=true" - - "-r=www-classic --env=production --variant=true" - - "-r=www-modern --env=development --variant=false" - - "-r=www-modern --env=production --variant=false" - - "-r=www-modern --env=development --variant=true" - - "-r=www-modern --env=production --variant=true" - - "-r=xplat --env=development --variant=false" - - "-r=xplat --env=development --variant=true" - - "-r=xplat --env=production --variant=false" - - "-r=xplat --env=production --variant=true" - # TODO: Test more persistent configurations? - - "-r=stable --env=development --persistent" - - "-r=experimental --env=development --persistent" - shard: - - 1/5 - - 2/5 - - 3/5 - - 4/5 - - 5/5 - continue-on-error: true - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn test ${{ matrix.params }} --ci --shard=${{ matrix.shard }} - - # ----- BUILD ----- - build_and_lint: - name: yarn build and lint - runs-on: ubuntu-latest - strategy: - matrix: - # yml is dumb. update the --total arg to yarn build if you change the number of workers - worker_id: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19] - release_channel: [stable, experimental] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 11.0.22 - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn build --index=${{ matrix.worker_id }} --total=20 --r=${{ matrix.release_channel }} --ci - env: - CI: github - RELEASE_CHANNEL: ${{ matrix.release_channel }} - NODE_INDEX: ${{ matrix.worker_id }} - - name: Lint build - run: yarn lint-build - - name: Display structure of build - run: ls -R build - - name: Archive build - uses: actions/upload-artifact@v4 - with: - name: _build_${{ matrix.worker_id }}_${{ matrix.release_channel }} - path: build - - test_build: - name: yarn test-build - needs: build_and_lint - strategy: - matrix: - test_params: [ - # Intentionally passing these as strings instead of creating a - # separate parameter per CLI argument, since it's easier to - # control/see which combinations we want to run. - -r=stable --env=development, - -r=stable --env=production, - -r=experimental --env=development, - -r=experimental --env=production, - - # Dev Tools - --project=devtools -r=experimental, - - # TODO: Update test config to support www build tests - # - "-r=www-classic --env=development --variant=false" - # - "-r=www-classic --env=production --variant=false" - # - "-r=www-classic --env=development --variant=true" - # - "-r=www-classic --env=production --variant=true" - # - "-r=www-modern --env=development --variant=false" - # - "-r=www-modern --env=production --variant=false" - # - "-r=www-modern --env=development --variant=true" - # - "-r=www-modern --env=production --variant=true" - - # TODO: Update test config to support xplat build tests - # - "-r=xplat --env=development --variant=false" - # - "-r=xplat --env=development --variant=true" - # - "-r=xplat --env=production --variant=false" - # - "-r=xplat --env=production --variant=true" - - # TODO: Test more persistent configurations? - ] - shard: - - 1/3 - - 2/3 - - 3/3 - continue-on-error: true - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore archived build - uses: actions/download-artifact@v4 - with: - pattern: _build_* - path: build - merge-multiple: true - - name: Display structure of build - run: ls -R build - - run: yarn test --build ${{ matrix.test_params }} --shard=${{ matrix.shard }} --ci - - process_artifacts_combined: - name: Process artifacts combined - needs: build_and_lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore archived build - uses: actions/download-artifact@v4 - with: - pattern: _build_* - path: build - merge-multiple: true - - name: Display structure of build - run: ls -R build - - run: echo ${{ github.sha }} >> build/COMMIT_SHA - - name: Scrape warning messages - run: | - mkdir -p ./build/__test_utils__ - node ./scripts/print-warnings/print-warnings.js > build/__test_utils__/ReactAllWarnings.js - # Compress build directory into a single tarball for easy download - - run: tar -zcvf ./build.tgz ./build - # TODO: Migrate scripts to use `build` directory instead of `build2` - - run: cp ./build.tgz ./build2.tgz - - name: Archive build artifacts - uses: actions/upload-artifact@v4 - with: - name: artifacts_combined - path: | - ./build.tgz - ./build2.tgz - - check_error_codes: - name: Search build artifacts for unminified errors - needs: build_and_lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore archived build - uses: actions/download-artifact@v4 - with: - pattern: _build_* - path: build - merge-multiple: true - - name: Display structure of build - run: ls -R build - - name: Search build artifacts for unminified errors - run: | - yarn extract-errors - git diff --quiet || (echo "Found unminified errors. Either update the error codes map or disable error minification for the affected build, if appropriate." && false) - - check_release_dependencies: - name: Check release dependencies - needs: build_and_lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore archived build - uses: actions/download-artifact@v4 - with: - pattern: _build_* - path: build - merge-multiple: true - - name: Display structure of build - run: ls -R build - - run: yarn check-release-dependencies - - RELEASE_CHANNEL_stable_yarn_test_dom_fixtures: - name: Check fixtures DOM (stable) - needs: build_and_lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: fixtures_dom-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn install --frozen-lockfile --cache-folder ~/.cache/yarn - working-directory: fixtures/dom - - name: Restore archived build - uses: actions/download-artifact@v4 - with: - pattern: _build_* - path: build - merge-multiple: true - - name: Display structure of build - run: ls -R build - - name: Run DOM fixture tests - run: | - yarn predev - yarn test - working-directory: fixtures/dom - env: - RELEASE_CHANNEL: stable - - # ----- FLIGHT ----- - run_fixtures_flight_tests: - name: Run fixtures Flight tests - needs: build_and_lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - # Fixture copies some built packages from the workroot after install. - # That means dependencies of the built packages are not installed. - # We need to install dependencies of the workroot to fulfill all dependency constraints - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: fixtures_flight-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore archived build - uses: actions/download-artifact@v4 - with: - pattern: _build_* - path: build - merge-multiple: true - - name: Display structure of build - run: ls -R build - - name: Install fixture dependencies - working-directory: fixtures/flight - run: | - yarn install --frozen-lockfile --cache-folder ~/.cache/yarn - if [ $? -ne 0 ]; then - yarn install --frozen-lockfile --cache-folder ~/.cache/yarn - fi - - name: Playwright install deps - working-directory: fixtures/flight - run: | - npx playwright install - sudo npx playwright install-deps - - name: Run tests - working-directory: fixtures/flight - run: yarn test - env: - # Otherwise the webserver is a blackbox - DEBUG: pw:webserver - - name: Archive Flight fixture artifacts - uses: actions/upload-artifact@v4 - with: - name: flight-playwright-report - path: fixtures/flight/playwright-report - - name: Archive Flight fixture artifacts - uses: actions/upload-artifact@v4 - with: - name: flight-test-results - path: fixtures/flight/test-results - - # ----- DEVTOOLS ----- - build_devtools_and_process_artifacts: - name: Build DevTools and process artifacts - needs: build_and_lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore archived build - uses: actions/download-artifact@v4 - with: - pattern: _build_* - path: build - merge-multiple: true - - run: ./scripts/ci/pack_and_store_devtools_artifacts.sh - env: - RELEASE_CHANNEL: experimental - - name: Display structure of build - run: ls -R build - - name: Archive devtools build - uses: actions/upload-artifact@v4 - with: - name: react-devtools - path: build/devtools.tgz - # Simplifies getting the extension for local testing - - name: Archive chrome extension - uses: actions/upload-artifact@v4 - with: - name: react-devtools-chrome-extension - path: build/devtools/chrome-extension.zip - - name: Archive firefox extension - uses: actions/upload-artifact@v4 - with: - name: react-devtools-firefox-extension - path: build/devtools/firefox-extension.zip - - run_devtools_e2e_tests: - name: Run DevTools e2e tests - needs: build_devtools_and_process_artifacts - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore archived build - uses: actions/download-artifact@v4 - with: - pattern: _build_* - path: build - merge-multiple: true - - run: | - npx playwright install - sudo npx playwright install-deps - - run: ./scripts/ci/run_devtools_e2e_tests.js - env: - RELEASE_CHANNEL: experimental - - # ----- SIZEBOT ----- - download_base_build_for_sizebot: - if: ${{ github.event_name == 'pull_request' && github.ref_name != 'main' }} - name: Download base build for sizebot - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: ${{ runner.arch }}-${{ runner.os }}-modules-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn install --frozen-lockfile - working-directory: scripts/release - - name: Download artifacts for base revision - run: | - git fetch origin main - GH_TOKEN=${{ github.token }} scripts/release/download-experimental-build.js --commit=$(git rev-parse origin/main) - mv ./build ./base-build - # TODO: The `download-experimental-build` script copies the npm - # packages into the `node_modules` directory. This is a historical - # quirk of how the release script works. Let's pretend they - # don't exist. - - name: Delete extraneous files - run: rm -rf ./base-build/node_modules - - name: Display structure of base-build - run: ls -R base-build - - name: Archive base-build - uses: actions/upload-artifact@v4 - with: - name: base-build - path: base-build - - sizebot: - name: Run sizebot - needs: [build_and_lint, download_base_build_for_sizebot] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} - - run: yarn install --frozen-lockfile - - name: Restore archived build for PR - uses: actions/download-artifact@v4 - with: - pattern: _build_* - path: build - merge-multiple: true - - name: Scrape warning messages - run: | - mkdir -p ./build/__test_utils__ - node ./scripts/print-warnings/print-warnings.js > build/__test_utils__/ReactAllWarnings.js - - name: Display structure of build for PR - run: ls -R build - - name: Restore archived base-build from origin/main - uses: actions/download-artifact@v4 - with: - name: base-build - path: base-build - - name: Display structure of base-build from origin/main - run: ls -R base-build - - run: echo ${{ github.sha }} >> build/COMMIT_SHA - - run: node ./scripts/tasks/danger - - name: Archive sizebot results - uses: actions/upload-artifact@v4 - with: - name: sizebot-message - path: sizebot-message.md diff --git a/.github/workflows/runtime_commit_artifacts.yml b/.github/workflows/runtime_commit_artifacts.yml deleted file mode 100644 index 7842f07ba5888..0000000000000 --- a/.github/workflows/runtime_commit_artifacts.yml +++ /dev/null @@ -1,421 +0,0 @@ -name: (Runtime) Commit Artifacts for Meta WWW and fbsource V2 - -on: - workflow_run: - workflows: ["(Runtime) Build and Test"] - types: [completed] - branches: - - main - workflow_dispatch: - inputs: - commit_sha: - required: false - type: string - force: - description: 'Force a commit to the builds/... branches' - required: true - default: false - type: boolean - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 - -jobs: - download_artifacts: - runs-on: ubuntu-latest - outputs: - www_branch_count: ${{ steps.check_branches.outputs.www_branch_count }} - fbsource_branch_count: ${{ steps.check_branches.outputs.fbsource_branch_count }} - last_version_classic: ${{ steps.get_last_version_www.outputs.last_version_classic }} - last_version_modern: ${{ steps.get_last_version_www.outputs.last_version_modern }} - last_version_rn: ${{ steps.get_last_version_rn.outputs.last_version_rn }} - current_version_classic: ${{ steps.get_current_version.outputs.current_version_classic }} - current_version_modern: ${{ steps.get_current_version.outputs.current_version_modern }} - current_version_rn: ${{ steps.get_current_version.outputs.current_version_rn }} - steps: - - uses: actions/checkout@v4 - with: - ref: builds/facebook-www - - name: "Get last version string for www" - id: get_last_version_www - run: | - # Empty checks only needed for backwards compatibility,can remove later. - VERSION_CLASSIC=$( [ -f ./compiled/facebook-www/VERSION_CLASSIC ] && cat ./compiled/facebook-www/VERSION_CLASSIC || echo '' ) - VERSION_MODERN=$( [ -f ./compiled/facebook-www/VERSION_MODERN ] && cat ./compiled/facebook-www/VERSION_MODERN || echo '' ) - echo "Last classic version is $VERSION_CLASSIC" - echo "Last modern version is $VERSION_MODERN" - echo "last_version_classic=$VERSION_CLASSIC" >> "$GITHUB_OUTPUT" - echo "last_version_modern=$VERSION_MODERN" >> "$GITHUB_OUTPUT" - - uses: actions/checkout@v4 - with: - ref: builds/facebook-fbsource - - name: "Get last version string for rn" - id: get_last_version_rn - run: | - # Empty checks only needed for backwards compatibility,can remove later. - VERSION_NATIVE_FB=$( [ -f ./compiled-rn/VERSION_NATIVE_FB ] && cat ./compiled-rn/VERSION_NATIVE_FB || echo '' ) - echo "Last rn version is $VERSION_NATIVE_FB" - echo "last_version_rn=$VERSION_NATIVE_FB" >> "$GITHUB_OUTPUT" - - uses: actions/checkout@v4 - - name: "Check branches" - id: check_branches - run: | - echo "www_branch_count=$(git ls-remote --heads origin "refs/heads/meta-www" | wc -l)" >> "$GITHUB_OUTPUT" - echo "fbsource_branch_count=$(git ls-remote --heads origin "refs/heads/meta-fbsource" | wc -l)" >> "$GITHUB_OUTPUT" - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-release-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }} - - run: yarn install --frozen-lockfile - name: yarn install (react) - - run: yarn install --frozen-lockfile - name: yarn install (scripts/release) - working-directory: scripts/release - - name: Download artifacts for base revision - run: | - GH_TOKEN=${{ github.token }} scripts/release/download-experimental-build.js --commit=${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }} - - name: Display structure of build - run: ls -R build - - name: Strip @license from eslint plugin and react-refresh - run: | - sed -i -e 's/ @license React*//' \ - build/oss-experimental/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js \ - build/oss-experimental/react-refresh/cjs/react-refresh-babel.development.js - - name: Insert @headers into eslint plugin and react-refresh - run: | - sed -i -e 's/ LICENSE file in the root directory of this source tree./ LICENSE file in the root directory of this source tree.\n *\n * @noformat\n * @nolint\n * @lightSyntaxTransform\n * @preventMunge\n * @oncall react_core/' \ - build/oss-experimental/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js \ - build/oss-experimental/react-refresh/cjs/react-refresh-babel.development.js - - name: Move relevant files for React in www into compiled - run: | - # Move the facebook-www folder into compiled - mkdir ./compiled - mv build/facebook-www ./compiled - - # Move ReactAllWarnings.js to facebook-www - mkdir ./compiled/facebook-www/__test_utils__ - mv build/__test_utils__/ReactAllWarnings.js ./compiled/facebook-www/__test_utils__/ReactAllWarnings.js - - # Move eslint-plugin-react-hooks into facebook-www - mv build/oss-experimental/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js \ - ./compiled/facebook-www/eslint-plugin-react-hooks.js - - # Move unstable_server-external-runtime.js into facebook-www - mv build/oss-experimental/react-dom/unstable_server-external-runtime.js \ - ./compiled/facebook-www/unstable_server-external-runtime.js - - # Move react-refresh-babel.development.js into babel-plugin-react-refresh - mkdir ./compiled/babel-plugin-react-refresh - mv build/oss-experimental/react-refresh/cjs/react-refresh-babel.development.js \ - ./compiled/babel-plugin-react-refresh/index.js - - ls -R ./compiled - - name: Move relevant files for React in fbsource into compiled-rn - run: | - BASE_FOLDER='compiled-rn/facebook-fbsource/xplat/js' - mkdir -p ${BASE_FOLDER}/react-native-github/Libraries/Renderer/ - mkdir -p ${BASE_FOLDER}/RKJSModules/vendor/react/{scheduler,react,react-dom,react-is,react-test-renderer}/ - - # Move React Native renderer - mv build/react-native/implementations/ $BASE_FOLDER/react-native-github/Libraries/Renderer/ - mv build/react-native/shims/ $BASE_FOLDER/react-native-github/Libraries/Renderer/ - mv build/facebook-react-native/scheduler/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/scheduler/ - mv build/facebook-react-native/react/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/react/ - mv build/facebook-react-native/react-dom/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/react-dom/ - mv build/facebook-react-native/react-is/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/react-is/ - mv build/facebook-react-native/react-test-renderer/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/react-test-renderer/ - - # Delete OSS renderer. OSS renderer is synced through internal script. - RENDERER_FOLDER=$BASE_FOLDER/react-native-github/Libraries/Renderer/implementations/ - rm $RENDERER_FOLDER/ReactFabric-{dev,prod,profiling}.js - rm $RENDERER_FOLDER/ReactNativeRenderer-{dev,prod,profiling}.js - - # Move React Native version file - mv build/facebook-react-native/VERSION_NATIVE_FB ./compiled-rn/VERSION_NATIVE_FB - - ls -R ./compiled-rn - - name: Add REVISION files - run: | - echo ${{ github.sha }} >> ./compiled/facebook-www/REVISION - cp ./compiled/facebook-www/REVISION ./compiled/facebook-www/REVISION_TRANSFORMS - echo ${{ github.sha}} >> ./compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/REVISION - - name: "Get current version string" - id: get_current_version - run: | - VERSION_CLASSIC=$(cat ./compiled/facebook-www/VERSION_CLASSIC) - VERSION_MODERN=$(cat ./compiled/facebook-www/VERSION_MODERN) - VERSION_NATIVE_FB=$(cat ./compiled-rn/VERSION_NATIVE_FB) - echo "Current classic version is $VERSION_CLASSIC" - echo "Current modern version is $VERSION_MODERN" - echo "Current rn version is $VERSION_NATIVE_FB" - echo "current_version_classic=$VERSION_CLASSIC" >> "$GITHUB_OUTPUT" - echo "current_version_modern=$VERSION_MODERN" >> "$GITHUB_OUTPUT" - echo "current_version_rn=$VERSION_NATIVE_FB" >> "$GITHUB_OUTPUT" - - uses: actions/upload-artifact@v4 - with: - name: compiled - path: compiled/ - - uses: actions/upload-artifact@v4 - with: - name: compiled-rn - path: compiled-rn/ - - commit_www_artifacts: - needs: download_artifacts - if: inputs.force == true || (github.ref == 'refs/heads/main' && needs.download_artifacts.outputs.www_branch_count == '0') - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: builds/facebook-www - - name: Ensure clean directory - run: rm -rf compiled - - uses: actions/download-artifact@v4 - with: - name: compiled - path: compiled/ - - name: Revert version changes - if: needs.download_artifacts.outputs.last_version_classic != '' && needs.download_artifacts.outputs.last_version_modern != '' - env: - CURRENT_VERSION_CLASSIC: ${{ needs.download_artifacts.outputs.current_version_classic }} - CURRENT_VERSION_MODERN: ${{ needs.download_artifacts.outputs.current_version_modern }} - LAST_VERSION_CLASSIC: ${{ needs.download_artifacts.outputs.last_version_classic }} - LAST_VERSION_MODERN: ${{ needs.download_artifacts.outputs.last_version_modern }} - run: | - echo "Reverting $CURRENT_VERSION_CLASSIC to $LAST_VERSION_CLASSIC" - grep -rl "$CURRENT_VERSION_CLASSIC" ./compiled || echo "No files found with $CURRENT_VERSION_CLASSIC" - grep -rl "$CURRENT_VERSION_CLASSIC" ./compiled | xargs -r sed -i -e "s/$CURRENT_VERSION_CLASSIC/$LAST_VERSION_CLASSIC/g" - grep -rl "$CURRENT_VERSION_CLASSIC" ./compiled || echo "Classic version reverted" - echo "====================" - echo "Reverting $CURRENT_VERSION_MODERN to $LAST_VERSION_MODERN" - grep -rl "$CURRENT_VERSION_MODERN" ./compiled || echo "No files found with $CURRENT_VERSION_MODERN" - grep -rl "$CURRENT_VERSION_MODERN" ./compiled | xargs -r sed -i -e "s/$CURRENT_VERSION_MODERN/$LAST_VERSION_MODERN/g" - grep -rl "$CURRENT_VERSION_MODERN" ./compiled || echo "Modern version reverted" - - name: Check for changes - if: inputs.force != true - id: check_should_commit - run: | - echo "Full git status" - git add . - git status - echo "====================" - if git status --porcelain | grep -qv '/REVISION'; then - echo "Changes detected" - echo "===== Changes =====" - git --no-pager diff -U0 | grep '^[+-]' | head -n 50 - echo "===================" - echo "should_commit=true" >> "$GITHUB_OUTPUT" - else - echo "No Changes detected" - echo "should_commit=false" >> "$GITHUB_OUTPUT" - fi - - name: Re-apply version changes - if: inputs.force == true || (steps.check_should_commit.outputs.should_commit == 'true' && needs.download_artifacts.outputs.last_version_classic != '' && needs.download_artifacts.outputs.last_version_modern != '') - env: - CURRENT_VERSION_CLASSIC: ${{ needs.download_artifacts.outputs.current_version_classic }} - CURRENT_VERSION_MODERN: ${{ needs.download_artifacts.outputs.current_version_modern }} - LAST_VERSION_CLASSIC: ${{ needs.download_artifacts.outputs.last_version_classic }} - LAST_VERSION_MODERN: ${{ needs.download_artifacts.outputs.last_version_modern }} - run: | - echo "Re-applying $LAST_VERSION_CLASSIC to $CURRENT_VERSION_CLASSIC" - grep -rl "$LAST_VERSION_CLASSIC" ./compiled || echo "No files found with $LAST_VERSION_CLASSIC" - grep -rl "$LAST_VERSION_CLASSIC" ./compiled | xargs -r sed -i -e "s/$LAST_VERSION_CLASSIC/$CURRENT_VERSION_CLASSIC/g" - grep -rl "$LAST_VERSION_CLASSIC" ./compiled || echo "Classic version re-applied" - echo "====================" - echo "Re-applying $LAST_VERSION_MODERN to $CURRENT_VERSION_MODERN" - grep -rl "$LAST_VERSION_MODERN" ./compiled || echo "No files found with $LAST_VERSION_MODERN" - grep -rl "$LAST_VERSION_MODERN" ./compiled | xargs -r sed -i -e "s/$LAST_VERSION_MODERN/$CURRENT_VERSION_MODERN/g" - grep -rl "$LAST_VERSION_MODERN" ./compiled || echo "Classic version re-applied" - - name: Will commit these changes - if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true' - run: | - echo ":" - git status -u - - name: Commit changes to branch - if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true' - uses: stefanzweifel/git-auto-commit-action@v5 - with: - commit_message: | - ${{ github.event.workflow_run.head_commit.message || format('Manual build of {0}', github.event.workflow_run.head_sha || github.sha) }} - - DiffTrain build for [${{ github.event.workflow_run.head_sha || github.sha }}](https://github.com/facebook/react/commit/${{ github.event.workflow_run.head_sha || github.sha }}) - branch: builds/facebook-www - commit_user_name: ${{ github.triggering_actor }} - commit_user_email: ${{ format('{0}@users.noreply.github.com', github.triggering_actor) }} - create_branch: true - - commit_fbsource_artifacts: - needs: download_artifacts - if: inputs.force == true || (github.ref == 'refs/heads/main' && needs.download_artifacts.outputs.fbsource_branch_count == '0') - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: builds/facebook-fbsource - - name: Ensure clean directory - run: rm -rf compiled-rn - - uses: actions/download-artifact@v4 - with: - name: compiled-rn - path: compiled-rn/ - - name: Revert version changes - if: needs.download_artifacts.outputs.last_version_rn != '' - env: - CURRENT_VERSION: ${{ needs.download_artifacts.outputs.current_version_rn }} - LAST_VERSION: ${{ needs.download_artifacts.outputs.last_version_rn }} - run: | - echo "Reverting $CURRENT_VERSION to $LAST_VERSION" - grep -rl "$CURRENT_VERSION" ./compiled-rn || echo "No files found with $CURRENT_VERSION" - grep -rl "$CURRENT_VERSION" ./compiled-rn | xargs -r sed -i -e "s/$CURRENT_VERSION/$LAST_VERSION/g" - grep -rl "$CURRENT_VERSION" ./compiled-rn || echo "Version reverted" - - name: Check for changes - if: inputs.force != 'true' - id: check_should_commit - run: | - echo "Full git status" - git add . - git --no-pager diff -U0 --cached | grep '^[+-]' | head -n 100 - echo "====================" - # Ignore REVISION or lines removing @generated headers. - if git diff --cached ':(exclude)*REVISION' | grep -vE "^(@@|diff|index|\-\-\-|\+\+\+|\- \* @generated SignedSource)" | grep "^[+-]" > /dev/null; then - echo "Changes detected" - echo "===== Changes =====" - git --no-pager diff --cached ':(exclude)*REVISION' | grep -vE "^(@@|diff|index|\-\-\-|\+\+\+|\- \* @generated SignedSource)" | grep "^[+-]" | head -n 50 - echo "===================" - echo "should_commit=true" >> "$GITHUB_OUTPUT" - else - echo "No Changes detected" - echo "should_commit=false" >> "$GITHUB_OUTPUT" - fi - - name: Re-apply version changes - if: inputs.force == true || (steps.check_should_commit.outputs.should_commit == 'true' && needs.download_artifacts.outputs.last_version_rn != '') - env: - CURRENT_VERSION: ${{ needs.download_artifacts.outputs.current_version_rn }} - LAST_VERSION: ${{ needs.download_artifacts.outputs.last_version_rn }} - run: | - echo "Re-applying $LAST_VERSION to $CURRENT_VERSION" - grep -rl "$LAST_VERSION" ./compiled-rn || echo "No files found with $LAST_VERSION" - grep -rl "$LAST_VERSION" ./compiled-rn | xargs -r sed -i -e "s/$LAST_VERSION/$CURRENT_VERSION/g" - grep -rl "$LAST_VERSION" ./compiled-rn || echo "Version re-applied" - - name: Add files for signing - if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true' - run: | - echo ":" - git add . - - name: Signing files - if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true' - uses: actions/github-script@v7 - with: - script: | - // TODO: Move this to a script file. - // We currently can't call scripts from the repo because - // at this point in the workflow, we're on the compiled - // artifact branch (so the scripts don't exist). - // We can fix this with a composite action in the main repo. - // This script is duplicated above. - const fs = require('fs'); - const crypto = require('crypto'); - const {execSync} = require('child_process'); - - // TODO: when we move this to a script, we can use this from npm. - // Copy of signedsource since we can't install deps on this branch. - const GENERATED = '@' + 'generated'; - const NEWTOKEN = '<>'; - const PATTERN = new RegExp(`${GENERATED} (?:SignedSource<<([a-f0-9]{32})>>)`); - - const TokenNotFoundError = new Error( - `SignedSource.signFile(...): Cannot sign file without token: ${NEWTOKEN}` - ); - - function hash(data, encoding) { - const md5sum = crypto.createHash('md5'); - md5sum.update(data, encoding); - return md5sum.digest('hex'); - } - - const SignedSource = { - getSigningToken() { - return `${GENERATED} ${NEWTOKEN}`; - }, - isSigned(data) { - return PATTERN.exec(data) != null; - }, - signFile(data) { - if (!data.includes(NEWTOKEN)) { - if (SignedSource.isSigned(data)) { - // Signing a file that was previously signed. - data = data.replace(PATTERN, SignedSource.getSigningToken()); - } else { - throw TokenNotFoundError; - } - } - return data.replace(NEWTOKEN, `SignedSource<<${hash(data, 'utf8')}>>`); - }, - }; - - const directory = './compiled-rn'; - console.log('Signing files in directory:', directory); - try { - const result = execSync(`git status --porcelain ${directory}`, {encoding: 'utf8'}); - console.log(result); - - // Parse the git status output to get file paths! - const files = result.split('\n').filter(file => file.endsWith('.js')); - - if (files.length === 0) { - throw new Error( - 'git status returned no files to sign. this job should not have run.' - ); - } else { - files.forEach(line => { - let file = null; - if (line.startsWith('D ')) { - return; - } else if (line.startsWith('R ')) { - file = line.slice(line.indexOf('->') + 3); - } else { - file = line.slice(3).trim(); - } - if (file) { - console.log(' Signing file:', file); - const originalContents = fs.readFileSync(file, 'utf8'); - const signedContents = SignedSource.signFile( - originalContents - // Need to add the header in, since it's not inserted at build time. - .replace(' */\n', ` * ${SignedSource.getSigningToken()}\n */\n`) - ); - - fs.writeFileSync(file, signedContents, 'utf8'); - } - }); - } - } catch (e) { - process.exitCode = 1; - console.error('Error signing files:', e); - } - - name: Will commit these changes - if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true' - run: | - git add . - git status - - name: Commit changes to branch - if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true' - uses: stefanzweifel/git-auto-commit-action@v5 - with: - commit_message: | - ${{ github.event.workflow_run.head_commit.message || format('Manual build of {0}', github.event.workflow_run.head_sha || github.sha) }} - - DiffTrain build for [${{ github.event.workflow_run.head_sha || github.sha }}](https://github.com/facebook/react/commit/${{ github.event.workflow_run.head_sha || github.sha }}) - branch: builds/facebook-fbsource - commit_user_name: ${{ github.triggering_actor }} - commit_user_email: ${{ format('{0}@users.noreply.github.com', github.triggering_actor) }} - create_branch: true diff --git a/.github/workflows/runtime_fuzz_tests.yml b/.github/workflows/runtime_fuzz_tests.yml deleted file mode 100644 index 66ddba318fa0a..0000000000000 --- a/.github/workflows/runtime_fuzz_tests.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: (Runtime) Fuzz tests - -on: - schedule: - - cron: 0 * * * * - push: - branches: - - main - workflow_dispatch: - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - -jobs: - test_fuzz: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4.1.0 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'yarn' - - name: Install dependencies - run: yarn install --frozen-lockfile - env: - ELECTRON_SKIP_BINARY_DOWNLOAD: "1" - shell: bash - - name: Run fuzz tests - run: |- - FUZZ_TEST_SEED=$RANDOM yarn test fuzz --ci - FUZZ_TEST_SEED=$RANDOM yarn test --prod fuzz --ci diff --git a/.github/workflows/runtime_prereleases.yml b/.github/workflows/runtime_prereleases.yml deleted file mode 100644 index 37516ea3cb19c..0000000000000 --- a/.github/workflows/runtime_prereleases.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: (Runtime) Publish Prereleases - -on: - workflow_call: - inputs: - commit_sha: - required: true - default: '' - type: string - release_channel: - required: true - type: string - dist_tag: - required: true - type: string - secrets: - NPM_TOKEN: - required: true - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 - GH_TOKEN: ${{ github.token }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - -jobs: - publish_prerelease: - name: Publish prelease (${{ inputs.release_channel }}) ${{ inputs.commit_sha }} @${{ inputs.dist_tag }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - id: node_modules - with: - path: "**/node_modules" - key: runtime-release-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn install --frozen-lockfile - working-directory: scripts/release - - run: | - scripts/release/prepare-release-from-ci.js --skipTests -r ${{ inputs.release_channel }} --commit=${{ inputs.commit_sha }} - cp ./scripts/release/ci-npmrc ~/.npmrc - scripts/release/publish.js --ci --tags ${{ inputs.dist_tag }} diff --git a/.github/workflows/runtime_prereleases_manual.yml b/.github/workflows/runtime_prereleases_manual.yml deleted file mode 100644 index 4d031e7b4d69d..0000000000000 --- a/.github/workflows/runtime_prereleases_manual.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: (Runtime) Publish Prereleases Manual - -on: - workflow_dispatch: - inputs: - prerelease_commit_sha: - required: true - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - -jobs: - - publish_prerelease_canary: - name: Publish to Canary channel - uses: facebook/react/.github/workflows/runtime_prereleases.yml@main - with: - commit_sha: ${{ inputs.prerelease_commit_sha }} - release_channel: stable - # The tags to use when publishing canaries. The main one we should - # always include is "canary" but we can use multiple (e.g. alpha, - # beta, rc). To declare multiple, use a comma-separated string, like - # this: - # dist_tag: "canary,alpha,beta,rc" - # - # TODO: We currently tag canaries with "next" in addition to "canary" - # because this used to be called the "next" channel and some - # downstream consumers might still expect that tag. We can remove this - # after some time has elapsed and the change has been communicated. - dist_tag: canary,next,rc - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - publish_prerelease_experimental: - name: Publish to Experimental channel - uses: facebook/react/.github/workflows/runtime_prereleases.yml@main - # NOTE: Intentionally running these jobs sequentially because npm - # will sometimes fail if you try to concurrently publish two - # different versions of the same package, even if they use different - # dist tags. - needs: publish_prerelease_canary - with: - commit_sha: ${{ inputs.prerelease_commit_sha }} - release_channel: experimental - dist_tag: experimental - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/runtime_prereleases_nightly.yml b/.github/workflows/runtime_prereleases_nightly.yml deleted file mode 100644 index a4c2c2d0225b5..0000000000000 --- a/.github/workflows/runtime_prereleases_nightly.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: (Runtime) Publish Prereleases Nightly - -on: - schedule: - # At 10 minutes past 16:00 on Mon, Tue, Wed, Thu, and Fri - - cron: 10 16 * * 1,2,3,4,5 - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - -jobs: - publish_prerelease_canary: - name: Publish to Canary channel - uses: facebook/react/.github/workflows/runtime_prereleases.yml@main - with: - commit_sha: ${{ github.sha }} - release_channel: stable - dist_tag: canary,next,rc - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - publish_prerelease_experimental: - name: Publish to Experimental channel - uses: facebook/react/.github/workflows/runtime_prereleases.yml@main - # NOTE: Intentionally running these jobs sequentially because npm - # will sometimes fail if you try to concurrently publish two - # different versions of the same package, even if they use different - # dist tags. - needs: publish_prerelease_canary - with: - commit_sha: ${{ github.sha }} - release_channel: experimental - dist_tag: experimental - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/shared_lint.yml b/.github/workflows/shared_lint.yml deleted file mode 100644 index 00155e8e55976..0000000000000 --- a/.github/workflows/shared_lint.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: (Shared) Lint - -on: - push: - branches: [main] - pull_request: - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} - cancel-in-progress: true - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 - -jobs: - prettier: - name: Run prettier - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - with: - path: "**/node_modules" - key: shared-lint-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: yarn prettier-check - - eslint: - name: Run eslint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - with: - path: "**/node_modules" - key: shared-lint-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: node ./scripts/tasks/eslint - - check_license: - name: Check license - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - with: - path: "**/node_modules" - key: shared-lint-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: ./scripts/ci/check_license.sh - - test_print_warnings: - name: Test print warnings - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: yarn - cache-dependency-path: yarn.lock - - name: Restore cached node_modules - uses: actions/cache@v4 - with: - path: "**/node_modules" - key: shared-lint-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} - - run: yarn install --frozen-lockfile - - run: ./scripts/ci/test_print_warnings.sh diff --git a/.github/workflows/shared_stale.yml b/.github/workflows/shared_stale.yml deleted file mode 100644 index 8d505e856e940..0000000000000 --- a/.github/workflows/shared_stale.yml +++ /dev/null @@ -1,50 +0,0 @@ -# Configuration for stale action workflow - https://github.com/actions/stale -name: (Shared) Manage stale issues and PRs -on: - schedule: - # Run hourly - - cron: '0 * * * *' - workflow_dispatch: - -env: - TZ: /usr/share/zoneinfo/America/Los_Angeles - -jobs: - stale: - runs-on: ubuntu-latest - steps: - - uses: actions/stale@v9 - with: - # --- Issues & PRs --- - # Number of days of inactivity before an issue or PR becomes stale - days-before-stale: 90 - # Number of days of inactivity before a stale issue or PR is closed - days-before-close: 7 - # API calls per run - operations-per-run: 100 - - # --- Issues --- - stale-issue-label: "Resolution: Stale" - # Comment to post when marking an issue as stale - stale-issue-message: > - This issue has been automatically marked as stale. - **If this issue is still affecting you, please leave any comment** (for example, "bump"), and we'll keep it open. - We are sorry that we haven't been able to prioritize it yet. If you have any new additional information, please include it with your comment! - # Comment to post when closing a stale issue - close-issue-message: > - Closing this issue after a prolonged period of inactivity. If this issue is still present in the latest release, please create a new issue with up-to-date information. Thank you! - # Issues with these labels will never be considered stale - exempt-issue-labels: "Partner,React Core Team,Resolution: Backlog,Type: Bug,Type: Discussion,Type: Needs Investigation,Type: Regression,Type: Feature Request,Type: Enhancement" - - # --- PRs --- - stale-pr-label: "Resolution: Stale" - # Comment to post when marking a pull request as stale - stale-pr-message: > - This pull request has been automatically marked as stale. - **If this pull request is still relevant, please leave any comment** (for example, "bump"), and we'll keep it open. - We are sorry that we haven't been able to prioritize reviewing it yet. Your contribution is very much appreciated. - # Comment to post when closing a stale pull request - close-pr-message: > - Closing this pull request after a prolonged period of inactivity. If this issue is still present in the latest release, please ask for this pull request to be reopened. Thank you! - # PRs with these labels will never be considered stale - exempt-pr-labels: "Partner,React Core Team,Resolution: Backlog,Type: Bug,Type: Discussion,Type: Needs Investigation,Type: Regression,Type: Feature Request,Type: Enhancement" diff --git a/.gitterra.config.mjs b/.gitterra.config.mjs new file mode 100644 index 0000000000000..75a20d4fa98d6 --- /dev/null +++ b/.gitterra.config.mjs @@ -0,0 +1,6 @@ +export default (config) => { + config.timelapseLookBackPerfRun = 1000; + config.createTimelapse = true; + + return config; +};