Files
orca/config/scripts/package-linux-formats-appimage.mjs
T
Neil 197ea3a3b3 Free PR CI capacity by avoiding repeated setup and real-time test waits (#24355)
* Reduce repeated PR setup and transcript timing waits; add hosted comparisons

* Align parallelism contract with Node-only external rebuild toolchain

* Record hosted coverage and launch package, store, and cancellation comparisons

* Apply hosted Windows setup savings and remove measured test waits

* Keep measured PR package gains and remove completed comparison jobs

* Report measured test counts with precise units
2026-10-01 11:51:43 -07:00

65 lines
2.4 KiB
JavaScript

import { mkdirSync, symlinkSync, writeFileSync } from 'node:fs'
import { createRequire } from 'node:module'
import { dirname, join, resolve } from 'node:path'
import { describeProcessFailure, runProcessSync } from './script-child-process.mjs'
const require = createRequire(import.meta.url)
async function getPinnedTools(version) {
const { getAppImageTools } = require('app-builder-lib/out/toolsets/linux.js')
return getAppImageTools(version, require('builder-util').Arch.x64)
}
export async function preparePrAppImageTools({
directory: requestedDirectory,
configuration = require('../electron-builder-pr-linux.config.cjs'),
getTools = getPinnedTools,
platform = process.platform,
architecture = process.arch
}) {
if (platform !== 'linux' || architecture !== 'x64') {
throw new Error('PR AppImage compression requires a Linux x64 host')
}
if (configuration.toolsets?.appimage !== '1.0.3') {
throw new Error('PR AppImage compression requires pinned AppImage toolset 1.0.3')
}
if (
configuration.compression === 'store' ||
(configuration.appImage?.compression && configuration.appImage.compression !== 'zstd')
) {
throw new Error('PR AppImage compression requires the existing zstd configuration')
}
// Resolve the original override before installing the private, child-only overlay.
const tools = await getTools(configuration.toolsets.appimage)
const version = runProcessSync({
program: tools.mksquashfs,
args: ['-version'],
timeoutMs: 10_000,
maxOutputBytes: 64 * 1024
})
if (
version.code !== 0 ||
version.timedOut ||
version.outputTruncated ||
!/^mksquashfs version 4\.6\.1(?:\s|$)/m.test(version.stdout)
) {
throw new Error(
`PR AppImage compression requires mksquashfs 4.6.1: ${describeProcessFailure(version)}`
)
}
const directory = resolve(requestedDirectory)
mkdirSync(directory)
symlinkSync(tools.desktopFileValidate, join(directory, 'desktop-file-validate'))
symlinkSync(dirname(tools.runtime), join(directory, 'runtimes'))
symlinkSync(dirname(tools.runtimeLibraries), join(directory, 'lib'))
writeFileSync(
join(directory, 'mksquashfs'),
'#!/usr/bin/env bash\nset -euo pipefail\nexec "$ORCA_PR_APPIMAGE_MKSQUASHFS" "$@" -Xcompression-level 3\n',
{ mode: 0o755 }
)
return {
APPIMAGE_TOOLS_PATH: directory,
ORCA_PR_APPIMAGE_MKSQUASHFS: tools.mksquashfs
}
}