SEO chat gippity style

This commit is contained in:
Heidi
2026-05-30 01:14:09 +01:00
parent 44b6e781da
commit f9efd77844
+75 -18
View File
@@ -125,25 +125,69 @@ function executableExists(filePath) {
}
}
function cargoCommand() {
if (process.env.CARGO && executableExists(process.env.CARGO)) return process.env.CARGO
const homeCargo = path.join(os.homedir(), '.cargo', 'bin', process.platform === 'win32' ? 'cargo.exe' : 'cargo')
if (executableExists(homeCargo)) return homeCargo
for (const candidate of [
'/usr/local/cargo/bin/cargo',
'/usr/local/bin/cargo',
'/usr/bin/cargo',
]) {
if (executableExists(candidate)) return candidate
}
function cargoExecutableName() {
return process.platform === 'win32' ? 'cargo.exe' : 'cargo'
}
function pathDirectories() {
const pathValue = process.env.PATH || process.env.Path || ''
return pathValue.split(path.delimiter).filter(Boolean)
}
function cargoCandidates() {
const executableName = cargoExecutableName()
const candidates = []
if (process.env.CARGO) {
candidates.push(process.env.CARGO)
}
if (process.env.CARGO_HOME) {
candidates.push(path.join(process.env.CARGO_HOME, 'bin', executableName))
}
candidates.push(path.join(os.homedir(), '.cargo', 'bin', executableName))
if (process.platform !== 'win32') {
try {
for (const homeEntry of fs.readdirSync('/home', { withFileTypes: true })) {
if (homeEntry.isDirectory()) {
candidates.push(path.join('/home', homeEntry.name, '.cargo', 'bin', executableName))
}
}
} catch {
// Some hosts do not expose /home to this process; the fixed paths below still cover system installs.
}
candidates.push(
'/root/.cargo/bin/cargo',
'/usr/local/cargo/bin/cargo',
'/usr/local/bin/cargo',
'/usr/bin/cargo',
)
}
for (const directory of pathDirectories()) {
candidates.push(path.join(directory, executableName))
}
return [...new Set(candidates)]
}
function cargoCommand() {
for (const candidate of cargoCandidates()) {
if (executableExists(candidate)) return candidate
}
return null
}
function commandFor(command) {
if (command === 'cargo') return cargoCommand()
if (command === 'cargo') {
const resolvedCommand = cargoCommand()
if (!resolvedCommand) throw new Error(commandNotFoundMessage(command))
return resolvedCommand
}
if (process.platform !== 'win32') return command
if (command === 'npm') return 'npm.cmd'
if (command === 'pm2') return 'pm2.cmd'
@@ -155,7 +199,7 @@ function commandNotFoundMessage(command) {
return [
'cargo was not found by the deploy webhook',
'Install Rust on the host, or set CARGO to the absolute cargo binary path',
`Checked PATH plus ${path.join(os.homedir(), '.cargo', 'bin', process.platform === 'win32' ? 'cargo.exe' : 'cargo')}`,
`Checked ${cargoCandidates().join(', ')}`,
].join('. ')
}
@@ -164,7 +208,13 @@ function run(command, args, options = {}) {
const label = [command, ...args].join(' ')
console.log(`deploy step started: ${label}`)
const resolvedCommand = commandFor(command)
let resolvedCommand
try {
resolvedCommand = commandFor(command)
} catch (error) {
reject(error)
return
}
const child = spawn(resolvedCommand, args, {
cwd: __dirname,
env: { ...process.env, ...options.env },
@@ -193,7 +243,14 @@ function run(command, args, options = {}) {
function runCapture(command, args, options = {}) {
return new Promise((resolve, reject) => {
const label = [command, ...args].join(' ')
const child = spawn(commandFor(command), args, {
let resolvedCommand
try {
resolvedCommand = commandFor(command)
} catch (error) {
reject(error)
return
}
const child = spawn(resolvedCommand, args, {
cwd: __dirname,
env: { ...process.env, ...options.env },
shell: process.platform === 'win32',