Skip to content

Share native binaries via GitHub artifacts#92758

Open
mmastrac wants to merge 1 commit intocanaryfrom
mmastrac/native-artifact-sharing
Open

Share native binaries via GitHub artifacts#92758
mmastrac wants to merge 1 commit intocanaryfrom
mmastrac/native-artifact-sharing

Conversation

@mmastrac
Copy link
Copy Markdown
Contributor

@mmastrac mmastrac commented Apr 14, 2026

What

Use the GHA cache instead of turborepo cache for intemediate build products.

Why

turborepo is fast, but GHA is pretty fast too (adds a few seconds), and this takes load off the cache server. As a bonus, we get intermediate artifacts available for download and we work regardless of cache server availability.

Details

  • Add nativeArtifact/uploadNativeArtifact inputs to build_reusable.yml
  • Build jobs upload .node files as GitHub artifacts
  • Test jobs download pre-built artifacts instead of rebuilding via turborepo cache
  • Rust installation and sccache are skipped when downloading pre-built artifacts
  • Both Linux (next-swc-linux) and Windows (next-swc-windows) native builds upload artifacts

@nextjs-bot nextjs-bot added the created-by: Turbopack team PRs by the Turbopack team. label Apr 14, 2026
Copy link
Copy Markdown
Contributor Author

mmastrac commented Apr 14, 2026

@nextjs-bot
Copy link
Copy Markdown
Collaborator

nextjs-bot commented Apr 14, 2026

Tests Passed

@mmastrac mmastrac requested a review from a team April 14, 2026 00:44
@nextjs-bot
Copy link
Copy Markdown
Collaborator

