Repository: vercel/next.js
Pull request: Reapply "ci: add node-stream test coverage workflow (#89861)"

Re-apply #89861.

Somehow the tests passed in the PR but failed after merging. Will dig into it.

Edit: Dug into it, there was a missing env var. Fixed and ready to merge now.

PR doesn't add the Node.js streams code path. Implementation starts in #90500

Changed files:
filename: .github/workflows/build_and_test.yml
patch: @@ -812,7 +812,6 @@ jobs:
 
     uses: ./.github/workflows/build_reusable.yml
     with:
-      # Keep Next.js related env variables in sync with additionalEnv in next-deploy.ts
       afterBuild: |
         export __NEXT_CACHE_COMPONENTS=true
         export __NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS=true
@@ -1168,6 +1167,62 @@ jobs:
       stepName: 'test-cache-components-prod-${{ matrix.group }}'
     secrets: inherit
 
+  test-node-streams-dev:
+    name: test node streams dev
+    needs: ['optimize-ci', 'changes', 'build-native', 'build-next']
+    if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }}
+
+    strategy:
+      fail-fast: false
+      matrix:
+        group: [1/6, 2/6, 3/6, 4/6, 5/6, 6/6]
+    uses: ./.github/workflows/build_reusable.yml
+    with:
+      afterBuild: |
+        export __NEXT_USE_NODE_STREAMS=true
+        export __NEXT_CACHE_COMPONENTS=true
+        export __NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS=true
+        export __NEXT_EXPERIMENTAL_APP_NEW_SCROLL_HANDLER=true
+        export NEXT_EXTERNAL_TESTS_FILTERS="test/cache-components-tests-manifest.json,test/use-node-streams-tests-manifest.json"
+        export NEXT_TEST_MODE=dev
+        export IS_TURBOPACK_TEST=1
+        export TURBOPACK_DEV=1
+
+        node run-tests.js \
+          --timings \
+          -g ${{ matrix.group }} \
+          --type development
+      stepName: 'test-node-streams-dev-${{ matrix.group }}'
+    secrets: inherit
+
+  test-node-streams-prod:
+    name: test node streams prod
+    needs: ['optimize-ci', 'changes', 'build-native', 'build-next']
+    if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }}
+
+    strategy:
+      fail-fast: false
+      matrix:
+        group: [1/7, 2/7, 3/7, 4/7, 5/7, 6/7, 7/7]
+    uses: ./.github/workflows/build_reusable.yml
+    with:
+      afterBuild: |
+        export __NEXT_USE_NODE_STREAMS=true
+        export __NEXT_CACHE_COMPONENTS=true
+        export __NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS=true
+        export __NEXT_EXPERIMENTAL_APP_NEW_SCROLL_HANDLER=true
+        export NEXT_EXTERNAL_TESTS_FILTERS="test/cache-components-tests-manifest.json,test/use-node-streams-tests-manifest.json"
+        export NEXT_TEST_MODE=start
+        export IS_TURBOPACK_TEST=1
+        export TURBOPACK_BUILD=1
+
+        node run-tests.js \
+          --timings \
+          -g ${{ matrix.group }} \
+          --type production
+      stepName: 'test-node-streams-prod-${{ matrix.group }}'
+    secrets: inherit
+
   tests-pass:
     needs:
       [
@@ -1186,6 +1241,8 @@ jobs:
         'test-cache-components-dev',
         'test-cache-components-prod',
         'test-cache-components-integration',
+        'test-node-streams-dev',
+        'test-node-streams-prod',
         'test-cargo-unit',
         'rust-check',
         'rustdoc-check',

filename: test/cache-components-tests-manifest.json
patch: @@ -157,6 +157,7 @@
       "test/e2e/app-dir/dynamic-data/dynamic-data.test.ts",
       "test/e2e/app-dir/dynamic-href/dynamic-href.test.ts",
       "test/e2e/app-dir/dynamic-in-generate-params/index.test.ts",
+      "test/e2e/app-dir/dynamic-import-tree-shaking/dynamic-import-tree-shaking.test.ts",
       "test/e2e/app-dir/dynamic-interception-route-revalidate/dynamic-interception-route-revalidate.test.ts",
       "test/e2e/app-dir/cache-components-*/**/*",
       "test/e2e/app-dir/cache-components/**/*",
@@ -342,8 +343,11 @@
       "test/integration/app-types/app-types.test.ts",
       "test/production/app-dir-edge-runtime-with-wasm/index.test.ts",
       "test/production/app-dir-prevent-304-caching/index.test.ts",
+      "test/production/app-dir/actions-tree-shaking/basic/basic-edge.test.ts",
+      "test/production/app-dir/actions-tree-shaking/mixed-module-actions/mixed-module-actions-edge.test.ts",
       "test/production/app-dir/actions-tree-shaking/reexport/reexport-edge.test.ts",
       "test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts",
+      "test/production/app-dir/actions-tree-shaking/shared-module-actions/shared-module-actions-edge.test.ts",
       "test/production/app-dir/actions-tree-shaking/use-effect-actions/use-effect-actions-edge.test.ts",
       "test/production/app-dir/app-fetch-build-cache/app-fetch-build-cache.test.ts",
       "test/production/app-dir/build-output-tree-view/build-output-tree-view.test.ts",

filename: test/use-node-streams-tests-manifest.json
patch: @@ -0,0 +1,14 @@
+{
+  "version": 2,
+  "suites": {},
+  "rules": {
+    "include": [
+      "test/e2e/**/*.test.{t,j}s{,x}",
+      "test/integration/app-*/**/*.test.{t,j}s{,x}",
+      "test/production/app-*/**/*.test.{t,j}s{,x}",
+      "test/development/app-*/**/*.test.{t,j}s{,x}",
+      "test/development/acceptance-app/**/*.test.{t,j}s{,x}"
+    ],
+    "exclude": []
+  }
+}