@@ -2,6 +2,7 @@ import fs from 'fs/promises'
22import path from 'path'
33import { fileURLToPath } from 'url'
44import { execa } from 'execa'
5+ import semver from 'semver'
56
67const __filename = fileURLToPath ( import . meta. url )
78const __dirname = path . dirname ( __filename )
@@ -14,6 +15,7 @@ const GITHUB_TOKEN =
1415 process . env . WORKSHOP_UPDATE_TOKEN ?? process . env . GITHUB_TOKEN
1516const USING_WORKSHOP_UPDATE_TOKEN = Boolean ( process . env . WORKSHOP_UPDATE_TOKEN )
1617const CONCURRENCY = 5
18+ const TARGET_NODE_VERSION = '26.0.0'
1719const ADDITIONAL_WORKSHOP_REPOS = [ 'ai-powered-apps' , 'workshop-template' ]
1820
1921if ( ! GITHUB_TOKEN ) {
@@ -138,6 +140,42 @@ async function getLatestVersion() {
138140 }
139141}
140142
143+ async function getPublishedWorkshopAppNodeRange ( version ) {
144+ try {
145+ const { stdout } = await execa ( 'npm' , [
146+ 'show' ,
147+ `@epic-web/workshop-app@${ version } ` ,
148+ 'engines.node' ,
149+ ] )
150+ return stdout . trim ( )
151+ } catch ( error ) {
152+ console . error (
153+ `❌ Failed to get @epic-web/workshop-app@${ version } node engine:` ,
154+ error . message ,
155+ )
156+ throw error
157+ }
158+ }
159+
160+ async function verifyWorkshopAppSupportsTargetNode ( version ) {
161+ const nodeRange = await getPublishedWorkshopAppNodeRange ( version )
162+ if ( ! nodeRange ) {
163+ throw new Error (
164+ `@epic-web/workshop-app@${ version } does not publish an engines.node range` ,
165+ )
166+ }
167+
168+ if ( ! semver . satisfies ( TARGET_NODE_VERSION , nodeRange ) ) {
169+ throw new Error (
170+ `@epic-web/workshop-app@${ version } supports Node ${ nodeRange } , not Node ${ TARGET_NODE_VERSION } . Aborting before updating workshops.` ,
171+ )
172+ }
173+
174+ console . log (
175+ `✅ @epic-web/workshop-app@${ version } supports Node ${ TARGET_NODE_VERSION } (${ nodeRange } )` ,
176+ )
177+ }
178+
141179/**
142180 * Verify that the epicshop package is available on npm registry
143181 * This helps avoid 404 errors in workshop CI when npm registry replication is delayed
@@ -562,6 +600,7 @@ async function main() {
562600 console . log ( '📦 Getting latest version from npm...' )
563601 const version = await getLatestVersion ( )
564602 console . log ( `🔍 Updating to version ${ version } ` )
603+ await verifyWorkshopAppSupportsTargetNode ( version )
565604
566605 // Verify that both epicshop and workshop-app are available on npm
567606 // before pushing updates to workshops to avoid 404 errors in workshop CI
0 commit comments