nextjs-bot commented Apr 14, 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) 456ms 455ms ▁▁▁▁▁
Cold (Ready in log) 438ms 439ms ▅▃▄▁▂
Cold (First Request) 824ms 826ms ▁█▁██
Warm (Listen) 455ms 456ms ▁▁▁▁▁
Warm (Ready in log) 438ms 438ms ▁▆▁▅▆
Warm (First Request) 337ms 337ms ▂▆▄▅▆
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 455ms 456ms ▅▁▅▅▅
Cold (Ready in log) 438ms 439ms █▁▁▁▂
Cold (First Request) 1.876s 1.869s █▁▄▃▁
Warm (Listen) 456ms 456ms ▃▃▃▃▃
Warm (Ready in log) 438ms 437ms █▂▁▁▂
Warm (First Request) 1.879s 1.872s █▁▃▂▂

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 4.033s 4.033s ▄▄▆▃▃
Cached Build 4.103s 4.066s ▆▁█▂▁
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.456s 14.434s █▁▁▂▂
Cached Build 14.597s 14.559s █▁▁▁▂
node_modules Size 493 MB 493 MB ██▇▇▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
003q3zf-_j90o.js gzip 154 B N/A -
053b9v5j96uu_.js gzip 8.56 kB N/A -
07rxhp_1_g4mu.js gzip 13.1 kB N/A -
096aa2uod0_wa.js gzip 9.82 kB N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0ea8vo2o6kp_s.js gzip 13.3 kB N/A -
0egovw6-5i1e3.js gzip 8.57 kB N/A -
0ek_k55_6bo3v.js gzip 156 B N/A -
0fli3_wppnim5.js gzip 12.9 kB N/A -
0i-rrmz-wd2gx.js gzip 156 B N/A -
0k09jwjeb-tki.js gzip 13.8 kB N/A -
0kb7_ep3r1z0_.js gzip 10.1 kB N/A -
0kmgih16pb2zy.js gzip 9.24 kB N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
1-z_xm7pzpbeh.js gzip 49.2 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
16vepdkipri3r.js gzip 8.51 kB N/A -
17n96uu6y1pxq.js gzip 8.6 kB N/A -
1cml77k0cjco9.js gzip 168 B N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1ldzw5bsf3-0l.js gzip 158 B N/A -
1rk604e6mevef.js gzip 158 B N/A -
1wj60c-jqsx-n.js gzip 65.5 kB N/A -
1xz7fhgdco-x_.js gzip 8.59 kB N/A -
2__-e_ym8n788.js gzip 450 B N/A -
22o6xd9_ywdu6.js gzip 233 B N/A -
298segop7mz8t.js gzip 155 B N/A -
2k1q_gre6hp0-.js gzip 8.56 kB N/A -
2kvj8yrfznmwx.js gzip 5.69 kB N/A -
2rw6naw2b83yz.js gzip 155 B N/A -
2sgqisp4604si.js gzip 8.51 kB N/A -
2w6v6x0pu6b9t.js gzip 152 B N/A -
3-gysh_p9nr43.js gzip 154 B N/A -
32vddve-rleg-.js gzip 155 B N/A -
342ijzvrpe53h.js gzip 2.29 kB N/A -
3r9j-437x-6se.js gzip 70.8 kB N/A -
3v9s-fz24f8oo.js gzip 10.4 kB N/A -
3yexkdj8m6t6w.js gzip 156 B N/A -
420pn_b9x-3ir.js gzip 8.62 kB N/A -
44un3--wmqiyh.js gzip 7.61 kB N/A -
45b-gnabw9j10.js gzip 159 B N/A -
turbopack-03..-ma2.js gzip 4.19 kB N/A -
turbopack-0r.._kdp.js gzip 4.17 kB N/A -
turbopack-13..kpmz.js gzip 4.19 kB N/A -
turbopack-1e..mq-a.js gzip 4.19 kB N/A -
turbopack-1m..v-xx.js gzip 4.19 kB N/A -
turbopack-1p..9plq.js gzip 4.19 kB N/A -
turbopack-2g..vuez.js gzip 4.19 kB N/A -
turbopack-2h..9hvz.js gzip 4.19 kB N/A -
turbopack-2z..x-oe.js gzip 4.19 kB N/A -
turbopack-2z.._2cn.js gzip 4.19 kB N/A -
turbopack-30..5pgu.js gzip 4.19 kB N/A -
turbopack-3q..w87f.js gzip 4.19 kB N/A -
turbopack-41..k4t0.js gzip 4.19 kB N/A -
turbopack-43..kpg1.js gzip 4.2 kB N/A -
03_szppy5nakp.js gzip N/A 49.2 kB -
089687r99-5_3.js gzip N/A 70.8 kB -
0arkbdqpxc37i.js gzip N/A 8.6 kB -
0ioow_tmvzxbf.js gzip N/A 160 B -
0tvekitj587fh.js gzip N/A 8.51 kB -
0z83a1om5rvtt.js gzip N/A 7.61 kB -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
14t1kneseb8th.js gzip N/A 2.3 kB -
186o_9v4q6wvo.js gzip N/A 156 B -
192q2suy7rwb_.js gzip N/A 8.56 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1g64old_av12i.js gzip N/A 162 B -
1wzrm0xjjbzn5.js gzip N/A 10.1 kB -
1xz2r9l20e-3a.js gzip N/A 154 B -
1z-ehckjr27om.js gzip N/A 156 B -
2368ic2ozqvf4.js gzip N/A 152 B -
25a1yz7zua29z.js gzip N/A 13.8 kB -
2f2bp_kexa37v.js gzip N/A 13.3 kB -
2i5v1taq97gql.js gzip N/A 8.59 kB -
2k_lzeilnqipg.js gzip N/A 158 B -
2k_ngfk54igk6.js gzip N/A 153 B -
2n3vh0w0tnb_2.js gzip N/A 8.52 kB -
2u_rpxq3tzytl.js gzip N/A 233 B -
2wfbykz1avdns.js gzip N/A 8.56 kB -
2xzzk6an46wqn.js gzip N/A 156 B -
32sifemopndov.js gzip N/A 10.4 kB -
368lim5wq0o0r.js gzip N/A 12.9 kB -
37eq851j9q6mo.js gzip N/A 154 B -
3de283pazbu99.js gzip N/A 9.81 kB -
3do8sy38i_qxd.js gzip N/A 158 B -
3drqjohogojbw.js gzip N/A 5.69 kB -
3dy48ip094dzs.js gzip N/A 65.5 kB -
3g8l1m2-o-ewi.js gzip N/A 13.1 kB -
3gp2o_v7jcw6s.js gzip N/A 8.57 kB -
3hqx7mbe-0y88.js gzip N/A 156 B -
3q6ng103a6hrv.js gzip N/A 167 B -
3qu7g1q2l_x2n.js gzip N/A 9.24 kB -
43j6fjudq0a3_.js gzip N/A 8.62 kB -
turbopack-02..3z3o.js gzip N/A 4.19 kB -
turbopack-0a..ouyp.js gzip N/A 4.19 kB -
turbopack-0g..wffw.js gzip N/A 4.19 kB -
turbopack-0j..oeej.js gzip N/A 4.19 kB -
turbopack-0l..0uik.js gzip N/A 4.2 kB -
turbopack-1g..agy-.js gzip N/A 4.19 kB -
turbopack-1n.._k1i.js gzip N/A 4.19 kB -
turbopack-1s..731r.js gzip N/A 4.19 kB -
turbopack-26..d_-r.js gzip N/A 4.19 kB -
turbopack-2u..rxmd.js gzip N/A 4.19 kB -
turbopack-36..u4h0.js gzip N/A 4.17 kB -
turbopack-3h..f3i2.js gzip N/A 4.19 kB -
turbopack-3m..ykcb.js gzip N/A 4.19 kB -
turbopack-44..-s4x.js gzip N/A 4.19 kB -
Total 465 kB 465 kB ⚠️ +53 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 716 B 717 B
Total 716 B 717 B ⚠️ +1 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 435 B 434 B
Total 435 B 434 B ✅ -1 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2637-HASH.js gzip 4.63 kB N/A -
7724.HASH.js gzip 169 B N/A -
8274-HASH.js gzip 61.3 kB N/A -
8817-HASH.js gzip 5.59 kB N/A -
c3500254-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 254 B 255 B
main-HASH.js gzip 39.4 kB 39.4 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
5887-HASH.js gzip N/A 5.61 kB -
6522-HASH.js gzip N/A 60.7 kB -
6779-HASH.js gzip N/A 4.63 kB -
8854.HASH.js gzip N/A 169 B -
eab920f9-HASH.js gzip N/A 62.8 kB -
Total 235 kB 235 kB ✅ -619 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 193 B 193 B
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 333 B 334 B
dynamic-HASH.js gzip 1.81 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 353 B 349 B 🟢 4 B (-1%)
hooks-HASH.js gzip 384 B 382 B
image-HASH.js gzip 581 B 581 B
index-HASH.js gzip 260 B 259 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 316 B 318 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 313 B 314 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.97 kB ✅ -10 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 273 kB 272 kB
Total 398 kB 398 kB ✅ -399 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 618 B 618 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 43.9 kB 44.3 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.5 kB 45.9 kB ⚠️ +369 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 721 B 720 B
Total 721 B 720 B ✅ -1 B
Build Cache
Canary PR Change
0.pack gzip 4.38 MB 4.38 MB
index.pack gzip 114 kB 112 kB 🟢 1.96 kB (-2%)
index.pack.old gzip 114 kB 112 kB 🟢 1.79 kB (-2%)
Total 4.61 MB 4.6 MB ✅ -5.61 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 346 kB 346 kB
app-page-exp..prod.js gzip 192 kB 192 kB
app-page-tur...dev.js gzip 346 kB 346 kB
app-page-tur..prod.js gzip 192 kB 192 kB
app-page-tur...dev.js gzip 342 kB 342 kB
app-page-tur..prod.js gzip 190 kB 190 kB
app-page.run...dev.js gzip 343 kB 343 kB
app-page.run..prod.js gzip 190 kB 190 kB
app-route-ex...dev.js gzip 77 kB 77 kB
app-route-ex..prod.js gzip 52.5 kB 52.5 kB
app-route-tu...dev.js gzip 77.1 kB 77.1 kB
app-route-tu..prod.js gzip 52.6 kB 52.6 kB
app-route-tu...dev.js gzip 76.7 kB 76.7 kB
app-route-tu..prod.js gzip 52.3 kB 52.3 kB
app-route.ru...dev.js gzip 76.6 kB 76.6 kB
app-route.ru..prod.js gzip 52.3 kB 52.3 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.9 kB 43.9 kB
pages-api-tu..prod.js gzip 33.5 kB 33.5 kB
pages-api.ru...dev.js gzip 43.9 kB 43.9 kB
pages-api.ru..prod.js gzip 33.5 kB 33.5 kB
pages-turbo....dev.js gzip 53.3 kB 53.3 kB
pages-turbo...prod.js gzip 39.1 kB 39.1 kB
pages.runtim...dev.js gzip 53.3 kB 53.3 kB
pages.runtim..prod.js gzip 39.1 kB 39.1 kB
server.runti..prod.js gzip 62.9 kB 62.9 kB
Total 3.06 MB 3.06 MB ✅ -1 B
📝 Changed Files (2 files)

Files with changes:

  • pages-api.runtime.dev.js
  • pages.runtime.dev.js
View diffs
pages-api.runtime.dev.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/726c9149384274055553563303cd6d9bfa150a19/next

Base automatically changed from mmastrac/pin-artifact-actions to canary April 14, 2026 01:22
@mmastrac mmastrac force-pushed the mmastrac/native-artifact-sharing branch from e7d54c6 to 5e63269 Compare April 14, 2026 15:54
Add nativeArtifact/uploadNativeArtifact inputs to build_reusable.yml.
Build jobs upload .node files as artifacts, test jobs download them
instead of rebuilding via turborepo. Rust installation and sccache
are skipped when downloading pre-built artifacts.

Both Linux and Windows native builds upload artifacts. All test jobs
download the appropriate artifact for their platform.
@mmastrac mmastrac force-pushed the mmastrac/native-artifact-sharing branch from 5e63269 to 726c914 Compare April 14, 2026 16:50
@mmastrac mmastrac requested review from bgw April 14, 2026 17:53
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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants