Skip to content

Conversation

@mischnic
Copy link
Member

@mischnic mischnic commented Jan 30, 2026

Part of PACK-6641

We don't have a way to silence (ignore-comment) warnings though
And additionally, warnings in node_modules are always hidden...

@nextjs-bot nextjs-bot added created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js. type: next labels Jan 30, 2026
@mischnic mischnic changed the title Warn on Vercel system env vars Warn when inlinig Vercel system env vars Jan 30, 2026
Copy link
Member Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@mischnic mischnic changed the title Warn when inlinig Vercel system env vars Warn when inlining Vercel system env vars Jan 30, 2026
@mischnic mischnic force-pushed the mischnic/freevar-warning branch from afca7ae to 0d703e5 Compare January 30, 2026 16:53
@mischnic mischnic force-pushed the mischnic/system-env-warning branch from d9364bb to e4048ef Compare January 30, 2026 16:53
Comment on lines 26 to 69
process.env.NEXT_PUBLIC_VERCEL = process.env.NEXT_PUBLIC_VERCEL || ''
process.env.NEXT_PUBLIC_CI = process.env.NEXT_PUBLIC_CI || ''
process.env.NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL =
process.env.NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL || ''
process.env.NEXT_PUBLIC_VERCEL_REGION =
process.env.NEXT_PUBLIC_VERCEL_REGION || ''
process.env.NEXT_PUBLIC_VERCEL_SKEW_PROTECTION_ENABLED =
process.env.NEXT_PUBLIC_VERCEL_SKEW_PROTECTION_ENABLED || ''
process.env.NEXT_PUBLIC_VERCEL_AUTOMATION_BYPASS_SECRET =
process.env.NEXT_PUBLIC_VERCEL_AUTOMATION_BYPASS_SECRET || ''
process.env.NEXT_PUBLIC_VERCEL_PROJECT_ID =
process.env.NEXT_PUBLIC_VERCEL_PROJECT_ID || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_PROVIDER =
process.env.NEXT_PUBLIC_VERCEL_GIT_PROVIDER || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG =
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER =
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_ID =
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_ID || ''
process.env.NEXT_PUBLIC_VERCEL_ENV = process.env.NEXT_PUBLIC_VERCEL_ENV || ''
process.env.NEXT_PUBLIC_VERCEL_TARGET_ENV =
process.env.NEXT_PUBLIC_VERCEL_TARGET_ENV || ''
process.env.NEXT_PUBLIC_VERCEL_BRANCH_URL =
process.env.NEXT_PUBLIC_VERCEL_BRANCH_URL || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF =
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID =
process.env.NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID || ''
process.env.NEXT_PUBLIC_VERCEL_URL = process.env.NEXT_PUBLIC_VERCEL_URL || ''
process.env.NEXT_PUBLIC_VERCEL_DEPLOYMENT_ID =
process.env.NEXT_PUBLIC_VERCEL_DEPLOYMENT_ID || ''
process.env.NEXT_PUBLIC_VERCEL_OIDC_TOKEN =
process.env.NEXT_PUBLIC_VERCEL_OIDC_TOKEN || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA =
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_MESSAGE =
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_MESSAGE || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_LOGIN =
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_LOGIN || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_NAME =
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_NAME || ''
process.env.NEXT_PUBLIC_VERCEL_GIT_PREVIOUS_SHA =
process.env.NEXT_PUBLIC_VERCEL_GIT_PREVIOUS_SHA || ''
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we need to init these environment variables eagerly? if they don't exist then i guess they don't get replaced rather than an error?

leave a comment to that effect

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just for local testing for now, not sure yet if we are going to keep this

because these env vars are only when deploying, and not locally, which makes the DX worse

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah that makes sense

if we keep it, maybe consider a constant list of a strings in a loop?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's wrong to inline them with an empty string though
so i'm thinking about doing FreeVarReference::Warning { inner: None } instead to support warning but not replacing.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With some more magic, it's now gated behind NOW_BUILDER like all other Vercel-specific stuff

But ideally, it would be printed in dev as well. Should we just always do this unconditionally? These are Vercel-specific env vars anyway?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah i think doing it all the time is reasonable

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 30, 2026

Failing test suites

Commit: cbc6ad7 | About building and testing Next.js

