11# Overview of release process and infrastructure for Node.js
22
3- This is an overview of how the release process for Node.js works and how it interacts with Build WG infrastructure.
3+ This is an overview of infrastructure owned/managed by the Build WG and how it interacts with Node.js' [ release process] [ ] .
4+
45Clicking on most labels will take you to the relevant area of the build repository or other repository owned by the Node.js organization.
56
67``` mermaid
78flowchart TD
8- subgraph user [Releaser]
9+ subgraph releaser [Releaser]
910 start([<a href='https://github.com/nodejs/node/blob/main/doc/contributing/releases.md'>Start</a>])
10- prepareRelease( <a href='https://github.com/nodejs/node/blob/main/doc/contributing/releases.md#7-ensure-that-the-release-branch-is-stable'>Prepare the release</a>)
11- startTestBuilds( <a href='https://github.com/nodejs/node/blob/main/doc/contributing/releases.md#7-ensure-that-the-release-branch-is-stable'>Start test builds</a>)
11+ prepareRelease[/ <a href='https://github.com/nodejs/node/blob/main/doc/contributing/releases.md#7-ensure-that-the-release-branch-is-stable'>Prepare the release</a>\]
12+ startTestBuilds[/ <a href='https://github.com/nodejs/node/blob/main/doc/contributing/releases.md#7-ensure-that-the-release-branch-is-stable'>Start test builds</a>\]
1213 readyToRelease{Ready for release?}
1314
14- startReleaseBuilds( <a href='https://github.com/nodejs/node/blob/main/doc/contributing/releases.md#9-produce-release-builds'>Start release build</a>)
15- promote( <a href='https://github.com/nodejs/node/blob/main/tools/release.sh'>Promote</a>)
16- blog( <a href='https://github.com/nodejs/nodejs.org/blob/main/scripts/release-post/index.mjs'>Create blog post</a>)
15+ startReleaseBuilds[/ <a href='https://github.com/nodejs/node/blob/main/doc/contributing/releases.md#9-produce-release-builds'>Start release build</a>\]
16+ promote[/ <a href='https://github.com/nodejs/node/blob/main/tools/release.sh'>Promote</a>\]
17+ blog[/ <a href='https://github.com/nodejs/nodejs.org/blob/main/scripts/release-post/index.mjs'>Create blog post</a>\]
1718 done([End])
1819
1920 start-->prepareRelease-->startTestBuilds-->readyToRelease
2021 readyToRelease--No-->prepareRelease
2122 readyToRelease--Yes-->startReleaseBuilds-->promote-->blog-->done
2223 end
2324 subgraph github[GitHub]
24- ghCode[<a href='https://github.com/nodejs/node'>nodejs/node</a>]
25- ghWebsite[<a href='https://github.com/nodejs/nodejs.org'>nodejs/nodejs.org</a>]
25+ ghCode[(<a href='https://github.com/nodejs/node'>nodejs/node</a>)]
26+ ghWebsite[(<a href='https://github.com/nodejs/nodejs.org'>nodejs/nodejs.org</a>)]
27+ ghUnofficial[(<a href='https://github.com/nodejs/unofficial-builds'>nodejs/unofficial-builds</a>)]
2628
27- %% This invisible link is to aid the layout of the flowchart, stacking the two repositories vertically
28- ghCode ~~~ ghWebsite
29+ %% This invisible link is to aid the layout of the flowchart, stacking the repositories vertically
30+ ghCode ~~~ ghWebsite ~~~ ghUnofficial
2931 end
3032 subgraph buildInfra[Infrastructure owned by Build WG]
3133 subgraph ci[Test CI]
@@ -34,16 +36,21 @@ flowchart TD
3436 subgraph ci-release[Release CI]
3537 releaseBuilds(<a href='https://ci-release.nodejs.org/job/iojs+release/'>Release builds</a>)
3638 end
37- subgraph www[ www server]
39+ subgraph wwwServer[<a href='https://github.com/nodejs/build/tree/main/ansible/ www-standalone'>www server</a> ]
3840 staging[(staging)]
3941 promotion(<a href='https://github.com/nodejs/build/tree/main/ansible/www-standalone/tools/promote'>Promotion</a>)
4042 dist[(dist)]
4143 rebuildIdx(<a href='https://github.com/nodejs/nodejs-dist-indexer'>Rebuild index</a>)
4244 rebuildWebsite(<a href='https://github.com/nodejs/build/blob/main/ansible/www-standalone/resources/scripts/build-site.sh'>Rebuild website</a>)
45+ www[(www)]
4346 queueCDN[<a href='https://github.com/nodejs/build/blob/main/ansible/www-standalone/resources/scripts/queue-cdn-purge.sh'>Queue CDN purge</a>]
4447 webhook(<a href='https://github.com/nodejs/build/blob/main/ansible/www-standalone/resources/config/github-webhook.json.j2'>Webhook</a>)
48+ subgraph nightlyCron[<a href='https://github.com/nodejs/build/blob/main/ansible/www-standalone/tasks/tools.yaml'>nightly cron</a>]
49+ nightlyBuilder[[<a href='https://github.com/nodejs/nodejs-nightly-builder'>nodejs-nightly-builder</a>]]
50+ end
4551
4652 staging-->promotion-->dist-->rebuildIdx
53+ nightlyBuilder-.->releaseBuilds
4754
4855 subgraph chkIndex[Check index]
4956 idxChanged{<a href='https://github.com/nodejs/build/blob/main/ansible/www-standalone/resources/scripts/check-build-site.sh'>Index Changed?</a>}
@@ -54,7 +61,7 @@ flowchart TD
5461 rebuildIdx-.->idxChanged
5562 webhook-->rebuildWebsite
5663 idxChanged--Yes-->rebuildWebsite
57- rebuildWebsite-->queueCDN-.->purgeQueued
64+ rebuildWebsite-->www--> queueCDN-.->purgeQueued
5865
5966 subgraph cdn[CDN purge queue]
6067 purgeQueued{<a href='https://github.com/nodejs/build/blob/main/ansible/www-standalone/resources/scripts/cdn-purge.sh.j2'>CDN purge queued?</a>}
@@ -64,6 +71,35 @@ flowchart TD
6471 purgeQueued--Yes-->purge
6572 end
6673 end
74+ subgraph unofficial[<a href='https://github.com/nodejs/build/tree/main/ansible/roles/unofficial-builds'>Unofficial builds server</a>]
75+ subgraph unofficialPeriodicTimer[<a href='https://github.com/nodejs/build/blob/main/ansible/roles/unofficial-builds/files/nodejs-periodic.timer'>nodejs-periodic.timer</a>]
76+ subgraph unofficialPeriodicService[<a href='https://github.com/nodejs/build/blob/main/ansible/roles/unofficial-builds/files/nodejs-periodic.service'>nodejs-periodic.service</a>]
77+ unofficialPeriodicSh[[<a href='https://github.com/nodejs/unofficial-builds/blob/main/bin/periodic.sh'>periodic.sh</a>]]
78+ unofficialBuildIfQueued[[<a href='https://github.com/nodejs/unofficial-builds/blob/main/bin/build-if-queued.sh'>build-if-queued.sh</a>]]
79+ end
80+ end
81+ unofficialManualQueue[/<a href='https://github.com/nodejs/unofficial-builds#manual-build-triggers'>Manually queue build</a>\]
82+ unofficialQueueBuild[<a href='https://github.com/nodejs/unofficial-builds/blob/main/bin/queue-push.sh'>Queue build</a>]
83+ unofficialDownloads[(download)]
84+ unofficialWebhook[<a href='https://github.com/nodejs/build/blob/main/ansible/roles/unofficial-builds/files/unofficial-builds-deploy-webhook.service'>Webhook</a>]
85+ unofficialDeploy[<a href='https://github.com/nodejs/build/blob/main/ansible/roles/unofficial-builds/files/deploy-unofficial-builds.sh'>Deploy recipes]
86+ unofficialRecipes[(Recipe containers)]
87+
88+ ghUnofficial-.->|Pull request merged|unofficialWebhook-->unofficialDeploy-->unofficialRecipes
89+ unofficialPeriodicSh-->unofficialBuildIfQueued-->unofficialDownloads
90+ unofficialPeriodicSh-->unofficialQueueBuild-->unofficialBuildIfQueued
91+ unofficialManualQueue-->unofficialQueueBuild
92+ end
93+ subgraph unencrypted[www failover server]
94+ unencryptedRsync[[rsyncmirror.service]]
95+ unencryptedDist[(dist mirror)]
96+ unencryptedWww[(www mirror)]
97+
98+ dist-->unencryptedRsync
99+ www-->unencryptedRsync
100+ unencryptedRsync-->unencryptedDist
101+ unencryptedRsync-->unencryptedWww
102+ end
67103 end
68104 prepareRelease-->|Open/update pull request|ghCode
69105 startTestBuilds-->testBuilds
@@ -72,8 +108,19 @@ flowchart TD
72108 promote-->promotion
73109 blog-->|Open pull request|ghWebsite
74110 releaseBuilds-->staging
75- purge-->cloudflare
111+ subgraph cloudflare[Cloudflare]
112+ cloudflareCDN[(CDN)]
113+ end
114+ purge-->cloudflareCDN
115+ dist-.->cloudflareCDN
116+ www-.->cloudflareCDN
117+ unencryptedDist-.->cloudflareCDN
118+ unencryptedWww-.->cloudflareCDN
76119
77- %% This invisible link is to aid the layout of the flowchart, stacking the "Test CI" subgraph above the "Release CI" subgraph
78- ci ~~~ ci-release
120+ %% Invisible links to aid the layout of the flowchart, vertically stacking some subgraphs
121+ ci ~~~ ci-release ~~~ unofficial
122+ unofficial ~~~ unencrypted
123+ buildInfra ~~~ cloudflare
79124```
125+
126+ [ release process ] : https://github.com/nodejs/node/blob/main/doc/contributing/releases.md
0 commit comments