feat: add bundled Windows native runtime

This commit is contained in:
reaper
2026-08-26 20:54:58 -05:00
parent bc92db6252
commit c9f832d250
12 changed files with 201 additions and 50 deletions
+54 -16
View File
@@ -21,6 +21,14 @@ function installedRoot(project: NativeProjectDefinition): string {
return project.installedRuntimeRoot ?? runtimeRoot()
}
function runtimeExecutable(project: NativeProjectDefinition, name: string): string {
if (process.platform !== 'win32') return join(installedRoot(project), 'bin', name)
if (name === 'php' || name === 'php-cgi')
return join(installedRoot(project), 'bin', 'php', `${name}.exe`)
if (name === 'nginx') return join(installedRoot(project), 'bin', 'nginx', 'nginx.exe')
return join(installedRoot(project), 'bin', 'mariadb', 'bin', `${name}.exe`)
}
function nativeDirectory(root: string): string {
return join(root, '.aurora', 'native')
}
@@ -109,7 +117,10 @@ http {
}
export function renderNativeAdminerBootstrap(project: NativeProjectDefinition): string {
const adminer = join(installedRoot(project), 'root', 'usr', 'share', 'aurora', 'adminer.php')
const adminer =
process.platform === 'win32'
? join(installedRoot(project), 'tools', 'adminer.php')
: join(installedRoot(project), 'root', 'usr', 'share', 'aurora', 'adminer.php')
return `<?php
// Generated by Aurora Core. This endpoint binds only to the project's loopback server.
?>
@@ -137,8 +148,12 @@ export function renderMariaDbConfig(
installedRuntimeRoot = runtimeRoot()
): string {
const directory = nativeDirectory(project.root)
const basedir =
process.platform === 'win32'
? join(installedRuntimeRoot, 'bin', 'mariadb')
: join(installedRuntimeRoot, 'root', 'usr')
return `[mariadbd]
basedir=${join(installedRuntimeRoot, 'root', 'usr')}
basedir=${basedir}
datadir=${join(directory, 'data', 'mariadb')}
tmpdir=${join(directory, 'tmp')}
bind-address=127.0.0.1
@@ -172,20 +187,30 @@ export async function provisionNativeProject(project: NativeProjectDefinition):
writeFile(
join(directory, 'config', 'mariadb.cnf'),
renderMariaDbConfig(project, installedRoot(project))
)
),
...(process.platform === 'win32'
? [
writeFile(
join(directory, 'config', 'php.ini'),
`extension_dir="${join(installedRoot(project), 'bin', 'php', 'ext')}"\nextension=mysqli\nextension=pdo_mysql\nextension=mbstring\nextension=curl\nextension=openssl\nextension=zip\ndisplay_errors=On\nlog_errors=On\nerror_log="${join(directory, 'logs', 'php.log')}"\n`
)
]
: [])
])
try {
await access(join(directory, 'data', 'mariadb', 'mysql'))
} catch {
await execFileAsync(
join(installedRoot(project), 'bin', 'mariadb-install-db'),
[
'--no-defaults',
`--datadir=${join(directory, 'data', 'mariadb')}`,
`--tmpdir=${join(directory, 'tmp')}`,
'--auth-root-authentication-method=normal',
'--skip-test-db'
],
runtimeExecutable(project, 'mariadb-install-db'),
process.platform === 'win32'
? [`--datadir=${join(directory, 'data', 'mariadb')}`, '--password=']
: [
'--no-defaults',
`--datadir=${join(directory, 'data', 'mariadb')}`,
`--tmpdir=${join(directory, 'tmp')}`,
'--auth-root-authentication-method=normal',
'--skip-test-db'
],
{ cwd: project.root, maxBuffer: 16 * 1024 * 1024 }
)
}
@@ -202,19 +227,32 @@ export function nativeServiceSpecs(project: NativeProjectDefinition): NativeServ
return [
{
...common('database'),
command: join(installedRoot(project), 'bin', 'mariadbd'),
args: [`--defaults-file=${join(directory, 'config', 'mariadb.cnf')}`],
command: runtimeExecutable(project, 'mariadbd'),
args: [
`--defaults-file=${join(directory, 'config', 'mariadb.cnf')}`,
...(process.platform === 'win32' ? ['--console'] : [])
],
ready: { port: project.ports.database, timeoutMs: 30000 }
},
{
...common('php'),
command: join(installedRoot(project), 'bin', 'php-fpm'),
args: ['--nodaemonize', '--fpm-config', join(directory, 'config', 'php-fpm.conf')],
command: runtimeExecutable(project, process.platform === 'win32' ? 'php-cgi' : 'php-fpm'),
args:
process.platform === 'win32'
? ['-b', `127.0.0.1:${project.ports.php}`]
: ['--nodaemonize', '--fpm-config', join(directory, 'config', 'php-fpm.conf')],
env:
process.platform === 'win32'
? {
PHPRC: join(directory, 'config', 'php.ini'),
PHP_FCGI_MAX_REQUESTS: '0'
}
: undefined,
ready: { port: project.ports.php }
},
{
...common('web'),
command: join(installedRoot(project), 'bin', 'nginx'),
command: runtimeExecutable(project, 'nginx'),
args: ['-c', join(directory, 'config', 'nginx.conf'), '-p', `${directory}/`],
ready: { port: project.ports.http }
}