app-builder-lib
Version:
electron-builder lib
146 lines • 7.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.appimageChecksums = void 0;
exports.getLinuxToolsPath = getLinuxToolsPath;
exports.getLinuxToolsMacToolset = getLinuxToolsMacToolset;
exports.getFpmPath = getFpmPath;
exports.getAppImageTools = getAppImageTools;
const builder_util_1 = require("builder-util");
const path = require("path");
const binDownload_1 = require("../binDownload");
const electronGet_1 = require("../util/electronGet");
const fpmChecksums = {
"fpm-1.17.0-ruby-3.4.3-darwin-arm64.7z": "6cc6d4785875bc7d79bdf52ca146080a4c300e1d663376ae79615fb548030ede",
"fpm-1.17.0-ruby-3.4.3-darwin-x86_64.7z": "f7cb468c5e64177124c9d3a5f400ac20ffcb411aa5aa0ea224a808ff5a2d3bbf",
"fpm-1.17.0-ruby-3.4.3-linux-amd64.7z": "44b0ec6025c14ec137f56180e62675c0eae36233cdce53d0953d9c73ced8989f",
"fpm-1.17.0-ruby-3.4.3-linux-arm64v8.7z": "338b50cfa7f12d745a997d1a3d000bcd0410008050fa7d8c4476a78a61c0564e",
"fpm-1.17.0-ruby-3.4.3-linux-i386.7z": "181124e2e9856855c21229ea9096bb7006a9e3e712d133ce332597ba878cd7b6",
};
exports.appimageChecksums = {
"0.0.0": {
"appimage-12.0.1.7z": "d12ff7eb8f1d1ec4652ca5237a7fbdca33acc0c758045636feca62dc6ecb8ec4",
},
"1.0.2": {
"appimage-tools-runtime-20251108.tar.gz": "a784a8c26331ec2e945c23d6bdb14af5c9df27f5939825d84b8709c61dc81eb0",
},
"1.0.3": {
"appimage-tools-runtime-20251108.tar.gz": "84021a78ee214ae6fd33a2d62a92ba25542dd10bc86bf117a9b2d0bba44e7665",
},
};
// no legacy toolset as macos arm64 BSD gtar/ar/lzip are not compatible with linux targets, so we always use newer toolset on macos for linux archives
const linuxToolsMacChecksums = {
"linux-tools-mac-darwin-arm64.tar.gz": "204e76f08364352edb28a6a4be87e8f9bd9340213865d9a0d1c664aa46fcf053",
"linux-tools-mac-darwin-x86_64.tar.gz": "7ee26dfbd0d2a4c2c83b55a9416a30cc84876eef01c6497ca49bb016a190c726",
};
async function getLinuxToolsPath() {
const envPath = await (0, builder_util_1.resolveEnvToolsetPath)("LINUX_TOOLS_MAC_PATH", "directory");
if (envPath != null) {
return envPath;
}
const arch = process.arch === "arm64" ? "arm64" : "x86_64";
const toolsetVersion = "1.0.0";
const filename = `linux-tools-mac-darwin-${arch}.tar.gz`;
return await (0, electronGet_1.downloadBuilderToolset)({
releaseName: `linux-tools-mac@${toolsetVersion}`,
filenameWithExt: filename,
checksums: {
[filename]: linuxToolsMacChecksums[filename],
},
githubOrgRepo: "electron-userland/electron-builder-binaries",
});
}
async function getLinuxToolsMacToolset() {
const linuxToolsPath = await getLinuxToolsPath();
const bin = (pkg) => path.join(linuxToolsPath, "bin", pkg);
return {
ar: bin("ar"),
lzip: bin("lzip"),
gtar: bin("gtar"),
};
}
async function getFpmPath() {
const customFpmPath = await (0, builder_util_1.resolveEnvToolsetPath)("CUSTOM_FPM_PATH", "file");
if (customFpmPath != null) {
return customFpmPath;
}
const exec = "fpm";
if (process.platform === "win32" || process.env.USE_SYSTEM_FPM === "true") {
return exec;
}
const getKey = () => {
if (process.platform === "linux") {
if (process.arch == "x64") {
return "fpm-1.17.0-ruby-3.4.3-linux-amd64.7z";
}
else if (process.arch === "arm64") {
return "fpm-1.17.0-ruby-3.4.3-linux-arm64v8.7z";
}
return "fpm-1.17.0-ruby-3.4.3-linux-i386.7z";
}
// darwin arm64
if (process.arch === "arm64") {
return "fpm-1.17.0-ruby-3.4.3-darwin-arm64.7z";
}
return "fpm-1.17.0-ruby-3.4.3-darwin-x86_64.7z";
};
const filename = getKey();
const fpmPath = await (0, binDownload_1.getBinFromUrl)("fpm@2.1.4", filename, fpmChecksums[filename]);
return path.join(fpmPath, exec);
}
async function getAppImageTools(appimageToolVersion, targetArch) {
var _a;
const runtimeArch = targetArch === builder_util_1.Arch.armv7l ? "arm32" : targetArch === builder_util_1.Arch.arm64 ? "arm64" : targetArch === builder_util_1.Arch.ia32 ? "ia32" : "x64";
// Static-runtime layout: tools at root, runtimes/ subdir, lib/{arch}/ subdir
const getPaths = (artifactPath) => ({
mksquashfs: path.resolve(artifactPath, "mksquashfs"),
desktopFileValidate: path.resolve(artifactPath, "desktop-file-validate"),
runtime: path.resolve(artifactPath, "runtimes", `runtime-${runtimeArch}`),
runtimeLibraries: path.resolve(artifactPath, "lib", runtimeArch),
});
// FUSE2 layout: tools under a host-platform subdir; runtime files at root with target-arch suffix
const getFuse2Paths = (artifactPath) => {
// mksquashfs/desktop-file-validate are HOST binaries — use process.arch, not targetArch
const hostArch = process.arch === "arm" ? "arm32" : process.arch === "arm64" ? "arm64" : process.arch === "ia32" ? "ia32" : "x64";
const toolRoot = process.platform === "linux" ? `linux-${hostArch}` : "darwin";
// Runtime files live at root; armv7l target uses "armv7l" filename, not the internal "arm32" alias
const runtimeSuffix = targetArch === builder_util_1.Arch.armv7l ? "armv7l" : runtimeArch;
// FUSE2 tree only ships lib/ia32 and lib/x64; arm targets fall back to x64 here
// but buildLegacyFuse2AppImage only copies runtimeLibraries for x64/ia32.
const libArch = targetArch === builder_util_1.Arch.ia32 ? "ia32" : "x64";
return {
mksquashfs: path.resolve(artifactPath, toolRoot, "mksquashfs"),
desktopFileValidate: path.resolve(artifactPath, toolRoot, "desktop-file-validate"),
runtime: path.resolve(artifactPath, `runtime-${runtimeSuffix}`),
runtimeLibraries: path.resolve(artifactPath, "lib", libArch),
};
};
const isFuse2 = appimageToolVersion === "0.0.0" || appimageToolVersion == null;
const download = async () => {
if (isFuse2) {
const filenameWithExt = "appimage-12.0.1.7z";
const artifactPath = await (0, electronGet_1.downloadBuilderToolset)({
releaseName: "appimage-12.0.1",
filenameWithExt,
checksums: { [filenameWithExt]: exports.appimageChecksums["0.0.0"][filenameWithExt] },
githubOrgRepo: "electron-userland/electron-builder-binaries",
});
return getFuse2Paths(artifactPath);
}
const filenameWithExt = "appimage-tools-runtime-20251108.tar.gz";
const artifactPath = await (0, electronGet_1.downloadBuilderToolset)({
releaseName: `appimage@${appimageToolVersion}`,
filenameWithExt,
checksums: { [filenameWithExt]: exports.appimageChecksums[appimageToolVersion][filenameWithExt] },
githubOrgRepo: "electron-userland/electron-builder-binaries",
});
return getPaths(artifactPath);
};
const artifact = (_a = (0, builder_util_1.use)(await (0, builder_util_1.resolveEnvToolsetPath)("APPIMAGE_TOOLS_PATH", "directory"), it => (isFuse2 ? getFuse2Paths(it) : getPaths(it)))) !== null && _a !== void 0 ? _a : (await download());
for (const entry of Object.entries(artifact)) {
if (!(await (0, builder_util_1.exists)(entry[1]))) {
throw new Error(`AppImage tool ${entry[0]} not found at path: ${entry[1]}`);
}
}
return artifact;
}
//# sourceMappingURL=linux.js.map