11import { mkdir , rm , cp , chmod , writeFile } from 'node:fs/promises'
22import { basename , dirname , join , resolve } from 'node:path'
3- import { fileURLToPath } from 'node:url'
3+ import { fileURLToPath , pathToFileURL } from 'node:url'
44import { spawnSync } from 'node:child_process'
55
6- const rootDir = resolve ( dirname ( fileURLToPath ( import . meta. url ) ) , '..' )
6+ export const rootDir = resolve ( dirname ( fileURLToPath ( import . meta. url ) ) , '..' )
77const appName = 'log-search'
88const version = ( process . env . VERSION || '0.1.0' ) . replace ( / ^ v / , '' )
99const platform = process . env . RELEASE_PLATFORM || process . platform
1010const arch = process . env . RELEASE_ARCH || normalizedArch ( process . arch )
1111const packageSuffix = process . env . RELEASE_PACKAGE_SUFFIX || `${ platform } -${ arch } `
12+ const cargoTarget = process . env . CARGO_BUILD_TARGET || ''
1213const distDir = join ( rootDir , 'dist' )
1314const releaseName = `${ appName } _${ version } _${ packageSuffix } `
1415const releaseDir = join ( distDir , releaseName )
@@ -31,6 +32,20 @@ function run(command, args, options = {}) {
3132 }
3233}
3334
35+ export function cargoBuildArgs ( target = cargoTarget ) {
36+ const args = [ 'build' , '--release' ]
37+ if ( target ) {
38+ args . push ( '--target' , target )
39+ }
40+ return args
41+ }
42+
43+ export function cargoReleaseDir ( target = cargoTarget ) {
44+ return target
45+ ? join ( rootDir , 'backend' , 'target' , target , 'release' )
46+ : join ( rootDir , 'backend' , 'target' , 'release' )
47+ }
48+
3449async function copyIfExists ( source , target ) {
3550 try {
3651 await cp ( source , target , { recursive : true } )
@@ -46,11 +61,11 @@ async function build() {
4661
4762 run ( 'npm' , [ 'ci' ] , { cwd : join ( rootDir , 'frontend' ) } )
4863 run ( 'npm' , [ 'run' , 'build' ] , { cwd : join ( rootDir , 'frontend' ) } )
49- run ( 'cargo' , [ 'build' , '--release' ] , { cwd : join ( rootDir , 'backend' ) } )
64+ run ( 'cargo' , cargoBuildArgs ( ) , { cwd : join ( rootDir , 'backend' ) } )
5065
5166 const binaryName = platform === 'windows' ? `${ appName } .exe` : appName
5267 const builtBinaryName = platform === 'windows' ? 'backend.exe' : 'backend'
53- await cp ( join ( rootDir , 'backend' , 'target' , 'release' , builtBinaryName ) , join ( releaseDir , binaryName ) )
68+ await cp ( join ( cargoReleaseDir ( ) , builtBinaryName ) , join ( releaseDir , binaryName ) )
5469 await cp ( join ( rootDir , 'frontend' , 'dist' ) , join ( releaseDir , 'frontend' ) , { recursive : true } )
5570 await cp ( join ( rootDir , 'config.example.toml' ) , join ( releaseDir , 'config.toml' ) )
5671 await cp ( join ( rootDir , 'packaging' , 'README.txt' ) , join ( releaseDir , 'README.txt' ) )
@@ -116,7 +131,9 @@ async function createTarGzArchive() {
116131 return archivePath
117132}
118133
119- build ( ) . catch ( ( error ) => {
120- console . error ( error )
121- process . exit ( 1 )
122- } )
134+ if ( process . argv [ 1 ] && import . meta. url === pathToFileURL ( resolve ( process . argv [ 1 ] ) ) . href ) {
135+ build ( ) . catch ( ( error ) => {
136+ console . error ( error )
137+ process . exit ( 1 )
138+ } )
139+ }
0 commit comments