|
|
@@ -6,7 +6,7 @@ const recipes={
|
|
|
standard:{image:'${YAOYAO_DESKTOP_IMAGE:-hermes-yaoyao-desktop:0.4.0}',dockerfile:'Dockerfile'},
|
|
|
cursor:{image:'${YAOYAO_CURSOR_DESKTOP_IMAGE:-yaoyao-desktop:cursor}',dockerfile:'Dockerfile.cursor',platform:'linux/amd64'},
|
|
|
}
|
|
|
-export function generateDesktopCompose(base,entries){
|
|
|
+export function generateDesktopCompose(base,entries,source='deploy/compose-desktops.json'){
|
|
|
if(!Array.isArray(entries)||entries.length<1||entries.length>32)throw new Error('Compose 桌面数量须为 1–32')
|
|
|
for(const d of entries){
|
|
|
if(!d||!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(d.id)||!/^desktop-[a-z0-9-]+$/.test(d.service)||typeof d.name!=='string'||!d.name.trim())throw new Error('Compose 桌面定义无效')
|
|
|
@@ -19,7 +19,7 @@ export function generateDesktopCompose(base,entries){
|
|
|
.replace(' - yaoyao-data:/home/node/.yaoyao',' - yaoyao-data:/home/node/.yaoyao\n'+entries.map(d=>` - ${d.service}-ipc:/run/yaoyao-desktops/${d.service}:ro`).join('\n'))
|
|
|
const volumesAt=base.indexOf('\nvolumes:')
|
|
|
if(volumesAt<0||!base.includes('HERMES_YAOYAO_COMPOSE_DESKTOPS'))throw new Error('compose.yaml 模板结构已变化')
|
|
|
- let yaml='# Generated from compose.yaml and deploy/compose-desktops.json.\n'+base.slice(0,volumesAt)+'\n'
|
|
|
+ let yaml=`# Generated from compose.yaml and ${source}.\n`+base.slice(0,volumesAt)+'\n'
|
|
|
for(const d of entries){
|
|
|
const recipe=recipes[d.imageKey??'standard']
|
|
|
yaml+=` ${d.service}:
|
|
|
@@ -58,10 +58,14 @@ ${recipe.platform?` platform: ${recipe.platform}\n`:''} build:
|
|
|
return yaml
|
|
|
}
|
|
|
if(process.argv[1]&&resolve(process.argv[1])===fileURLToPath(import.meta.url)){
|
|
|
- const entries=JSON.parse(readFileSync(resolve(root,'deploy/compose-desktops.json'),'utf8'))
|
|
|
- const yaml=generateDesktopCompose(readFileSync(resolve(root,'compose.yaml'),'utf8'),entries)
|
|
|
- const output=resolve(root,'compose.desktops.yaml')
|
|
|
- if(process.argv.includes('--check')){if(readFileSync(output,'utf8')!==yaml)throw new Error('compose.desktops.yaml 与桌面定义不同步,请运行 node scripts/generate-desktop-compose.mjs')}
|
|
|
- else writeFileSync(output,yaml)
|
|
|
- console.log(`Compose 共享桌面:${entries.length} 台`)
|
|
|
+ const base=readFileSync(resolve(root,'compose.yaml'),'utf8')
|
|
|
+ for(const suffix of ['', '.cursor']){
|
|
|
+ const source=`deploy/compose-desktops${suffix}.json`
|
|
|
+ const entries=JSON.parse(readFileSync(resolve(root,source),'utf8'))
|
|
|
+ const yaml=generateDesktopCompose(base,entries,source)
|
|
|
+ const name=`compose.desktops${suffix}.yaml`,output=resolve(root,name)
|
|
|
+ if(process.argv.includes('--check')){if(readFileSync(output,'utf8')!==yaml)throw new Error(`${name} 与桌面定义不同步,请运行 node scripts/generate-desktop-compose.mjs`)}
|
|
|
+ else writeFileSync(output,yaml)
|
|
|
+ console.log(`${name}:${entries.length} 台共享桌面`)
|
|
|
+ }
|
|
|
}
|