pnpm test-start test/e2e/app-dir/app-prefetch/prefetching.test.ts (job)

  • app dir - prefetching > should show layout eagerly when prefetched with loading one level down (DD)
  • app dir - prefetching > should immediately render the loading state for a dynamic segment when fetched from higher up in the tree (DD)
Expand output

● app dir - prefetching › should show layout eagerly when prefetched with loading one level down

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  26 |   })
  27 |
> 28 |   it('should show layout eagerly when prefetched with loading one level down', async () => {
     |   ^
  29 |     let act: ReturnType<typeof createRouterAct>
  30 |     const timeController = createTimeController()
  31 |     const browser = await next.browser('/', {

  at it (e2e/app-dir/app-prefetch/prefetching.test.ts:28:3)
  at Object.describe (e2e/app-dir/app-prefetch/prefetching.test.ts:11:1)

● app dir - prefetching › should immediately render the loading state for a dynamic segment when fetched from higher up in the tree

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  302 |   })
  303 |
> 304 |   it('should immediately render the loading state for a dynamic segment when fetched from higher up in the tree', async () => {
      |   ^
  305 |     let act: ReturnType<typeof createRouterAct>
  306 |     const browser = await next.browser('/', {
  307 |       beforePageLoad(page) {

  at it (e2e/app-dir/app-prefetch/prefetching.test.ts:304:3)
  at Object.describe (e2e/app-dir/app-prefetch/prefetching.test.ts:11:1)

@codspeed-hq
Copy link

codspeed-hq bot commented Jan 30, 2026

CodSpeed Performance Report

Merging this PR will not alter performance

Comparing mischnic/system-env-warning (cbc6ad7) with canary (2e3fb9b)

Summary

✅ 17 untouched benchmarks
⏩ 3 skipped benchmarks1

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 30, 2026

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 455ms 455ms ▁▁▁▁▁
Cold (Ready in log) 438ms 438ms ▁▂▂▂▂
Cold (First Request) 1.171s 1.168s ▁▅▄▄▂
Warm (Listen) 455ms 456ms ▁▁▁▁▁
Warm (Ready in log) 443ms 444ms ▁▁▁▁▁
Warm (First Request) 340ms 342ms ▁▂▁▂▂
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 455ms 455ms █▁███
Cold (Ready in log) 434ms 434ms ▇▅▆▅▁
Cold (First Request) 1.827s 1.830s ▅▃▃▄▁
Warm (Listen) 455ms 456ms ▅█▅▅▅
Warm (Ready in log) 434ms 434ms ▅▃▃▄▁
Warm (First Request) 1.821s 1.849s ▅▃▃▃▁

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 3.887s 3.924s ▂▁▁▁▃
Cached Build 3.921s 3.926s ▂▁▁▁▃
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 13.631s 13.643s ▄▁▁▂▁
Cached Build 13.686s 13.680s ▄▁▁▂▁
node_modules Size 464 MB 464 MB ███▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **434 kB** → **434 kB** ✅ -2 B

81 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 762 B 768 B
Total 762 B 768 B ⚠️ +6 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 450 B 451 B
Total 450 B 451 B ⚠️ +1 B

📦 Webpack

Client

Main Bundles
Canary PR Change
5528-HASH.js gzip 5.47 kB N/A -
6280-HASH.js gzip 54.5 kB N/A -
6335.HASH.js gzip 169 B N/A -
912-HASH.js gzip 4.53 kB N/A -
e8aec2e4-HASH.js gzip 62.5 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 256 B 253 B 🟢 3 B (-1%)
main-HASH.js gzip 39 kB 39 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
262-HASH.js gzip N/A 4.52 kB -
2889.HASH.js gzip N/A 169 B -
5602-HASH.js gzip N/A 5.48 kB -
6948ada0-HASH.js gzip N/A 62.5 kB -
9544-HASH.js gzip N/A 55.2 kB -
Total 228 kB 228 kB ⚠️ +670 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 183 B 180 B 🟢 3 B (-2%)
css-HASH.js gzip 331 B 330 B
dynamic-HASH.js gzip 1.81 kB 1.81 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 351 B 352 B
hooks-HASH.js gzip 384 B 383 B
image-HASH.js gzip 580 B 581 B
index-HASH.js gzip 260 B 260 B
link-HASH.js gzip 2.49 kB 2.49 kB
routerDirect..HASH.js gzip 320 B 319 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 315 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.97 kB 7.97 kB ✅ -1 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 248 kB 249 kB
Total 375 kB 375 kB ⚠️ +119 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 615 B 612 B
middleware-r..fest.js gzip 156 B 155 B
middleware.js gzip 33.1 kB 33.1 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 34.7 kB 34.8 kB ⚠️ +34 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 732 B 736 B
Total 732 B 736 B ⚠️ +4 B
Build Cache
Canary PR Change
0.pack gzip 3.79 MB 3.8 MB 🔴 +10.6 kB (+0%)
index.pack gzip 102 kB 102 kB
index.pack.old gzip 103 kB 103 kB
Total 4 MB 4.01 MB ⚠️ +10.6 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 311 kB 311 kB
app-page-exp..prod.js gzip 166 kB 166 kB
app-page-tur...dev.js gzip 311 kB 311 kB
app-page-tur..prod.js gzip 166 kB 166 kB
app-page-tur...dev.js gzip 308 kB 308 kB
app-page-tur..prod.js gzip 164 kB 164 kB
app-page.run...dev.js gzip 308 kB 308 kB
app-page.run..prod.js gzip 164 kB 164 kB
app-route-ex...dev.js gzip 70.4 kB 70.4 kB
app-route-ex..prod.js gzip 48.9 kB 48.9 kB
app-route-tu...dev.js gzip 70.4 kB 70.4 kB
app-route-tu..prod.js gzip 49 kB 49 kB
app-route-tu...dev.js gzip 70 kB 70 kB
app-route-tu..prod.js gzip 48.7 kB 48.7 kB
app-route.ru...dev.js gzip 70 kB 70 kB
app-route.ru..prod.js gzip 48.7 kB 48.7 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 43.1 kB 43.1 kB
pages-api-tu..prod.js gzip 32.9 kB 32.9 kB
pages-api.ru...dev.js gzip 43.1 kB 43.1 kB
pages-api.ru..prod.js gzip 32.8 kB 32.8 kB
pages-turbo....dev.js gzip 52.4 kB 52.4 kB
pages-turbo...prod.js gzip 39.4 kB 39.4 kB
pages.runtim...dev.js gzip 52.4 kB 52.4 kB
pages.runtim..prod.js gzip 39.3 kB 39.3 kB
server.runti..prod.js gzip 62.5 kB 62.5 kB
Total 2.77 MB 2.77 MB

@mischnic mischnic force-pushed the mischnic/system-env-warning branch from e4048ef to e11a725 Compare January 30, 2026 18:03
@mischnic mischnic force-pushed the mischnic/freevar-warning branch from 7dde8d6 to 8db23fd Compare January 30, 2026 20:00
@mischnic mischnic force-pushed the mischnic/system-env-warning branch from e11a725 to 8aa869f Compare January 30, 2026 20:00
@mischnic mischnic force-pushed the mischnic/freevar-warning branch from 8db23fd to dee9834 Compare January 30, 2026 22:02
@mischnic mischnic force-pushed the mischnic/system-env-warning branch from 8aa869f to cee941c Compare January 30, 2026 22:02
@mischnic mischnic force-pushed the mischnic/freevar-warning branch from dee9834 to 243fda5 Compare January 30, 2026 23:08
@mischnic mischnic force-pushed the mischnic/system-env-warning branch from cee941c to 0a54adb Compare January 30, 2026 23:08
@mischnic mischnic changed the base branch from mischnic/freevar-warning to graphite-base/89304 February 2, 2026 10:03
@mischnic mischnic force-pushed the graphite-base/89304 branch from 243fda5 to 2e3fb9b Compare February 2, 2026 10:04
@mischnic mischnic force-pushed the mischnic/system-env-warning branch from 0a54adb to 9b0b1cb Compare February 2, 2026 10:04
@graphite-app graphite-app bot changed the base branch from graphite-base/89304 to canary February 2, 2026 10:04
@mischnic mischnic force-pushed the mischnic/system-env-warning branch from 9b0b1cb to cbc6ad7 Compare February 2, 2026 10:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js. type: next

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants