name: (Runtime) Build on: push: branches: [main] pull_request: paths-ignore: - compiler/** env: TZ: /usr/share/zoneinfo/America/Los_Angeles jobs: 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: 18.20.1 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: ${{ runner.arch }}-${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} - run: yarn install --frozen-lockfile - run: yarn build --index=${{ matrix.worker_id }} --total=20 --r=${{ matrix.release_channel }} --ci=github 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? ] continue-on-error: true runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 18.20.1 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') }} - run: yarn install --frozen-lockfile - name: Restore archived build uses: actions/download-artifact@v4 with: path: build merge-multiple: true - name: Display structure of build run: ls -R build - run: yarn test --build ${{ matrix.test_params }} --ci=github 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: 18.20.1 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') }} - run: yarn install --frozen-lockfile - name: Restore archived build uses: actions/download-artifact@v4 with: 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: combined_artifacts_${{ github.sha }} path: | ./build.tgz ./build2.tgz