name: (Runtime) Test on: push: branches: [main] pull_request: paths-ignore: - 'compiler/**' env: # Number of workers (one per shard) to spawn SHARD_COUNT: 5 jobs: # Define the various test parameters and parallelism for this workflow build_test_params: name: Build test params runs-on: ubuntu-latest outputs: params: ${{ steps.define-params.outputs.result }} shard_id: ${{ steps.define-shards.outputs.result }} steps: - uses: actions/github-script@v7 id: define-shards with: script: | function range(from, to) { const arr = []; for (let n = from; n <= to; n++) { arr.push(n); } return arr; } return range(1, process.env.SHARD_COUNT); - uses: actions/github-script@v7 id: define-params with: script: | return [ "-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" ]; # Spawn a job for each shard for a given set of test params test: name: yarn test ${{ matrix.params }} (Shard ${{ matrix.shard_id }}) runs-on: ubuntu-latest needs: build_test_params strategy: matrix: params: ${{ fromJSON(needs.build_test_params.outputs.params) }} shard_id: ${{ fromJSON(needs.build_test_params.outputs.shard_id) }} continue-on-error: true steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 18.x 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 - run: yarn test ${{ matrix.params }} --ci=github --shard=${{ matrix.shard_id }}/${{ env.SHARD_COUNT }}