Repository: vercel/next.js
Pull request: [ci]: remove PPR-specific CI jobs

`experimental.ppr` is superseded by `experimental.cacheComponents` and will not exist in the form that is currently being tested in CI.

This frees up these CI resources until we delete the standalone PPR flag. `cacheComponents` is tested via the experimental runners.

Changed files:
filename: .github/workflows/build_and_test.yml
patch: @@ -919,75 +919,6 @@ jobs:
       stepName: 'test-firefox-safari'
     secrets: inherit
 
-  # TODO: remove these jobs once PPR is the default
-  # Manifest generated via: https://gist.github.com/wyattjoh/2ceaebd82a5bcff4819600fd60126431
-  test-ppr-integration:
-    name: test ppr integration
-    needs: ['optimize-ci', 'changes', 'build-native', 'build-next']
-    if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }}
-
-    uses: ./.github/workflows/build_reusable.yml
-    with:
-      nodeVersion: 20.9.0
-      afterBuild: |
-        export __NEXT_EXPERIMENTAL_PPR=true
-        export NEXT_EXTERNAL_TESTS_FILTERS="test/ppr-tests-manifest.json"
-        export IS_WEBPACK_TEST=1
-
-        node run-tests.js \
-          --timings \
-          --type integration
-      stepName: 'test-ppr-integration'
-    secrets: inherit
-
-  test-ppr-dev:
-    name: test ppr 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_EXPERIMENTAL_PPR=true
-        export NEXT_EXTERNAL_TESTS_FILTERS="test/ppr-tests-manifest.json"
-        export NEXT_TEST_MODE=dev
-        export IS_WEBPACK_TEST=1
-
-        node run-tests.js \
-          --timings \
-          -g ${{ matrix.group }} \
-          --type development
-      stepName: 'test-ppr-dev-${{ matrix.group }}'
-    secrets: inherit
-
-  test-ppr-prod:
-    name: test ppr 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_EXPERIMENTAL_PPR=true
-        export NEXT_EXTERNAL_TESTS_FILTERS="test/ppr-tests-manifest.json"
-        export NEXT_TEST_MODE=start
-        export IS_WEBPACK_TEST=1
-
-        node run-tests.js \
-          --timings \
-          -g ${{ matrix.group }} \
-          --type production
-      stepName: 'test-ppr-prod-${{ matrix.group }}'
-    secrets: inherit
-
   # TODO: Disable these when no more experiments are tested
   # Manifest generated via: https://gist.github.com/wyattjoh/2ceaebd82a5bcff4819600fd60126431
   test-experimental-integration:
@@ -1076,9 +1007,6 @@ jobs:
         'test-prod',
         'test-integration',
         'test-firefox-safari',
-        'test-ppr-dev',
-        'test-ppr-prod',
-        'test-ppr-integration',
         'test-experimental-dev',
         'test-experimental-prod',
         'test-experimental-integration',

