212 Commits
Author SHA1 Message Date
Tobias KoppersandZack Tanner cd344c8f46 improve turborepo caching (#64493)
### What?

There is a race condition in the `pull-build-cache` script. When the
remote cache entry was removed between the dry run and the real run, it
will run the command and caches whatever is in the native folder.

Seems like there are some very old leftover files there which lead to an
broken publish.

This changes the command to fail when there are no files and empties the
folder before running the script. This should lead to pull-build-cache
to failing instead.

Closes PACK-2957
Fixes #64468
2024-04-17 11:55:52 -07:00
Zack Tanner 9d7ce74503 modify scripts 2024-04-12 12:44:49 -07:00
Zack Tanner 597aa44805 update publish configs 2024-04-12 11:57:35 -07:00
Balázs OrbánandGitHub b93ead0c9c chore: add test mapping script (#63757)
### What?

This adds a script that first gets a list of changed files compared to
our base branch (`canary`) in PRs and identifies related test files by
looking them up from a `related-tests-manifest.json`, then runs them.

### Why?

We would like to be able to run related E2E tests when certain files
change, so we can test deployment stability.

NOTE: We still want to run all E2E tests on PRs, but this script can be
used to also test deployments for hot paths. Since these tests can take
up to [3-4
hours](https://github.com/vercel/next.js/actions/workflows/test_e2e_deploy.yml),
we aim to run a subset of these tests first.


Closes NEXT-2947
2024-04-11 09:44:47 +02:00
Will Binns-SmithandGitHub 3d3311b150 Update rust-toolchain to nightly-2024-04-03 (#64048)
Depends on https://github.com/vercel/turbo/pull/7874, which should be
merged first.

Test Plan: `cargo check`


Closes PACK-2903
2024-04-04 23:28:02 +00:00
JJ KasperandGitHub 53d017d3f1 Parallelize dev/start flake detection (#63954)
Since we're re-running tests a few times and in both modes this can take
a while ([related
run](https://github.com/vercel/next.js/actions/runs/8514892757/job/23321431099?pr=56995)),
so this parallelizes by separating dev/prod into separate jobs.

Closes NEXT-2975
2024-04-02 11:40:27 -07:00
JJ KasperandGitHub 2359d3d275 Add job to test flakiness of added/changed tests (#63943)
To help detect when newly added/changed assertions are flakey this adds
a job to our build and test workflow to re-run them 3 times. If the
changed test is an E2E test it will re-run in both development and
production mode to ensure it's not flakey specifically in one of those
modes.

Test run with changed test can be seen here
https://github.com/vercel/next.js/actions/runs/8511797725/job/23312158523?pr=63943

Closes NEXT-2973
2024-04-01 20:15:43 +00:00
Tim NeutkensandGitHub 5a1409179c Ensure automated-update-workflow fails on errors (#63807)
## What?

Ensure that test runs like this one fail:
https://github.com/vercel/next.js/actions/runs/8463659474/job/23186935591

<!-- Thanks for opening a PR! Your contribution is much appreciated.
To make sure your PR is handled as smoothly as possible we request that
you follow the checklist sections below.
Choose the right checklist for the change(s) that you're making:

## For Contributors

### Improving Documentation

- Run `pnpm prettier-fix` to fix formatting issues before opening the
PR.
- Read the Docs Contribution Guide to ensure your contribution follows
the docs guidelines:
https://nextjs.org/docs/community/contribution-guide

### Adding or Updating Examples

- The "examples guidelines" are followed from our contributing doc
https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md
- Make sure the linting passes by running `pnpm build && pnpm lint`. See
https://github.com/vercel/next.js/blob/canary/contributing/repository/linting.md

### Fixing a bug

- Related issues linked using `fixes #number`
- Tests added. See:
https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs
- Errors have a helpful link attached, see
https://github.com/vercel/next.js/blob/canary/contributing.md

### Adding a feature

- Implements an existing feature request or RFC. Make sure the feature
request has been accepted for implementation before opening a PR. (A
discussion must be opened, see
https://github.com/vercel/next.js/discussions/new?category=ideas)
- Related issues/discussions are linked using `fixes #number`
- e2e tests added
(https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs)
- Documentation added
- Telemetry added. In case of a feature if it's used or not.
- Errors have a helpful link attached, see
https://github.com/vercel/next.js/blob/canary/contributing.md


## For Maintainers

- Minimal description (aim for explaining to someone not on the team to
understand the PR)
- When linking to a Slack thread, you might want to share details of the
conclusion
- Link both the Linear (Fixes NEXT-xxx) and the GitHub issues
- Add review comments if necessary to explain to the reviewer the logic
behind a change

### What?

### Why?

### How?

Closes NEXT-
Fixes #

-->


Closes NEXT-2953
2024-03-28 12:29:45 +01:00
JJ KasperandGitHub bc6598f95a Add tarball deployments for each build (#62969)
This adds automatic tarball deployments for each build so that we don't
have to trigger a canary release whenever we want to create a full
tarball with all `next-swc` builds.

Example tarball
https://github.com/vercel/next.js/actions/runs/8239762627/job/22534810077#step:9:34

Closes NEXT-2735
2024-03-13 11:39:44 -07:00
Zack TannerandGitHub e5ac6aeea8 fix broken create-next-app tests (#63019)
#62980 migrated `examples/basic-css` to use app router. A handful of our
create-next-app tests use this example when asserting the correct
project files are created, so we were asserting on a pages file existing
rather than an app dir page. This PR updates those tests.

<!-- Thanks for opening a PR! Your contribution is much appreciated.
To make sure your PR is handled as smoothly as possible we request that
you follow the checklist sections below.
Choose the right checklist for the change(s) that you're making:

## For Contributors

### Improving Documentation

- Run `pnpm prettier-fix` to fix formatting issues before opening the
PR.
- Read the Docs Contribution Guide to ensure your contribution follows
the docs guidelines:
https://nextjs.org/docs/community/contribution-guide

### Adding or Updating Examples

- The "examples guidelines" are followed from our contributing doc
https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md
- Make sure the linting passes by running `pnpm build && pnpm lint`. See
https://github.com/vercel/next.js/blob/canary/contributing/repository/linting.md

### Fixing a bug

- Related issues linked using `fixes #number`
- Tests added. See:
https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs
- Errors have a helpful link attached, see
https://github.com/vercel/next.js/blob/canary/contributing.md

### Adding a feature

- Implements an existing feature request or RFC. Make sure the feature
request has been accepted for implementation before opening a PR. (A
discussion must be opened, see
https://github.com/vercel/next.js/discussions/new?category=ideas)
- Related issues/discussions are linked using `fixes #number`
- e2e tests added
(https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs)
- Documentation added
- Telemetry added. In case of a feature if it's used or not.
- Errors have a helpful link attached, see
https://github.com/vercel/next.js/blob/canary/contributing.md


## For Maintainers

- Minimal description (aim for explaining to someone not on the team to
understand the PR)
- When linking to a Slack thread, you might want to share details of the
conclusion
- Link both the Linear (Fixes NEXT-xxx) and the GitHub issues
- Add review comments if necessary to explain to the reviewer the logic
behind a change

### What?

### Why?

### How?

Closes NEXT-
Fixes #

-->


Closes NEXT-2754
2024-03-07 22:21:12 +00:00
JJ KasperandGitHub 80fa841c7c Add CI check to validate externals doc (#62968)
This avoids the need to manually check when these get out of sync by
having an automated check to keep them in sync when one or the other is
updated.

x-ref: https://github.com/vercel/next.js/pull/62966

Closes NEXT-2734
2024-03-06 17:00:25 -08:00
JJ KasperandGitHub 9f38cfee3d Update to only use preminor when configured (#62904)
Ensures we don't use preminor every time only when we manually specify
to

x-ref:
https://github.com/vercel/next.js/actions/runs/8161338410/job/22309868382

Closes NEXT-2716
2024-03-05 12:34:51 -08:00
JJ KasperandGitHub 9547635bf7 Update canary semver handling (#62852)
As discussed this updates our canary semver bumping to use `preminor`
instead of `prerelease` to avoid overlap with patches/backports and make
it more clear for users which versions go along together.

x-ref: [slack
thread](https://vercel.slack.com/archives/C04DUD7EB1B/p1709583075769789)

Closes NEXT-2701
2024-03-04 16:48:55 -08:00
e5a4e82f30 Update start release handling (#62851)
This removes the hacky handling for executing lerna with using the
official commands directly, this also removes the legacy package.json
scripts we had for publishing.

Closes NEXT-2700

---------

Co-authored-by: Zack Tanner <[email protected]>
2024-03-04 16:28:22 -08:00
JJ KasperandGitHub 04b13f52a5 Update error handling in publish scripts (#62754)
Seems we aren't ignoring the already published error correctly.

x-ref:
https://github.com/vercel/next.js/actions/runs/8118349923/job/22192598805

Closes NEXT-2668
2024-03-02 00:40:51 +00:00
JJ KasperandGitHub d0fc16defe Revert "chore: drop npm-run-all" (#62700)
Reverts vercel/next.js#62642

Closes NEXT-2650
2024-02-29 13:59:24 -08:00
Balázs OrbánandGitHub 340125a74d chore: drop npm-run-all (#62642)
Closes #62627, Closes #62610

Closes NEXT-2638
2024-02-28 09:42:19 -05:00
OJ KwonandGitHub 00633f1774 docs(turbopack): move docs to separate (#62069)
### What

For better organization, extracting docs into separate location.

Closes PACK-2494
2024-02-15 08:05:48 -08:00
OJ KwonandGitHub 8b4005e792 docs(turbopack): reduce documentation size (#62016)
### What

next_core unexpectedly reexports everything, makes documentation size
too large.

Closes PACK-2480
2024-02-13 14:36:11 -08:00
OJ KwonandGitHub 1dc3c01030 docs(turbopack): build more docs (#61977)
### What

This PR changes setup for the turbopack documentation.

Long story in short, we want to 2 types of documentation: one for high
level description (archtecture, etcs) and another for the api doc.
rustdoc / cargo doc unfortunately doesn't support to integrate both
easily.

PR adds mdbook setup to workaround those - instead of using rustdoc's
index as entrypoint, mdbook becomes an entrypoint to rustdoc. This
allows to host plain text document, and also able to access full rustdoc
pages.


preview: https://turbopack-rust-docs-b6qta4xdq.vercel.sh/
rustdoc:
https://turbopack-rust-docs-b6qta4xdq.vercel.sh/rustdoc/index.html


Closes PACK-2475
Closes PACK-2468
2024-02-13 12:17:25 -08:00
OJ KwonandGitHub b04c70335d ci(workflow): deploy rustdocs for turbopack (#61958)
### What

We'd like to deploy generated rustdocs from turbopack & related packages
(next-swc), setting up a CI workflow to automate those.

Since we need next.js side packages to build docs, this CI sets up
things in this repo.

Closes PACK-2375.
2024-02-12 15:14:36 -08:00
Jimmy LaiandGitHub feb27ad621 Revert "feat(next/image)!: remove squoosh in favor of sharp as optional dep" (#61810)
Reverts vercel/next.js#61696

Closes NEXT-2401
2024-02-08 11:00:34 +00:00
StevenandGitHub 07c4ec052e feat(next/image)!: remove squoosh in favor of sharp as optional dep (#61696)
## History

Previously, we added support for `squoosh` because it was a wasm
implementation that "just worked" on all platforms when running `next
dev` for the first time. However, it was slow so we always recommended
manually installing `sharp` for production use cases running `next
build` and `next start`.

Now that [`sharp` supports
webassembly](https://sharp.pixelplumbing.com/install#webassembly), we no
longer need to maintain `squoosh`, so it can be removed. We also don't
need to make the user install sharp manually because it can be installed
under `optionalDependencies`. I left it optional in case there was some
platform that still needed to manually install the wasm variant with
`npm install --cpu=wasm32 sharp` such as codesandbox/stackblitz (I don't
believe sharp has any fallback built in yet).

Since we can guarantee `sharp`, we can also remove `get-orientation` dep
and upgrade `image-size` dep.

I also moved an [existing `sharp`
test](https://github.com/vercel/next.js/pull/56674) into its own fixture
since it was unrelated to image optimization.

## Related Issues
- Fixes https://github.com/vercel/next.js/issues/41417
- Closes https://github.com/vercel/next.js/pull/54670
- Related https://github.com/vercel/next.js/issues/54708
- Related https://github.com/vercel/next.js/issues/44804
- Related https://github.com/vercel/next.js/issues/48820
2024-02-06 14:17:07 -05:00
JJ KasperandGitHub 2a824e97db Ensure publish job has correct status on fail (#61645)
This ensures we show the job as failed correctly when any of the
packages didn't publish successfully.

x-ref:
https://github.com/vercel/next.js/actions/runs/7777481701/job/21205867173

Closes NEXT-2355
2024-02-05 00:06:16 +00:00
StevenandGitHub 1662362d12 chore: fix postinstall when using tarball (#60443)
The postinstall script was failing In the case when you download [a
zip](https://codeload.github.com/vercel/next.js/zip/refs/heads/canary)
of the repo.

This PR fixes it so that `git config` can fail silently in that case
when the repo is not using git.

- Related to https://github.com/nodejs/citgm/pull/1044

Closes NEXT-2036
2024-01-09 17:37:49 -05:00
OJ KwonandGitHub bb25edfdd4 ci(workflow): restore publish wasm binary (#59414) 2023-12-08 11:44:24 -08:00
LeahandGitHub 7ce4a02bdc ci: don't try to upload to datadog for docs only changes (#59068) 2023-11-29 19:25:01 +01:00
Zack TannerandGitHub 0cb1c40400 ci: disable deployment protection for e2e test project (#58830)
Since we reset the test project on every e2e CI run, deployment protection is automatically enabled by default.

This adds an option to the reset project workflow to disable deployment protection. Our test runners need to be able to hit these pages from an unauthenticated browser in order for the tests to work. 

Verified tests are running properly in [this run](https://github.com/vercel/next.js/actions/runs/6971348806/job/18971225559) (fixing any failing tests themselves are out of scope for this PR; will evaluate once the run finishes)

Closes NEXT-1732
2023-11-23 09:41:34 -08:00
Zack TannerandGitHub cbcd59889c ci: unify reset project script (#58829)
We have identical `resetProject` code used in `bench/vercel` and our e2e workflow action -- this updates the `resetProject` script to side-effects free (hence removing the env var) and shared between bench & e2e

Closes NEXT-1731
2023-11-23 09:40:48 -08:00
024a0ef24d Update rust-toolchain to 2023-11-16 (#58558)
This updates the rust toolchain to 2023-11-16 and:

- Removes now-unnecessary `#![feature(async_fn_in_trait)]`
- Applies auto-fixable lint fixes
- Uses `Cargo.toml` new `lint` section instead of command line rustc flags

Test Plan: Tested with updated turbo in a create-next-app


Closes PACK-1979

Co-authored-by: OJ Kwon <[email protected]>
2023-11-18 00:29:50 +00:00
SukkaandGitHub 27dcd26c43 chore: replace fs-extra usage in scripts/ (#57215)
The PR is the continuation of #56917 and #57030.

The PR replaces `fs-extra#copy` with Node.js built-in `fs.cp` API (which is almost identical to `fs-extra#copy`, and has been available since Node.js 16). The PR also provides a workaround for flaky Windows `fs.rename` operation (#57030).

cc @styfle @wbinnssmith
2023-11-15 13:34:18 +00:00
Tim NeutkensandGitHub 53b815547d Refactor repo-setup.js (#58131)
Doesn't make any functional changes. Going through the current setup for isolated tests to figure out a better way to cache the repository setup, so that we don't have to wait ~30s+ when running tests locally.
2023-11-07 13:01:12 +00:00
Zack TannerandGitHub 811e5c4fd5 move release undraft step until after canary is fully published (#57324)
Currently we publish a release in GitHub before it's actually fully published to npm. This moves the undraft step until after the publish is finished
2023-10-31 18:37:06 +00:00
Justin RidgewellandGitHub 79511317f6 Automatically update Turbopack test manifest (#57778)
### What?

This PR adds an hourly workflow that will update the test manifest used when testing with Turbopack.

### Why?

To ensure we don't regress any test suites.

### How?

I use the existing `scripts/update-fonts-data-workflow.js` workflow script which will execute a script, then create a PR with the current working tree. If any pending automated PRs exist, they will be closed when a new one is opened.
2023-10-31 02:06:48 +00:00
Jimmy Lai 0bcba460b7 fix publish script 2023-10-26 08:58:37 -07:00
JJ KasperandGitHub d670c5c860 Update publish-native script for wasm change (#57472)
x-ref:
https://github.com/vercel/next.js/actions/runs/6649134570/job/18067246584
x-ref: https://github.com/vercel/next.js/pull/57437
2023-10-25 21:41:43 -07:00
SukkaandGitHub ebcc855af6 chore: revert back to moving files w/ fs-extra (#57030)
Follows #56917, revert back to moving files using `fs-extra`. This should help with the flaky `fs.rename` operation on Windows.

cc @styfle
2023-10-19 13:29:19 +00:00
SukkaandGitHub 17553c5e25 chore: reduce fs-extra usage in scripts/ (#56917)
The PR follows #56536 and #56491, replacing `fs-extra` usages inside the `scripts/` folder.

Note that the `copy` and `move` haven't been replaced yet. Currently, there is no better recursive copy (lightweight, promise-based, Node.js built-in `copyFile` API-based, support the `filter` option) library alternative available on npm, and Node.js built-in `fs.rename` doesn't support `overwrite`.

The PR also replaces many async fs API usage with their sync versions.

cc @wbinnssmith
2023-10-17 19:31:19 +00:00
Zack TannerandGitHub e7fc6f3708 ensure kodiak is re-added to apps list after code-freeze action (#56907)
ensures that after the code-freeze action, Kodiak is re-added to the restrictions list

[slack x-ref](https://vercel.slack.com/archives/C04DUD7EB1B/p1697491473466249)
2023-10-16 22:00:02 +00:00
b436589ff8 Maintenance: minor example dep bumps to fix moderate vulns (#56375)
### What?
Merged a bunch of dependabot alerts in my own canary branch, mainly
postcss patch updates, and one graphql minor update, to fix moderate
security vulnerabilities in examples. Spot checked most and look good
still. EDIT: also one in scripts/send-trace-to-jaeger

### Why?
Because safety

### How?
Dependabot

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Steven <[email protected]>
2023-10-04 11:18:54 -04:00
JJ KasperandGitHub aa3377edec Fix code freeze disable handling (#56340)
Fixes: https://github.com/vercel/next.js/actions/runs/6388368482
2023-10-03 13:54:46 +00:00
a970f28439 Add code freeze GitHub actions for releasing (#56325)
Co-authored-by: Steven <[email protected]>
Co-authored-by: Zack Tanner <[email protected]>
2023-10-02 23:10:40 +02:00
StevenandGitHub 12c800e35c chore: remove chalk in favor of picocolors (#55992)
Similar to PR https://github.com/vercel/next.js/pull/53115, this PR removes `chalk` in favor of `picocolors`
2023-09-27 21:00:52 +00:00
Jimmy LaiandGitHub 76c9b2c469 misc: improve profiling script (#55732)
This PR improves the minimal server script by adding a slightly better look require profiler + some misc utility changes. This is eventually gonna be the basis for a `next profile` command.

This is what the output look like + its usage.
https://app.warp.dev/block/4AtutJ2PpVcM5BFDqlk7zk

```
next-cold-start: 56.024ms
next-request: 58.462ms
next-wall-time: 128.757ms
└─ ../../../packages/next/dist/compiled/next-server/server.runtime.prod.js 39.31ms / 49.27ms
  ├─ ../../../server/lib/trace/tracer.js 9.92ms / 20.97ms
  │  ├─ ../constants.js 0.19ms / 0.19ms
  │  └─ ../../../../../../../node_modules/.pnpm/@[email protected]/node_modules/@opentelemetry/api/build/src/index.js 10.86ms / 18.94ms
  │     ├─ ../baggage/utils.js 4.35ms / 7.41ms
  │     │  ├─ ../../api/diag.js 2.98ms / 5.70ms
  │     │  │  ├─ ../../diag/ComponentLogger.js 2.02ms / 3.66ms
  │     │  │  │  └─ ../../internal/global-utils.js 1.65ms / 2.71ms
  │     │  │  │     ├─ ../../platform/index.js 0.90ms / 1.22ms
  │     │  │  │     │  └─ ../node/index.js 0.32ms / 0.35ms
  │     │  │  │     │     └─ ../globalThis.js 0.03ms / 0.03ms
  │     │  │  │     ├─ ../../version.js 0.02ms / 0.02ms
  │     │  │  │     └─ ../semver.js 0.14ms / 0.14ms
  │     │  │  └─ ../../diag/internal/logLevelLogger.js 0.70ms / 0.76ms
  │     │  │     └─ ../../types.js 0.06ms / 0.06ms
  │     │  ├─ ../internal/baggage-impl.js 0.06ms / 0.06ms
  │     │  └─ ../internal/symbol.js 0.03ms / 0.03ms
  │     ├─ ../context/context.js 0.06ms / 0.06ms
  │     ├─ ../diag/consoleLogger.js 0.04ms / 0.04ms
  │     ├─ ../metrics/NoopMeter.js 0.12ms / 0.12ms
  │     ├─ ../metrics/Metric.js 0.03ms / 0.03ms
  │     ├─ ../propagation/TextMapPropagator.js 0.03ms / 0.03ms
  │     ├─ ../trace/ProxyTracer.js 1.69ms / 3.11ms
  │     │  └─ ../NoopTracer.js 1.42ms / 2.82ms
  │     │     ├─ ../../api/context.js 0.66ms / 0.73ms
  │     │     │  └─ ../../context/NoopContextManager.js 0.07ms / 0.07ms
  │     │     ├─ ../context-utils.js 0.70ms / 0.90ms
  │     │     │  └─ ../NonRecordingSpan.js 0.21ms / 0.55ms
  │     │     │     └─ ../invalid-span-constants.js 0.34ms / 0.37ms
  │     │     │        └─ ../trace_flags.js 0.03ms / 0.03ms
  │     │     └─ ../spancontext-utils.js 0.04ms / 0.04ms
  │     ├─ ../trace/ProxyTracerProvider.js 0.30ms / 0.33ms
  │     │  └─ ../NoopTracerProvider.js 0.03ms / 0.03ms
  │     ├─ ../trace/SamplingResult.js 0.03ms / 0.03ms
  │     ├─ ../trace/span_kind.js 0.03ms / 0.03ms
  │     ├─ ../trace/status.js 0.03ms / 0.03ms
  │     ├─ ../trace/internal/utils.js 0.44ms / 0.64ms
  │     │  └─ ../tracestate-impl.js 0.20ms / 0.25ms
  │     │     └─ ../tracestate-validators.js 0.04ms / 0.04ms
  │     ├─ ../context-api.js 0.06ms / 0.06ms
  │     ├─ ../diag-api.js 0.04ms / 0.04ms
  │     ├─ ../metrics-api.js 0.22ms / 0.48ms
  │     │  └─ ../api/metrics.js 0.26ms / 0.32ms
  │     │     └─ ../../metrics/NoopMeterProvider.js 0.06ms / 0.06ms
  │     ├─ ../propagation-api.js 0.30ms / 0.92ms
  │     │  └─ ../api/propagation.js 0.62ms / 0.74ms
  │     │     ├─ ../../propagation/NoopTextMapPropagator.js 0.03ms / 0.03ms
  │     │     └─ ../../baggage/context-helpers.js 0.09ms / 0.09ms
  │     └─ ../trace-api.js 0.31ms / 0.45ms
  │        └─ ../api/trace.js 0.15ms / 0.15ms
  ├─ ../../../shared/lib/runtime-config.external.js 0.05ms / 0.05ms
  ├─ ../../../../../../bench/basic-app/.next/server/app/page.js 4.07ms / 18.76ms
  │  ├─ ../../webpack-runtime.js 0.10ms / 0.10ms
  │  ├─ ../../chunks/388.js 0.06ms / 0.06ms
  │  ├─ ../../chunks/269.js 1.10ms / 1.10ms
  │  ├─ ../../../../../../packages/next/dist/compiled/next-server/app-page.runtime.prod.js 13.22ms / 13.63ms
  │  │  └─ ../../../client/components/request-async-storage.external.js 0.41ms / 0.47ms
  │  │     └─ ../async-local-storage.js 0.06ms / 0.06ms
  │  ├─ ../../../../../../packages/next/dist/client/components/static-generation-async-storage.external.js 0.16ms / 0.16ms
  │  └─ ../../../../../../packages/next/dist/client/components/action-async-storage.external.js 0.05ms / 0.05ms
  └─ ../../../../../../bench/basic-app/.next/server/app/page_client-reference-manifest.js 0.11ms / 0.11ms

```
2023-09-21 16:13:03 +00:00
Tobias KoppersandGitHub 44eba020c6 improve publish-release (#55597)
Closes WEB-1608
2023-09-19 18:23:51 +02:00
Zack TannerandGitHub 33c561b21d Consolidate experimental React opt-in & add ppr flag (#55560)
This consolidates how we're evaluating when to opt into `react@experimental` since it's sprinkled in a lot of spots. Also adds a new flag to opt into the experimental channel

Closes NEXT-1632
2023-09-19 10:45:25 +00:00
5217e7eb06 server: re-land bundled runtimes (#55139)
see https://github.com/vercel/next.js/pull/52997

also added a fix by @jridgewell to fix turbopack





Co-authored-by: Justin Ridgewell <[email protected]>
2023-09-08 16:05:29 +00:00
JJ KasperandGitHub 7267538e00 Revert "perf: add bundled rendering runtimes (#52997)" (#55117)
This reverts commit a5b7c77c1f.

Our E2E tests are failing with this change this reverts to allow investigating async 

x-ref: https://github.com/vercel/next.js/actions/runs/6112149126/job/16589769954
2023-09-07 21:07:53 +00:00
a5b7c77c1f perf: add bundled rendering runtimes (#52997)
## What?

In Next, rendering a route involves 3 layers:
- the routing layer, which will direct the request to the correct route to render
- the rendering layer, which will take a route and render it appropriately
- the user layer, which contains the user code 

In #51831, in order to optimise the boot time of Next.js, I introduced a change that allowed the routing layer to be bundled. In this PR, I'm doing the same for the rendering layer. This is building up on @wyattjoh's work that initially split the routing and the rendering layer into separate entry-points.

The benefits of having this approach is that this allows us to compartmentalise the different part of Next, optimise them individually and making sure that serving a request is as efficient as possible, e.g. rendering a `pages` route should not need code from the `app router` to be used.

There are now 4 different rendering runtimes, depending on the route type:
- app pages: for App Router pages
- app routes: for App Router route handlers
- pages: for legacy pages
- pages api: for legacy API routes

This change should be transparent to the end user, beside faster cold boots.

## Notable changes

Doing this change required a lot of changes for Next.js under the hood in order to make the different layers play well together.

### New conventions for externals/shared modules

The big issue of bundling the rendering runtimes is that the user code needs to be able to reference an instance of a module/value created in Next during the render. This is the case when the user wants to access the router context during SSR via `next/link` for example; when you call `useContext(value)` the value needs to be the exact same reference to one as the one created by `createContext` earlier.

Previously, we were handling this case by making all files from Next that were affected by this `externals`, meaning that we were marking them not to be bundled.

**Why not keep it this way?**

The goal of this PR as stated previously was to make the rendering process as efficient as possible, so I really wanted to avoid extraneous fs reads to unoptimised code. 

In order to "fix" it, I introduced two new conventions to the codebase:
- all files that explicitly need to be shared between a rendering runtime and the user code must be suffixed by `.shared-runtime` and exposed via adding a reference in the relevant `externals` file. At compilation time, a reference to a file ending with this will get re-written to the appropriate runtime.
- all files that need to be truly externals need to be suffixed by `.external`. At compilation time, a reference to it will stay as-is. This special case is needed mostly only for the async local storages that need to be shared with all three layers of Next.

As a side effect, we should be bundling more of the Next code in the user bundles, so it should be slightly more efficient.

### App route handlers are compiled on their own layer

App route handlers should be compiled in their own layer, this allows us to separate more cleanly the compilation logic here (we don't need to run the RSC logic for example).

### New rendering bundles

We now generate a prod and a dev bundle for:
- the routing server
- the app/pages SSR rendering process
- the API routes process

The development bundle is needed because:
- there is code in Next that relies on NODE_ENV
- because we opt out of the logic referencing the correct rendering runtime in dev for a `shared-runtime` file. This is because we don't need to and that Turbopack does not support rewriting an external to something that looks like this `require('foo').bar.baz` yet. We will need to fix that when Turbopack build ships.

### New development pipeline

Bundling Next is now required when developing on the repo so I extended the taskfile setup to account for that. The webpack config for Next itself lives in `webpack.config.js` and contains the logic for all the new bundles generated.

### Misc changes

There are some misc reshuffling in the code to better use the tree shaking abilities that we can now use.

fixes NEXT-1573

Co-authored-by: Alex Kirszenberg <[email protected]>
2023-09-07 15:51:49 +00:00
Tobias KoppersandGitHub 15980a66d4 remove --turbo, use --experimental-turbo as --turbo (#55063)
### What?

Switch the default for `--turbo` to the new `--experimental-turbo`, remove the old code in next.js

### Why?

The new approach will be used in future


Closes WEB-1506
2023-09-06 17:46:54 +00:00