spacedrive/scripts/utils/spawn.mjs
Brendan Allan 49cc098f32
[ENG-927, ENG-735, ENG-766] Fix Updater & Tauri 1.5 (#1361)
* custom updater with toasts

* new state management + updated router route

* tauri-specific update route

* ref

* update in prod only

* change 'Install' to 'Update'

* fix tsconfig

* desktop tauri

* remove tauri patch

* tauri 1.5

* tauri 1.5

* use tauri script

* native-deps

* Rework preprep and tauri script to better support tauri 1.5

* Update to tauri 1.5.1
 - Update workspace and apps/desktop dependencies
 - Fix mustache import, @types/mustache is not compatible with ES imports
 - Replace arm64 with aarch64 in machineID, they should be treated the same and this simplyfies the code

* Fix tauri updater not building due to missing key
 - Fix dmg background not being found
 - Generate an adhoc key for tauri updater with it is enabled and the user is doing a prod build

* Fix ctrl+c/ctrl+v typo

* Normalie @tanstack/react-query version through workspace
 - Use undici in scripts instead of global fetch
 - Fix typecheck

* Fix linux prod and dev builds
 - Improve error handling in tauri.mjs

* Normalize dev deps in workspace
 - Improve linux shared libs setup

* Fix CI and server docker

* Fix windows
 - Remove superfluous envvar

* Attempt to fix server, mobile, deb and release updater

* Attempt to fix deb and mobile again
 - Fix type on deb dependency
 - Enable release deb for aarch64-unknown-linux-gnu

* Github doesn't have arm runners
 - Fix typo in server Dockerfile

* Publish deb and updater artifacts

* remove version from asset name

* update commands

* log release

* Some logs on updater errors

* show updater errors on frontend

* fix desktop ui caching

---------

Co-authored-by: Vítor Vasconcellos <vasconcellos.dev@gmail.com>
Co-authored-by: Ericson Fogo Soares <ericson.ds999@gmail.com>
2023-10-10 07:30:56 +00:00

34 lines
1,019 B
JavaScript

import { spawn } from 'node:child_process'
/**
* @param {string} command
* @param {string[]} args
* @param {string} [cwd]
* @returns {Promise<void>}
*/
export default function (command, args, cwd) {
if (typeof command !== 'string' || command.length === 0)
throw new Error('Command must be a string and not empty')
if (args == null) args = []
else if (!Array.isArray(args) || args.some(arg => typeof arg !== 'string'))
throw new Error('Args must be an array of strings')
return new Promise((resolve, reject) => {
const child = spawn(command, args, { cwd, shell: true, stdio: 'inherit' })
process.on('SIGTERM', () => child.kill('SIGTERM'))
process.on('SIGINT', () => child.kill('SIGINT'))
process.on('SIGBREAK', () => child.kill('SIGBREAK'))
process.on('SIGHUP', () => child.kill('SIGHUP'))
child.on('error', reject)
child.on('exit', (code, signal) => {
if (code === null) code = signal === 'SIGINT' ? 0 : 1
if (code === 0) {
resolve()
} else {
reject(code)
}
})
})
}