filename: test/ppr-tests-manifest.json
patch: @@ -1,182 +0,0 @@
-{
-  "version": 2,
-  "suites": {
-    "test/production/app-dir/fetch-cache/fetch-cache.test.ts": {
-      "passed": [],
-      "failed": [
-        "fetch-cache should have correct fetchUrl field for fetches and unstable_cache",
-        "fetch-cache should not retry for failed fetch-cache GET",
-        "fetch-cache should retry 3 times when revalidate times out",
-        "fetch-cache should update cache TTL even if cache data does not change"
-      ],
-      "pending": [],
-      "flakey": [],
-      "runtimeError": false
-    },
-    "test/e2e/app-dir/app-static/app-static.test.ts": {
-      "failed": [
-        "app-dir static/dynamic handling usePathname should have values from canonical url on rewrite",
-        "app-dir static/dynamic handling should have correct prerender-manifest entries",
-        "app-dir static/dynamic handling should output HTML/RSC files for static paths",
-        "app-dir static/dynamic handling should output debug info for static bailouts"
-      ]
-    },
-    "test/e2e/app-dir/headers-static-bailout/headers-static-bailout.test.ts": {
-      "failed": [
-        "headers-static-bailout it provides a helpful link in case static generation bailout is uncaught"
-      ]
-    },
-    "test/e2e/app-dir/error-boundary-navigation/override-node-env.test.ts": {
-      "failed": [
-        "app dir - not found navigation - with overridden node env should be able to navigate to other page from root not-found page"
-      ]
-    },
-    "test/e2e/on-request-error/isr/isr.test.ts": {
-      "failed": [
-        "on-request-error - isr app router ISR should capture correct reason for stale errored page",
-        "on-request-error - isr app router ISR should capture correct reason for on-demand revalidated page",
-        "on-request-error - isr app router ISR should capture revalidate from server action"
-      ]
-    },
-    "test/e2e/opentelemetry/opentelemetry.test.ts": {
-      "failed": [
-        "opentelemetry root context app router should handle RSC with fetch",
-        "opentelemetry incoming context propagation app router should handle RSC with fetch",
-        "opentelemetry incoming context propagation app router should handle route handlers in app router"
-      ]
-    },
-    "test/e2e/app-dir/rsc-basic/rsc-basic.test.ts": {
-      "failed": [
-        "app dir - rsc basics should render initial styles of css-in-js in edge SSR correctly",
-        "app dir - rsc basics should render initial styles of css-in-js in nodejs SSR correctly",
-        "app dir - rsc basics should render server components correctly"
-      ]
-    },
-    "test/e2e/app-dir/navigation/navigation.test.ts": {
-      "failed": [
-        "app dir - navigation redirect status code should respond with 308 status code if permanent flag is set",
-        "app dir - navigation redirect status code should respond with 307 status code in client component",
-        "app dir - navigation redirect status code should respond with 307 status code in server component",
-        "app dir - navigation bots should block rendering for bots and return 404 status"
-      ]
-    },
-    "test/e2e/app-dir/app-static/app-static-custom-handler.test.ts": {
-      "failed": [
-        "app-dir static/dynamic handling should output debug info for static bailouts",
-        "app-dir static/dynamic handling should have correct prerender-manifest entries",
-        "app-dir static/dynamic handling should output HTML/RSC files for static paths"
-      ]
-    },
-    "test/production/app-dir/unexpected-error/unexpected-error.test.ts": {
-      "failed": [
-        "unexpected-error should set response status to 500 for unexpected errors in ssr app route",
-        "unexpected-error should set response status to 500 for unexpected errors in isr app route"
-      ]
-    },
-    "test/e2e/next-form/default/app-dir.test.ts": {
-      "failed": [
-        "next-form - app dir should soft-navigate on submit and show the prefetched loading state"
-      ]
-    },
-    "test/e2e/app-dir/parallel-routes-revalidation/parallel-routes-revalidation.test.ts": {
-      "failed": [
-        "parallel-routes-revalidation router.refresh (dynamic) - searchParams: false should correctly refresh data for previously intercepted modal and active page slot",
-        "parallel-routes-revalidation router.refresh (dynamic) - searchParams: false should correctly refresh data for the intercepted route and previously active page slot",
-        "parallel-routes-revalidation router.refresh (dynamic) - searchParams: true should correctly refresh data for previously intercepted modal and active page slot",
-        "parallel-routes-revalidation router.refresh (dynamic) - searchParams: true should correctly refresh data for the intercepted route and previously active page slot",
-        "parallel-routes-revalidation router.refresh (regular) - searchParams: false should correctly refresh data for previously intercepted modal and active page slot",
-        "parallel-routes-revalidation router.refresh (regular) - searchParams: false should correctly refresh data for the intercepted route and previously active page slot",
-        "parallel-routes-revalidation router.refresh (regular) - searchParams: true should correctly refresh data for previously intercepted modal and active page slot",
-        "parallel-routes-revalidation router.refresh (regular) - searchParams: true should correctly refresh data for the intercepted route and previously active page slot",
-        "parallel-routes-revalidation server action revalidation should not trigger a refresh for the page that is being redirected to"
-      ]
-    },
-    "test/e2e/app-dir/router-autoscroll/router-autoscroll.test.ts": {
-      "failed": [
-        "router autoscrolling on navigation bugs Should apply scroll when loading.js is used"
-      ]
-    },
-    "test/e2e/app-dir/actions/app-action-node-middleware.test.ts": {
-      "failed": [
-        "app-dir action handling fetch actions should invalidate client cache when path is revalidated",
-        "app-dir action handling fetch actions should store revalidation data in the prefetch cache",
-        "app-dir action handling should only submit action once when resubmitting an action after navigation",
-        "app-dir action handling should reset the form state when the action redirects to itself"
-      ]
-    },
-    "test/e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts": {
-      "failed": [
-        "searchparams-reuse-loading should re-use loading from \"full\" prefetch for param-full URL when navigating to param-full route",
-        "searchparams-reuse-loading should re-use loading from \"full\" prefetch for param-full URL when navigating to param-less route",
-        "searchparams-reuse-loading should re-use loading from \"full\" prefetch for param-less URL when navigating to param-full route"
-      ]
-    },
-    "test/production/app-dir/browser-chunks/browser-chunks.test.ts": {
-      "failed": [
-        "browser-chunks must not bundle any server modules into browser chunks"
-      ]
-    },
-    "test/e2e/next-form/default/next-form-prefetch.test.ts": {
-      "failed": [
-        "app dir - form prefetching should not prefetch when prefetch is set to false`",
-        "app dir - form prefetching should prefetch a loading state for the form's target"
-      ]
-    },
-    "test/e2e/app-dir/actions/app-action.test.ts": {
-      "failed": [
-        "app-dir action handling fetch actions should store revalidation data in the prefetch cache",
-        "app-dir action handling should only submit action once when resubmitting an action after navigation",
-        "app-dir action handling should reset the form state when the action redirects to itself"
-      ]
-    },
-    "test/e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts": {
-      "failed": [
-        "parallel-routes-and-interception route intercepting should support intercepting local dynamic sibling routes",
-        "parallel-routes-and-interception parallel routes should handle a loading state"
-      ]
-    }
-  },
-  "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": [
-      "test/development/app-dir/cache-components-*/**/*",
-      "test/e2e/app-dir/app-client-cache/client-cache.defaults.test.ts",
-      "test/e2e/app-dir/app-client-cache/client-cache.experimental.test.ts",
-      "test/e2e/app-dir/app-client-cache/client-cache.original.test.ts",
-      "test/e2e/app-dir/app-prefetch*/**/*",
-      "test/e2e/app-dir/cache-components-*/**/*",
-      "test/e2e/app-dir/cache-components/**/*",
-      "test/e2e/app-dir/fallback-shells/**/*",
-      "test/e2e/app-dir/front-redirect-issue/front-redirect-issue.test.ts",
-      "test/e2e/app-dir/next-font/**/*",
-      "test/e2e/app-dir/ppr-*/**/*",
-      "test/e2e/app-dir/ppr/**/*",
-      "test/e2e/app-dir/react-max-headers-length/react-max-headers-length.test.ts",
-      "test/e2e/app-dir/searchparams-static-bailout/searchparams-static-bailout.test.ts",
-      "test/e2e/app-dir/segment-cache/basic/segment-cache-basic.test.ts",
-      "test/e2e/app-dir/segment-cache/export/segment-cache-output-export.test.ts",
-      "test/e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts",
-      "test/e2e/app-dir/segment-cache/memory-pressure/segment-cache-memory-pressure.test.ts",
-      "test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts",
-      "test/e2e/app-dir/segment-cache/revalidation/segment-cache-revalidation.test.ts",
-      "test/e2e/app-dir/segment-cache/staleness/segment-cache-stale-time.test.ts",
-      "test/e2e/app-dir/static-shell-debugging/static-shell-debugging.test.ts",
-      "test/e2e/app-dir/use-cache-close-over-function/**/*",
-      "test/e2e/app-dir/use-cache-custom-handler/**/*",
-      "test/e2e/app-dir/use-cache-hanging-inputs/**/*",
-      "test/e2e/app-dir/use-cache-metadata-route-handler/**/*",
-      "test/e2e/app-dir/use-cache-route-handler-only/**/*",
-      "test/e2e/app-dir/use-cache-with-server-function-props/use-cache-with-server-function-props.test.ts",
-      "test/integration/app-dir-export/**/*",
-      "test/production/app-dir/build-output-tree-view/build-output-tree-view.test.ts",
-      "test/production/app-dir/global-default-cache-handler/global-default-cache-handler.test.ts",
-      "test/production/app-dir/resume-data-cache/resume-data-cache.test.ts"
-    ]
-  }
-}