Files
orca/config/scripts/orcad-distribution/server-bundle/orcad-windows-cli-launcher.mjs
Neil 9bd6272fdf refactor(tooling): organize build, CI, and test owners (#38130)
* refactor(tooling): organize test runtime and maintenance owners

* test(tooling): preserve relocated runtime fixture dependency edges

* refactor(tooling): preserve xterm routing owner checks

* ci(tooling): include routing owner in sparse checkout

* test(tooling): preserve copied workflow dependency closures

* fix(tooling): normalize hashed JSON assets in release parity

* fix(tooling): distinguish asset aliases from literal references

* fix(tooling): frame normalized asset reference payloads

* fix(tooling): normalize decoded JSON asset references

* refactor(tooling): organize build, CI and release owners

* fix(tooling): align moved generator and workflow path contracts

* fix(tooling): update generated plugin bundle owner banners

* test(tooling): create relocated mobile verifier fixture directories

* test(tooling): copy headless detector dependency closure

* test(tooling): align native batch policy fixtures with owner path

* fix(tooling): link moved reliability command to historical evidence

* fix(tooling): preserve nested sandbox owners and canonical guide source

* fix(tooling): target release version owners in checkout fixture
2026-11-04 21:08:19 -08:00

64 lines
2.1 KiB
JavaScript

import { copyFileSync, existsSync, mkdirSync } from 'node:fs'
import { createRequire } from 'node:module'
import { dirname, join } from 'node:path'
import { runProcessSync } from '@orca/process-host'
import { ORCAD_WINDOWS_CLI_LAUNCHER_FILENAME } from '../../../../src/shared/orcad-artifacts.ts'
const { PE_MACHINE, describePeMachine, readPeMachine } = createRequire(import.meta.url)(
'../../native-build/windows/windows-pe-machine.cjs'
)
export function orcadWindowsCliLauncherSource(root, arch) {
return join(root, '.build', 'windows-cli-launcher', arch, 'orca.exe')
}
/** A Windows slot's `orca` command; a Windows build host compiles a missing one. */
export function stageOrcadWindowsCliLauncher(
root,
outputDir,
target,
host = { platform: process.platform },
compile = compileOrcadWindowsCliLauncher
) {
if (!target.startsWith('win32-')) {
return
}
const arch = target.slice('win32-'.length)
const source = orcadWindowsCliLauncherSource(root, arch)
if (!existsSync(source)) {
if (host.platform !== 'win32') {
throw new Error(
`Orcad ${target} requires the native CLI launcher. On Windows, run: ` +
`node config/scripts/native-build/windows/build-windows-cli-launcher.mjs --arch ${arch} --output ${source}`
)
}
compile(root, arch, source)
}
const machine = readPeMachine(source)
if (machine !== PE_MACHINE[arch]) {
throw new Error(`Orcad ${target} CLI launcher has ${describePeMachine(machine)}`)
}
const destination = join(outputDir, ...ORCAD_WINDOWS_CLI_LAUNCHER_FILENAME.split('/'))
mkdirSync(dirname(destination), { recursive: true })
copyFileSync(source, destination)
}
function compileOrcadWindowsCliLauncher(root, arch, output) {
const result = runProcessSync({
program: process.execPath,
args: [
join(root, 'config/scripts/native-build/windows/build-windows-cli-launcher.mjs'),
'--arch',
arch,
'--output',
output
],
cwd: root,
stdio: 'inherit',
timeoutMs: null
})
if (result.code !== 0) {
throw new Error(`Windows CLI launcher build for ${arch} failed with exit ${result.code}`)
}
}