app-builder-lib 26.12.0 → 26.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/binDownload.js +32 -5
- package/out/binDownload.js.map +1 -1
- package/out/codeSign/macCodeSign.js +2 -2
- package/out/codeSign/macCodeSign.js.map +1 -1
- package/out/electron/ElectronFramework.js +4 -1
- package/out/electron/ElectronFramework.js.map +1 -1
- package/out/electron/electronVersion.js +9 -4
- package/out/electron/electronVersion.js.map +1 -1
- package/out/fileTransformer.js +2 -1
- package/out/fileTransformer.js.map +1 -1
- package/out/forge-maker.js +6 -2
- package/out/forge-maker.js.map +1 -1
- package/out/mac/MacTargetHelper.d.ts +24 -0
- package/out/mac/MacTargetHelper.js +267 -0
- package/out/mac/MacTargetHelper.js.map +1 -0
- package/out/macPackager.d.ts +21 -7
- package/out/macPackager.js +218 -346
- package/out/macPackager.js.map +1 -1
- package/out/packager.js +4 -4
- package/out/packager.js.map +1 -1
- package/out/platformPackager.js +8 -4
- package/out/platformPackager.js.map +1 -1
- package/out/targets/AppxTarget.js +2 -1
- package/out/targets/AppxTarget.js.map +1 -1
- package/out/targets/FlatpakTarget.js +2 -4
- package/out/targets/FlatpakTarget.js.map +1 -1
- package/out/targets/FpmTarget.js +30 -6
- package/out/targets/FpmTarget.js.map +1 -1
- package/out/targets/LinuxTargetHelper.d.ts +1 -1
- package/out/targets/LinuxTargetHelper.js +69 -11
- package/out/targets/LinuxTargetHelper.js.map +1 -1
- package/out/targets/MsiTarget.js +1 -1
- package/out/targets/MsiTarget.js.map +1 -1
- package/out/targets/MsiWrappedTarget.js +1 -1
- package/out/targets/MsiWrappedTarget.js.map +1 -1
- package/out/targets/appimage/AppImageTarget.js +2 -1
- package/out/targets/appimage/AppImageTarget.js.map +1 -1
- package/out/targets/nsis/NsisTarget.js +14 -4
- package/out/targets/nsis/NsisTarget.js.map +1 -1
- package/out/targets/nsis/nsisScriptGenerator.js +2 -3
- package/out/targets/nsis/nsisScriptGenerator.js.map +1 -1
- package/out/targets/pkg.js +1 -1
- package/out/targets/pkg.js.map +1 -1
- package/out/targets/snap/SnapTarget.js +2 -1
- package/out/targets/snap/SnapTarget.js.map +1 -1
- package/out/targets/snap/core24.js +5 -4
- package/out/targets/snap/core24.js.map +1 -1
- package/out/targets/snap/coreLegacy.js +5 -5
- package/out/targets/snap/coreLegacy.js.map +1 -1
- package/out/targets/snap/snapcraftBuilder.js +4 -3
- package/out/targets/snap/snapcraftBuilder.js.map +1 -1
- package/out/toolsets/linux.js +3 -3
- package/out/toolsets/linux.js.map +1 -1
- package/out/toolsets/windows.js +7 -17
- package/out/toolsets/windows.js.map +1 -1
- package/out/util/bundledTool.js +2 -1
- package/out/util/bundledTool.js.map +1 -1
- package/out/util/config/config.js +4 -3
- package/out/util/config/config.js.map +1 -1
- package/out/util/electronGet.d.ts +2 -0
- package/out/util/electronGet.js +7 -1
- package/out/util/electronGet.js.map +1 -1
- package/out/util/packageMetadata.js +2 -1
- package/out/util/packageMetadata.js.map +1 -1
- package/out/util/yarn.js +1 -1
- package/out/util/yarn.js.map +1 -1
- package/out/version.d.ts +1 -1
- package/out/version.js +1 -1
- package/out/version.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core24.js","sourceRoot":"","sources":["../../../src/targets/snap/core24.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, archFromString, copyDir, deepAssign, InvalidConfigurationError, isValidKey, log, removeNullish, toLinuxArchString } from \"builder-util\"\nimport { copy, mkdir, readdir, writeFile } from \"fs-extra\"\nimport * as path from \"path\"\nimport { PlugDescriptor, SlotDescriptor, SnapOptions24, SnapcraftOptions } from \"../../options/SnapOptions\"\nimport { SnapCore } from \"./SnapTarget\"\nimport { App, Part, SnapcraftYAML } from \"./snapcraft\"\nimport { buildSnap, DEFAULT_STAGE_PACKAGES, SNAPCRAFT_YAML_OPTIONS } from \"./snapcraftBuilder\"\nimport * as yaml from \"js-yaml\"\nimport { Nullish } from \"builder-util-runtime\"\n\n/** Snap build strategy for core24 — generates a native snapcraft.yaml and invokes the snapcraft CLI. */\nexport class SnapCore24 extends SnapCore<SnapOptions24> {\n // browser-support is intentionally absent here; it is auto-injected in mapSnapOptionsToSnapcraftYAML\n // when the user has not provided custom plugs, so it always lands in both root plugs and app plugs.\n defaultPlugs = [\"desktop\", \"desktop-legacy\", \"home\", \"x11\", \"wayland\", \"unity7\", \"network\", \"gsettings\", \"audio-playback\", \"pulseaudio\", \"opengl\"]\n\n // Snap file hierarchy:\n // - snap/gui/ gets automatically copied to meta/gui/ in the final snap\n // - Desktop files in meta/gui/ are used for menu integration\n readonly configRelativePath = \"snap\"\n readonly guiRelativePath = path.join(this.configRelativePath, \"gui\")\n\n async createDescriptor(arch: Arch): Promise<SnapcraftYAML> {\n return await this.mapSnapOptionsToSnapcraftYAML(arch)\n }\n\n private isHostMode(): boolean {\n return this.options.useDestructiveMode === true\n }\n\n /** Writes the snapcraft.yaml, stages app files, then invokes `buildSnap()` to run the actual snapcraft build. */\n async buildSnap(params: { snap: SnapcraftYAML; appOutDir: string; stageDir: string; snapArch: Arch; artifactPath: string }): Promise<void> {\n const { snap, appOutDir, stageDir, artifactPath } = params\n\n const snapDirResolved = path.resolve(stageDir, this.configRelativePath)\n const snapcraftYamlPath = path.join(snapDirResolved, \"snapcraft.yaml\")\n\n // Create snap/gui directory for desktop files and icons\n // Snapcraft will automatically copy snap/gui/ contents to meta/gui/ in the final snap\n const guiOutput = path.resolve(stageDir, this.guiRelativePath)\n await mkdir(guiOutput, { recursive: true })\n\n const yamlContent = yaml.dump(snap, SNAPCRAFT_YAML_OPTIONS)\n await writeFile(snapcraftYamlPath, yamlContent, \"utf8\")\n log.debug(snap, \"generated snapcraft.yaml\")\n\n // Copy icon to snap/gui/ directory\n // Snapcraft will automatically copy this to meta/gui/ in the final snap\n const desktopExtraProps: Record<string, string> = {}\n const icon = this.helper.maxIconPath\n if (icon) {\n const iconFileName = `${snap.name}${path.extname(icon)}`\n await copy(icon, path.join(guiOutput, iconFileName))\n // Icon path will be available at ${SNAP}/meta/gui/<icon-file> after installation\n desktopExtraProps.Icon = `\\${SNAP}/meta/gui/${iconFileName}`\n }\n\n // Create desktop file in snap/gui/ directory\n // Snapcraft will automatically copy this to meta/gui/ in the final snap\n const desktopFilePath = path.join(guiOutput, `${snap.name}.desktop`)\n await this.helper.writeDesktopEntry(this.options, this.packager.executableName + \" %U\", desktopFilePath, desktopExtraProps)\n\n // Copy app files to the project root `app` directory so `source: app`\n // in the generated `snapcraft.yaml` (which is under `snap/`) can be\n // resolved by snapcraft running in the build environment.\n const appDir = path.resolve(stageDir, \"app\")\n if (path.resolve(appDir) !== path.resolve(appOutDir)) {\n log.debug({ to: log.filePath(appDir), from: log.filePath(appOutDir) }, \"copying app files to project root app directory\")\n await copyDir(appOutDir, appDir)\n }\n\n // Auto-generate `organize` mapping for the app part so top-level helper\n // binaries and resources are placed under `app/` inside the snap. Update\n // the already-written `snapcraft.yaml` so the build sees the mapping.\n try {\n const appPart = snap.parts[snap.name]\n if (appPart) {\n const entries = (await readdir(appOutDir)).sort()\n const organize: Record<string, string> = (appPart.organize as Record<string, string>) || {}\n for (const entry of entries) {\n if (!entry) {\n continue\n }\n if (organize[entry]) {\n continue\n }\n organize[entry] = `app/${entry}`\n }\n appPart.organize = organize\n\n const updatedYaml = yaml.dump(snap, SNAPCRAFT_YAML_OPTIONS)\n await writeFile(snapcraftYamlPath, updatedYaml, \"utf8\")\n log.debug({ organize }, \"updated snapcraft.yaml with organize mapping\")\n }\n } catch (e: any) {\n log.warn({ error: e.message }, \"failed to generate and update organize mapping\")\n }\n\n const buildMode = {\n useLXD: this.options.useLXD === true,\n useMultipass: this.options.useMultipass === true,\n useDestructiveMode: this.options.useDestructiveMode === true,\n remoteBuild: this.options.remoteBuild || undefined,\n }\n\n if (this.packager.packagerOptions.effectiveOptionComputed != null) {\n const shouldSkip = await this.packager.packagerOptions.effectiveOptionComputed({ snap, ...buildMode })\n if (shouldSkip) {\n return\n }\n }\n\n const rootOptions = this.packager.config.snapcraft as SnapcraftOptions | null | undefined\n await buildSnap({\n snapcraftConfig: snap,\n artifactPath,\n stageDir,\n packager: this.packager,\n cscLink: rootOptions?.cscLink,\n ...buildMode,\n })\n }\n\n /** Converts `SnapOptions24` into a fully resolved `SnapcraftYAML` descriptor for the given architecture. */\n async mapSnapOptionsToSnapcraftYAML(arch: Arch): Promise<SnapcraftYAML> {\n const appInfo = this.packager.appInfo\n const appName = this.packager.executableName.toLowerCase()\n const options = this.options\n\n // Default to [\"gnome\"] in normal builds; no extensions in host/destructive-mode (where the\n // gnome extension is incompatible). Throw if the user explicitly includes \"gnome\" in host mode.\n const hostMode = this.isHostMode()\n const extensionsList: string[] = options.extensions != null ? [...options.extensions] : hostMode ? [] : [\"gnome\"]\n if (hostMode && extensionsList.includes(\"gnome\")) {\n throw new InvalidConfigurationError(\n `The \"gnome\" snapcraft extension is incompatible with host/destructive-mode builds.\\n` +\n `In this mode snapcraft cannot resolve the extension's command-chain source ` +\n `(/usr/share/snapcraft/extensions/desktop/command-chain) and will fail.\\n\\n` +\n `To resolve this, choose one of:\\n` +\n ` 1. Remove \"gnome\" from snapcraft.core24.extensions (or set it to []) and add any\\n` +\n ` required stage-packages manually.\\n` +\n ` 2. Switch to an isolated build environment by setting snapcraft.core24.useLXD: true\\n` +\n ` or snapcraft.core24.useMultipass: true instead of useDestructiveMode.\\n\\n` +\n `See: https://snapcraft.io/docs/gnome-extension`\n )\n }\n const resolvedExtensions = extensionsList.length > 0 ? extensionsList : undefined\n const useGnomeExtension = extensionsList.includes(\"gnome\")\n\n // Create the app part\n const appPart: Part = {\n plugin: \"dump\",\n source: \"app\",\n \"build-packages\": options.buildPackages?.length ? options.buildPackages : undefined,\n \"stage-packages\": this.expandDefaultsInArray(options.stagePackages, DEFAULT_STAGE_PACKAGES),\n after: this.expandDefaultsInArray(options.after, []),\n stage: options.appPartStage?.length ? options.appPartStage : undefined,\n }\n\n // Process plugs and slots\n // When using GNOME extension, we don't need to manually configure content snaps\n // The extension will handle: gnome-46-2404, gtk-3-themes, icon-themes, sound-themes\n let rootPlugs: Record<string, any> | undefined\n let appPlugs: string[] | undefined\n\n if (useGnomeExtension) {\n // With GNOME extension, only process user-provided custom plugs\n const result = options.plugs ? this.processPlugOrSlots(options.plugs) : { root: undefined, app: undefined }\n rootPlugs = result.root\n // Extension automatically adds common plugs, so we only add custom ones\n appPlugs = result.app\n } else {\n // Without GNOME extension, we need manual content snaps\n const defaultRootPlugs: Record<string, any> = {\n \"gtk-3-themes\": {\n interface: \"content\",\n target: \"$SNAP/data-dir/themes\",\n \"default-provider\": \"gtk-common-themes\",\n },\n \"icon-themes\": {\n interface: \"content\",\n target: \"$SNAP/data-dir/icons\",\n \"default-provider\": \"gtk-common-themes\",\n },\n \"sound-themes\": {\n interface: \"content\",\n target: \"$SNAP/data-dir/sounds\",\n \"default-provider\": \"gtk-common-themes\",\n },\n \"gnome-46-2404\": {\n interface: \"content\",\n target: \"$SNAP/gnome-platform\",\n \"default-provider\": \"gnome-46-2404\",\n },\n \"gpu-2404\": {\n interface: \"content\",\n target: \"$SNAP/gpu-2404\",\n \"default-provider\": \"mesa-2404\",\n },\n }\n\n const result = options.plugs\n ? this.processPlugOrSlots(options.plugs)\n : hostMode\n ? { root: undefined, app: this.defaultPlugs }\n : {\n root: defaultRootPlugs,\n app: this.defaultPlugs,\n }\n rootPlugs = result.root\n appPlugs = result.app\n }\n\n // Always add browser-support with allow-sandbox so Chromium's internal sandbox\n // can create user namespaces under strict confinement. Without allow-sandbox: true\n // the app crashes immediately with \"FATAL: Permission denied (13)\" in credentials.cc.\n // Skip the injection only when the user has explicitly provided their own plugs\n // (they are responsible for including browser-support in that case).\n if (!options.plugs) {\n rootPlugs = { ...rootPlugs, \"browser-support\": { interface: \"browser-support\", \"allow-sandbox\": true } }\n if (!appPlugs?.includes(\"browser-support\")) {\n appPlugs = [...(appPlugs ?? []), \"browser-support\"]\n }\n }\n\n const { root: rootSlots, app: appSlots } = options.slots ? this.processPlugOrSlots(options.slots) : { root: undefined, app: undefined }\n\n // Build the effective arg list for the snap command.\n // Start with any user-supplied executableArgs, then conditionally add --no-sandbox\n // if browser-support with allow-sandbox:true is not present in the resolved plugs\n // (mirrors the same logic in SnapCoreLegacy.buildSnap).\n const extraArgs: string[] = [...(this.options.executableArgs ?? [])]\n if (this.options.forceX11 === true) {\n if (!extraArgs.includes(\"--ozone-platform=x11\")) {\n extraArgs.push(\"--ozone-platform=x11\")\n }\n }\n if (this.helper.isElectronVersionGreaterOrEqualThan(\"5.0.0\") && !this.isBrowserSandboxAllowed(rootPlugs)) {\n if (!extraArgs.includes(\"--no-sandbox\")) {\n extraArgs.push(\"--no-sandbox\")\n }\n }\n const commandSuffix = extraArgs.length > 0 ? ` ${extraArgs.join(\" \")}` : \"\"\n\n // Create the app configuration\n const app: App = {\n command: `app/${this.packager.executableName}${commandSuffix}`,\n \"command-chain\": undefined, // explicitly undefined so removeNullish strips it; extensions supply their own command-chain\n plugs: appPlugs,\n slots: appSlots,\n autostart: options.autoStart ? `${appName}.desktop` : undefined,\n desktop: `meta/gui/${appName}.desktop`,\n extensions: resolvedExtensions,\n }\n\n // Icon path — build-time relative path so snapcraft can find the file in snap/gui/\n await this.helper.icons\n const iconPath = this.helper.maxIconPath != null ? `snap/gui/${appName}${path.extname(this.helper.maxIconPath)}` : undefined\n\n // Process hooks if configured\n const hooksConfig = options.hooks\n const hooks = hooksConfig ? await this.processHooks(hooksConfig) : undefined\n\n // Parts configuration - the extension automatically adds a gnome/sdk part\n // Don't manually add desktop-launch when using the extension\n const parts: Record<string, Part> = {\n [appName]: appPart,\n }\n\n // Note: `organize` will be generated later in `buildSnap` based on the\n // actual contents of the built app directory so helper binaries and\n // resources are automatically moved under `app/` in the snap.\n\n // Build the snapcraft configuration\n const snapcraft: SnapcraftYAML = {\n // Required fields\n name: appName,\n base: \"core24\",\n confinement: options.confinement || \"strict\",\n parts: parts,\n\n // Architecture/Platform — only needed for cross-compilation; snapcraft 8\n // defaults to host arch and snapcraft 7 rejects this field entirely.\n ...(arch !== archFromString(process.arch)\n ? {\n platforms: {\n [toLinuxArchString(arch, \"snap\")]: {\n \"build-for\": toLinuxArchString(arch, \"snap\"),\n \"build-on\": toLinuxArchString(archFromString(process.arch), \"snap\"),\n },\n },\n }\n : {}),\n\n // Metadata - with fallbacks from appInfo\n version: appInfo.version,\n summary: options.summary || appInfo.productName,\n description: this.helper.getDescription(options),\n grade: options.grade || \"stable\",\n title: options.title || appInfo.productName,\n icon: iconPath,\n\n // Build configuration\n compression: options.compression || undefined,\n assumes: this.normalizeAssumesList(options.assumes),\n\n // Environment\n environment: this.buildEnvironment(options),\n\n // User-supplied layout always wins. Without gnome extension and not in host mode, fall back to content-snap defaults.\n layout: options.layout ?? (useGnomeExtension || hostMode ? undefined : this.buildDefaultLayout(options)),\n\n // Interfaces\n plugs: rootPlugs,\n slots: rootSlots,\n\n // Hooks\n hooks: hooks,\n\n // Apps\n apps: {\n [appName]: app,\n },\n }\n\n return removeNullish(snapcraft)\n }\n\n /**\n * Build environment variables with proper defaults\n */\n private buildEnvironment(options: SnapOptions24): Record<string, string | null> | undefined {\n const env: Record<string, string | null> = {}\n\n // Add default TMPDIR for Electron/Chromium apps\n if (!options.environment?.TMPDIR) {\n env.TMPDIR = \"$XDG_RUNTIME_DIR\"\n }\n\n if (options.environment) {\n deepAssign(env, options.environment)\n }\n\n return Object.keys(env).length > 0 ? env : undefined\n }\n\n /**\n * Build default layout for core24 with GNOME platform content snaps (non-extension mode)\n * This allows the app to access libraries from the gnome-46-2404 and mesa-2404 content snaps\n */\n private buildDefaultLayout(options: SnapOptions24): Record<string, any> | undefined {\n // If user provides custom layout, use that instead\n if (options.layout) {\n return options.layout\n }\n\n // Default layout for core24 Electron apps using GNOME content snaps WITHOUT extension\n return {\n \"/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0\": {\n bind: \"$SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0\",\n },\n \"/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1\": {\n bind: \"$SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1\",\n },\n \"/usr/share/xml/iso-codes\": {\n bind: \"$SNAP/gnome-platform/usr/share/xml/iso-codes\",\n },\n \"/usr/share/libdrm\": {\n bind: \"$SNAP/gpu-2404/libdrm\",\n },\n \"/usr/share/drirc.d\": {\n symlink: \"$SNAP/gpu-2404/drirc.d\",\n },\n }\n }\n\n /**\n * Process hooks directory into hook definitions\n */\n private async processHooks(hooksPath: string): Promise<Record<string, any> | undefined> {\n try {\n const buildResourcesDir = this.packager.buildResourcesDir\n const hooksDir = path.resolve(buildResourcesDir, hooksPath)\n if (!hooksDir.startsWith(buildResourcesDir + path.sep) && hooksDir !== buildResourcesDir) {\n throw new InvalidConfigurationError(`snapcraft.core24.hooks must resolve within the build resources directory (got \"${hooksDir}\")`)\n }\n const hookFiles = await readdir(hooksDir)\n\n if (hookFiles.length === 0) {\n return undefined\n }\n\n const hooks: Record<string, any> = {}\n for (const hookFile of hookFiles) {\n const hookName = path.basename(hookFile, path.extname(hookFile))\n if (!isValidKey(hookName)) {\n throw new InvalidConfigurationError(`Invalid hook name: ${hookName}`)\n }\n hooks[hookName] = {\n // Hook definitions will be populated by snapcraft from the files\n // Just register that these hooks exist\n }\n }\n\n return hooks\n } catch (e: any) {\n log.error({ message: e.message }, \"error processing Snap hooks directory\")\n throw e\n }\n }\n\n /**\n * Normalize assumes list (can be string or array)\n */\n normalizeAssumesList(assumes: Array<string> | string | Nullish): string[] | undefined {\n if (!assumes) {\n return undefined\n }\n if (typeof assumes === \"string\") {\n return [assumes]\n }\n return assumes.length > 0 ? assumes : undefined\n }\n\n /**\n * Process plugs or slots into root-level definitions and app-level references\n */\n processPlugOrSlots<T extends Array<string | SlotDescriptor | PlugDescriptor> | SlotDescriptor | PlugDescriptor | null>(\n items: T\n ): {\n root: Record<string, unknown> | undefined\n app: string[] | undefined\n } {\n if (!items || (Array.isArray(items) && items.length === 0)) {\n return { root: undefined, app: undefined }\n }\n const root: Record<string, unknown> = {}\n const app: string[] = []\n\n // Handle single descriptor object\n if (!Array.isArray(items)) {\n Object.entries(items).forEach(([name, config]) => {\n if (!isValidKey(name)) {\n throw new Error(`Invalid plug/slot name: ${name}`)\n }\n root[name] = config\n app.push(name)\n })\n return { root, app }\n }\n\n // Handle array - support \"default\" keyword\n const processedItems = this.expandDefaultsInArray(items, this.defaultPlugs)\n for (const item of processedItems ?? []) {\n if (typeof item === \"string\") {\n // Simple string reference\n app.push(item)\n } else {\n // Descriptor object with configuration\n Object.entries(item).forEach(([name, config]) => {\n if (!isValidKey(name)) {\n throw new Error(`Invalid plug/slot name: ${name}`)\n }\n root[name] = config\n app.push(name)\n })\n }\n }\n\n return { root: Object.keys(root).length > 0 ? root : undefined, app: app.length > 0 ? app : undefined }\n }\n\n private isBrowserSandboxAllowed(plugs: Record<string, any> | undefined): boolean {\n if (!plugs) {\n return false\n }\n for (const plug of Object.values(plugs)) {\n if (plug?.interface === \"browser-support\" && plug[\"allow-sandbox\"] === true) {\n return true\n }\n }\n return false\n }\n\n /**\n * Expand \"default\" keyword in arrays of anything\n */\n private expandDefaultsInArray<T>(items: T[] | Nullish, defaults: T[]): T[] | undefined {\n const result: Array<T> = []\n for (const item of items ?? []) {\n if (typeof item === \"string\" && item === \"default\") {\n result.push(...defaults)\n } else {\n result.push(item)\n }\n }\n return result.length > 0 ? result : undefined\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"core24.js","sourceRoot":"","sources":["../../../src/targets/snap/core24.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, archFromString, copyDir, InvalidConfigurationError, log, removeNullish, toLinuxArchString } from \"builder-util\"\nimport { copy, mkdir, readdir, writeFile } from \"fs-extra\"\nimport * as path from \"path\"\nimport { PlugDescriptor, SlotDescriptor, SnapOptions24, SnapcraftOptions } from \"../../options/SnapOptions\"\nimport { SnapCore } from \"./SnapTarget\"\nimport { App, Part, SnapcraftYAML } from \"./snapcraft\"\nimport { buildSnap, DEFAULT_STAGE_PACKAGES, SNAPCRAFT_YAML_OPTIONS } from \"./snapcraftBuilder\"\nimport * as yaml from \"js-yaml\"\nimport { deepAssign, isValidKey, Nullish } from \"builder-util-runtime\"\n\n/** Snap build strategy for core24 — generates a native snapcraft.yaml and invokes the snapcraft CLI. */\nexport class SnapCore24 extends SnapCore<SnapOptions24> {\n // browser-support is intentionally absent here; it is auto-injected in mapSnapOptionsToSnapcraftYAML\n // when the user has not provided custom plugs, so it always lands in both root plugs and app plugs.\n defaultPlugs = [\"desktop\", \"desktop-legacy\", \"home\", \"x11\", \"wayland\", \"unity7\", \"network\", \"gsettings\", \"audio-playback\", \"pulseaudio\", \"opengl\"]\n\n // Snap file hierarchy:\n // - snap/gui/ gets automatically copied to meta/gui/ in the final snap\n // - Desktop files in meta/gui/ are used for menu integration\n readonly configRelativePath = \"snap\"\n readonly guiRelativePath = path.join(this.configRelativePath, \"gui\")\n\n async createDescriptor(arch: Arch): Promise<SnapcraftYAML> {\n return await this.mapSnapOptionsToSnapcraftYAML(arch)\n }\n\n private isHostMode(): boolean {\n return this.options.useDestructiveMode === true\n }\n\n /** Writes the snapcraft.yaml, stages app files, then invokes `buildSnap()` to run the actual snapcraft build. */\n async buildSnap(params: { snap: SnapcraftYAML; appOutDir: string; stageDir: string; snapArch: Arch; artifactPath: string }): Promise<void> {\n const { snap, appOutDir, stageDir, artifactPath } = params\n\n const snapDirResolved = path.resolve(stageDir, this.configRelativePath)\n const snapcraftYamlPath = path.join(snapDirResolved, \"snapcraft.yaml\")\n\n // Create snap/gui directory for desktop files and icons\n // Snapcraft will automatically copy snap/gui/ contents to meta/gui/ in the final snap\n const guiOutput = path.resolve(stageDir, this.guiRelativePath)\n await mkdir(guiOutput, { recursive: true })\n\n const yamlContent = yaml.dump(snap, SNAPCRAFT_YAML_OPTIONS)\n await writeFile(snapcraftYamlPath, yamlContent, \"utf8\")\n log.debug(snap, \"generated snapcraft.yaml\")\n\n // Copy icon to snap/gui/ directory\n // Snapcraft will automatically copy this to meta/gui/ in the final snap\n const desktopExtraProps: Record<string, string> = {}\n const icon = this.helper.maxIconPath\n if (icon) {\n const iconFileName = `${snap.name}${path.extname(icon)}`\n await copy(icon, path.join(guiOutput, iconFileName))\n // Icon path will be available at ${SNAP}/meta/gui/<icon-file> after installation\n desktopExtraProps.Icon = `\\${SNAP}/meta/gui/${iconFileName}`\n }\n\n // Create desktop file in snap/gui/ directory\n // Snapcraft will automatically copy this to meta/gui/ in the final snap\n const desktopFilePath = path.join(guiOutput, `${snap.name}.desktop`)\n await this.helper.writeDesktopEntry(this.options, this.packager.executableName + \" %U\", desktopFilePath, desktopExtraProps)\n\n // Copy app files to the project root `app` directory so `source: app`\n // in the generated `snapcraft.yaml` (which is under `snap/`) can be\n // resolved by snapcraft running in the build environment.\n const appDir = path.resolve(stageDir, \"app\")\n if (path.resolve(appDir) !== path.resolve(appOutDir)) {\n log.debug({ to: log.filePath(appDir), from: log.filePath(appOutDir) }, \"copying app files to project root app directory\")\n await copyDir(appOutDir, appDir)\n }\n\n // Auto-generate `organize` mapping for the app part so top-level helper\n // binaries and resources are placed under `app/` inside the snap. Update\n // the already-written `snapcraft.yaml` so the build sees the mapping.\n try {\n const appPart = snap.parts[snap.name]\n if (appPart) {\n const entries = (await readdir(appOutDir)).sort()\n const organize: Record<string, string> = (appPart.organize as Record<string, string>) || {}\n for (const entry of entries) {\n if (!entry) {\n continue\n }\n if (organize[entry]) {\n continue\n }\n organize[entry] = `app/${entry}`\n }\n appPart.organize = organize\n\n const updatedYaml = yaml.dump(snap, SNAPCRAFT_YAML_OPTIONS)\n await writeFile(snapcraftYamlPath, updatedYaml, \"utf8\")\n log.debug({ organize }, \"updated snapcraft.yaml with organize mapping\")\n }\n } catch (e: any) {\n log.warn({ error: e.message }, \"failed to generate and update organize mapping\")\n }\n\n const buildMode = {\n useLXD: this.options.useLXD === true,\n useMultipass: this.options.useMultipass === true,\n useDestructiveMode: this.options.useDestructiveMode === true,\n remoteBuild: this.options.remoteBuild || undefined,\n }\n\n if (this.packager.packagerOptions.effectiveOptionComputed != null) {\n const shouldSkip = await this.packager.packagerOptions.effectiveOptionComputed({ snap, ...buildMode })\n if (shouldSkip) {\n return\n }\n }\n\n const rootOptions = this.packager.config.snapcraft as SnapcraftOptions | null | undefined\n await buildSnap({\n snapcraftConfig: snap,\n artifactPath,\n stageDir,\n packager: this.packager,\n cscLink: rootOptions?.cscLink,\n ...buildMode,\n })\n }\n\n /** Converts `SnapOptions24` into a fully resolved `SnapcraftYAML` descriptor for the given architecture. */\n async mapSnapOptionsToSnapcraftYAML(arch: Arch): Promise<SnapcraftYAML> {\n const appInfo = this.packager.appInfo\n const appName = this.packager.executableName.toLowerCase()\n const options = this.options\n\n // Default to [\"gnome\"] in normal builds; no extensions in host/destructive-mode (where the\n // gnome extension is incompatible). Throw if the user explicitly includes \"gnome\" in host mode.\n const hostMode = this.isHostMode()\n const extensionsList: string[] = options.extensions != null ? [...options.extensions] : hostMode ? [] : [\"gnome\"]\n if (hostMode && extensionsList.includes(\"gnome\")) {\n throw new InvalidConfigurationError(\n `The \"gnome\" snapcraft extension is incompatible with host/destructive-mode builds.\\n` +\n `In this mode snapcraft cannot resolve the extension's command-chain source ` +\n `(/usr/share/snapcraft/extensions/desktop/command-chain) and will fail.\\n\\n` +\n `To resolve this, choose one of:\\n` +\n ` 1. Remove \"gnome\" from snapcraft.core24.extensions (or set it to []) and add any\\n` +\n ` required stage-packages manually.\\n` +\n ` 2. Switch to an isolated build environment by setting snapcraft.core24.useLXD: true\\n` +\n ` or snapcraft.core24.useMultipass: true instead of useDestructiveMode.\\n\\n` +\n `See: https://snapcraft.io/docs/gnome-extension`\n )\n }\n const resolvedExtensions = extensionsList.length > 0 ? extensionsList : undefined\n const useGnomeExtension = extensionsList.includes(\"gnome\")\n\n // Create the app part\n const appPart: Part = {\n plugin: \"dump\",\n source: \"app\",\n \"build-packages\": options.buildPackages?.length ? options.buildPackages : undefined,\n \"stage-packages\": this.expandDefaultsInArray(options.stagePackages, DEFAULT_STAGE_PACKAGES),\n after: this.expandDefaultsInArray(options.after, []),\n stage: options.appPartStage?.length ? options.appPartStage : undefined,\n }\n\n // Process plugs and slots\n // When using GNOME extension, we don't need to manually configure content snaps\n // The extension will handle: gnome-46-2404, gtk-3-themes, icon-themes, sound-themes\n let rootPlugs: Record<string, any> | undefined\n let appPlugs: string[] | undefined\n\n if (useGnomeExtension) {\n // With GNOME extension, only process user-provided custom plugs\n const result = options.plugs ? this.processPlugOrSlots(options.plugs) : { root: undefined, app: undefined }\n rootPlugs = result.root\n // Extension automatically adds common plugs, so we only add custom ones\n appPlugs = result.app\n } else {\n // Without GNOME extension, we need manual content snaps\n const defaultRootPlugs: Record<string, any> = {\n \"gtk-3-themes\": {\n interface: \"content\",\n target: \"$SNAP/data-dir/themes\",\n \"default-provider\": \"gtk-common-themes\",\n },\n \"icon-themes\": {\n interface: \"content\",\n target: \"$SNAP/data-dir/icons\",\n \"default-provider\": \"gtk-common-themes\",\n },\n \"sound-themes\": {\n interface: \"content\",\n target: \"$SNAP/data-dir/sounds\",\n \"default-provider\": \"gtk-common-themes\",\n },\n \"gnome-46-2404\": {\n interface: \"content\",\n target: \"$SNAP/gnome-platform\",\n \"default-provider\": \"gnome-46-2404\",\n },\n \"gpu-2404\": {\n interface: \"content\",\n target: \"$SNAP/gpu-2404\",\n \"default-provider\": \"mesa-2404\",\n },\n }\n\n const result = options.plugs\n ? this.processPlugOrSlots(options.plugs)\n : hostMode\n ? { root: undefined, app: this.defaultPlugs }\n : {\n root: defaultRootPlugs,\n app: this.defaultPlugs,\n }\n rootPlugs = result.root\n appPlugs = result.app\n }\n\n // Always add browser-support with allow-sandbox so Chromium's internal sandbox\n // can create user namespaces under strict confinement. Without allow-sandbox: true\n // the app crashes immediately with \"FATAL: Permission denied (13)\" in credentials.cc.\n // Skip the injection only when the user has explicitly provided their own plugs\n // (they are responsible for including browser-support in that case).\n if (!options.plugs) {\n rootPlugs = { ...rootPlugs, \"browser-support\": { interface: \"browser-support\", \"allow-sandbox\": true } }\n if (!appPlugs?.includes(\"browser-support\")) {\n appPlugs = [...(appPlugs ?? []), \"browser-support\"]\n }\n }\n\n const { root: rootSlots, app: appSlots } = options.slots ? this.processPlugOrSlots(options.slots) : { root: undefined, app: undefined }\n\n // Build the effective arg list for the snap command.\n // Start with any user-supplied executableArgs, then conditionally add --no-sandbox\n // if browser-support with allow-sandbox:true is not present in the resolved plugs\n // (mirrors the same logic in SnapCoreLegacy.buildSnap).\n const extraArgs: string[] = [...(this.options.executableArgs ?? [])]\n if (this.options.forceX11 === true) {\n if (!extraArgs.includes(\"--ozone-platform=x11\")) {\n extraArgs.push(\"--ozone-platform=x11\")\n }\n }\n if (this.helper.isElectronVersionGreaterOrEqualThan(\"5.0.0\") && !this.isBrowserSandboxAllowed(rootPlugs)) {\n if (!extraArgs.includes(\"--no-sandbox\")) {\n extraArgs.push(\"--no-sandbox\")\n }\n }\n const commandSuffix = extraArgs.length > 0 ? ` ${extraArgs.join(\" \")}` : \"\"\n\n // Create the app configuration\n const app: App = {\n command: `app/${this.packager.executableName}${commandSuffix}`,\n \"command-chain\": undefined, // explicitly undefined so removeNullish strips it; extensions supply their own command-chain\n plugs: appPlugs,\n slots: appSlots,\n autostart: options.autoStart ? `${appName}.desktop` : undefined,\n desktop: `meta/gui/${appName}.desktop`,\n extensions: resolvedExtensions,\n }\n\n // Icon path — build-time relative path so snapcraft can find the file in snap/gui/\n await this.helper.icons\n const iconPath = this.helper.maxIconPath != null ? `snap/gui/${appName}${path.extname(this.helper.maxIconPath)}` : undefined\n\n // Process hooks if configured\n const hooksConfig = options.hooks\n const hooks = hooksConfig ? await this.processHooks(hooksConfig) : undefined\n\n // Parts configuration - the extension automatically adds a gnome/sdk part\n // Don't manually add desktop-launch when using the extension\n const parts: Record<string, Part> = {\n [appName]: appPart,\n }\n\n // Note: `organize` will be generated later in `buildSnap` based on the\n // actual contents of the built app directory so helper binaries and\n // resources are automatically moved under `app/` in the snap.\n\n // Build the snapcraft configuration\n const snapcraft: SnapcraftYAML = {\n // Required fields\n name: appName,\n base: \"core24\",\n confinement: options.confinement || \"strict\",\n parts: parts,\n\n // Architecture/Platform — only needed for cross-compilation; snapcraft 8\n // defaults to host arch and snapcraft 7 rejects this field entirely.\n ...(arch !== archFromString(process.arch)\n ? {\n platforms: {\n [toLinuxArchString(arch, \"snap\")]: {\n \"build-for\": toLinuxArchString(arch, \"snap\"),\n \"build-on\": toLinuxArchString(archFromString(process.arch), \"snap\"),\n },\n },\n }\n : {}),\n\n // Metadata - with fallbacks from appInfo\n version: appInfo.version,\n summary: options.summary || appInfo.productName,\n description: this.helper.getDescription(options),\n grade: options.grade || \"stable\",\n title: options.title || appInfo.productName,\n icon: iconPath,\n\n // Build configuration\n compression: options.compression || undefined,\n assumes: this.normalizeAssumesList(options.assumes),\n\n // Environment\n environment: this.buildEnvironment(options),\n\n // User-supplied layout always wins. Without gnome extension and not in host mode, fall back to content-snap defaults.\n layout: options.layout ?? (useGnomeExtension || hostMode ? undefined : this.buildDefaultLayout(options)),\n\n // Interfaces\n plugs: rootPlugs,\n slots: rootSlots,\n\n // Hooks\n hooks: hooks,\n\n // Apps\n apps: {\n [appName]: app,\n },\n }\n\n return removeNullish(snapcraft)\n }\n\n /**\n * Build environment variables with proper defaults\n */\n private buildEnvironment(options: SnapOptions24): Record<string, string | null> | undefined {\n const env: Record<string, string | null> = {}\n\n // Add default TMPDIR for Electron/Chromium apps\n if (!options.environment?.TMPDIR) {\n env.TMPDIR = \"$XDG_RUNTIME_DIR\"\n }\n\n if (options.environment) {\n deepAssign(env, options.environment)\n }\n\n return Object.keys(env).length > 0 ? env : undefined\n }\n\n /**\n * Build default layout for core24 with GNOME platform content snaps (non-extension mode)\n * This allows the app to access libraries from the gnome-46-2404 and mesa-2404 content snaps\n */\n private buildDefaultLayout(options: SnapOptions24): Record<string, any> | undefined {\n // If user provides custom layout, use that instead\n if (options.layout) {\n return options.layout\n }\n\n // Default layout for core24 Electron apps using GNOME content snaps WITHOUT extension\n return {\n \"/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0\": {\n bind: \"$SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0\",\n },\n \"/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1\": {\n bind: \"$SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1\",\n },\n \"/usr/share/xml/iso-codes\": {\n bind: \"$SNAP/gnome-platform/usr/share/xml/iso-codes\",\n },\n \"/usr/share/libdrm\": {\n bind: \"$SNAP/gpu-2404/libdrm\",\n },\n \"/usr/share/drirc.d\": {\n symlink: \"$SNAP/gpu-2404/drirc.d\",\n },\n }\n }\n\n /**\n * Process hooks directory into hook definitions\n */\n private async processHooks(hooksPath: string): Promise<Record<string, any> | undefined> {\n try {\n const buildResourcesDir = this.packager.buildResourcesDir\n const hooksDir = path.resolve(buildResourcesDir, hooksPath)\n if (!hooksDir.startsWith(buildResourcesDir + path.sep) && hooksDir !== buildResourcesDir) {\n throw new InvalidConfigurationError(`snapcraft.core24.hooks must resolve within the build resources directory (got \"${hooksDir}\")`)\n }\n const hookFiles = await readdir(hooksDir)\n\n if (hookFiles.length === 0) {\n return undefined\n }\n\n const hooks: Record<string, any> = {}\n for (const hookFile of hookFiles) {\n const hookName = path.basename(hookFile, path.extname(hookFile))\n if (!isValidKey(hookName)) {\n throw new InvalidConfigurationError(`Invalid hook name: ${hookName}`)\n }\n hooks[hookName] = {\n // Hook definitions will be populated by snapcraft from the files\n // Just register that these hooks exist\n }\n }\n\n return hooks\n } catch (e: any) {\n log.error({ message: e.message }, \"error processing Snap hooks directory\")\n throw e\n }\n }\n\n /**\n * Normalize assumes list (can be string or array)\n */\n normalizeAssumesList(assumes: Array<string> | string | Nullish): string[] | undefined {\n if (!assumes) {\n return undefined\n }\n if (typeof assumes === \"string\") {\n return [assumes]\n }\n return assumes.length > 0 ? assumes : undefined\n }\n\n /**\n * Process plugs or slots into root-level definitions and app-level references\n */\n processPlugOrSlots<T extends Array<string | SlotDescriptor | PlugDescriptor> | SlotDescriptor | PlugDescriptor | null>(\n items: T\n ): {\n root: Record<string, unknown> | undefined\n app: string[] | undefined\n } {\n if (!items || (Array.isArray(items) && items.length === 0)) {\n return { root: undefined, app: undefined }\n }\n const root: Record<string, unknown> = {}\n const app: string[] = []\n\n // Handle single descriptor object\n if (!Array.isArray(items)) {\n Object.entries(items).forEach(([name, config]) => {\n if (!isValidKey(name)) {\n throw new Error(`Invalid plug/slot name: ${name}`)\n }\n root[name] = config\n app.push(name)\n })\n return { root, app }\n }\n\n // Handle array - support \"default\" keyword\n const processedItems = this.expandDefaultsInArray(items, this.defaultPlugs)\n for (const item of processedItems ?? []) {\n if (typeof item === \"string\") {\n // Simple string reference\n app.push(item)\n } else {\n // Descriptor object with configuration\n Object.entries(item).forEach(([name, config]) => {\n if (!isValidKey(name)) {\n throw new Error(`Invalid plug/slot name: ${name}`)\n }\n root[name] = config\n app.push(name)\n })\n }\n }\n\n return { root: Object.keys(root).length > 0 ? root : undefined, app: app.length > 0 ? app : undefined }\n }\n\n private isBrowserSandboxAllowed(plugs: Record<string, any> | undefined): boolean {\n if (!plugs) {\n return false\n }\n for (const plug of Object.values(plugs)) {\n if (plug?.interface === \"browser-support\" && plug[\"allow-sandbox\"] === true) {\n return true\n }\n }\n return false\n }\n\n /**\n * Expand \"default\" keyword in arrays of anything\n */\n private expandDefaultsInArray<T>(items: T[] | Nullish, defaults: T[]): T[] | undefined {\n const result: Array<T> = []\n for (const item of items ?? []) {\n if (typeof item === \"string\" && item === \"default\") {\n result.push(...defaults)\n } else {\n result.push(item)\n }\n }\n return result.length > 0 ? result : undefined\n }\n}\n"]}
|
|
@@ -69,7 +69,7 @@ class SnapCoreLegacy extends SnapTarget_1.SnapCore {
|
|
|
69
69
|
if (slots != null) {
|
|
70
70
|
appDescriptor.slots = Object.getOwnPropertyNames(slots);
|
|
71
71
|
for (const slotName of appDescriptor.slots) {
|
|
72
|
-
if (!(0,
|
|
72
|
+
if (!(0, builder_util_runtime_1.isValidKey)(slotName)) {
|
|
73
73
|
throw new Error(`Invalid plug/slot name: ${slotName}`);
|
|
74
74
|
}
|
|
75
75
|
const slotOptions = slots[slotName];
|
|
@@ -82,7 +82,7 @@ class SnapCoreLegacy extends SnapTarget_1.SnapCore {
|
|
|
82
82
|
snap.slots[slotName] = slotOptions;
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
-
(0,
|
|
85
|
+
(0, builder_util_runtime_1.deepAssign)(snap, {
|
|
86
86
|
name: snapName,
|
|
87
87
|
version: appInfo.version,
|
|
88
88
|
title: options.title || appInfo.productName,
|
|
@@ -133,7 +133,7 @@ class SnapCoreLegacy extends SnapTarget_1.SnapCore {
|
|
|
133
133
|
appDescriptor.environment = environment;
|
|
134
134
|
if (plugs != null) {
|
|
135
135
|
for (const plugName of plugNames) {
|
|
136
|
-
if (!(0,
|
|
136
|
+
if (!(0, builder_util_runtime_1.isValidKey)(plugName)) {
|
|
137
137
|
throw new Error(`Invalid plug/slot name: ${plugName}`);
|
|
138
138
|
}
|
|
139
139
|
const plugOptions = plugs[plugName];
|
|
@@ -236,13 +236,13 @@ class SnapCoreLegacy extends SnapTarget_1.SnapCore {
|
|
|
236
236
|
const result = {};
|
|
237
237
|
for (const item of Array.isArray(raw) ? raw : [raw]) {
|
|
238
238
|
if (typeof item === "string") {
|
|
239
|
-
if (!(0,
|
|
239
|
+
if (!(0, builder_util_runtime_1.isValidKey)(item)) {
|
|
240
240
|
throw new Error(`Invalid plug/slot name: ${item}`);
|
|
241
241
|
}
|
|
242
242
|
result[item] = null;
|
|
243
243
|
}
|
|
244
244
|
else {
|
|
245
|
-
(0,
|
|
245
|
+
(0, builder_util_runtime_1.deepAssign)(result, item);
|
|
246
246
|
}
|
|
247
247
|
}
|
|
248
248
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coreLegacy.js","sourceRoot":"","sources":["../../../src/targets/snap/coreLegacy.ts"],"names":[],"mappings":"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","sourcesContent":["import { replaceDefault as _replaceDefault, Arch, deepAssign, executeAppBuilder, isValidKey, serializeToYaml, toLinuxArchString } from \"builder-util\"\nimport { asArray, Nullish } from \"builder-util-runtime\"\nimport { outputFile, readFile } from \"fs-extra\"\nimport { load } from \"js-yaml\"\nimport * as path from \"path\"\nimport { PlugDescriptor, SnapOptions } from \"../../options/SnapOptions\"\nimport { getTemplatePath } from \"../../util/pathManager\"\nimport { SnapCore } from \"./SnapTarget\"\nimport { SnapcraftYAML } from \"./snapcraft\"\nimport { DEFAULT_STAGE_PACKAGES } from \"./snapcraftBuilder\"\n\n// Handles core18/core20/core22 snaps via the app-builder binary (not the snapcraft CLI).\n// See: https://github.com/develar/app-builder/blob/master/pkg/package-format/snap\nexport class SnapCoreLegacy extends SnapCore<SnapOptions> {\n private isUseTemplateApp = false\n\n defaultPlugs = [\"desktop\", \"desktop-legacy\", \"home\", \"x11\", \"wayland\", \"unity7\", \"browser-support\", \"network\", \"gsettings\", \"audio-playback\", \"pulseaudio\", \"opengl\"]\n\n private replaceDefault(inList: Array<string> | Nullish, defaultList: Array<string>) {\n const result = _replaceDefault(inList, defaultList)\n // Any customisation opts out of the pre-built template app.\n if (result !== defaultList) {\n this.isUseTemplateApp = false\n }\n return result\n }\n\n async createDescriptor(arch: Arch): Promise<SnapcraftYAML> {\n const appInfo = this.packager.appInfo\n const snapName = this.packager.executableName.toLowerCase()\n const options = this.options\n\n const plugs = this.normalizePlugConfiguration(this.options.plugs)\n\n const plugNames = this.replaceDefault(plugs == null ? null : Object.getOwnPropertyNames(plugs), this.defaultPlugs)\n\n const slots = this.normalizePlugConfiguration(this.options.slots)\n\n const buildPackages = asArray(options.buildPackages)\n const stagePackages = this.replaceDefault(options.stagePackages, DEFAULT_STAGE_PACKAGES)\n\n const stageSet = new Set(stagePackages)\n const stageMatchesDefaults = stagePackages.length === DEFAULT_STAGE_PACKAGES.length && DEFAULT_STAGE_PACKAGES.every((p: string) => stageSet.has(p))\n\n // Template app is only available for x64/armv7l, and only when no packages are customised.\n this.isUseTemplateApp = this.options.useTemplateApp !== false && (arch === Arch.x64 || arch === Arch.armv7l) && buildPackages.length === 0 && stageMatchesDefaults\n\n const appDescriptor: any = {\n command: \"command.sh\",\n plugs: plugNames,\n adapter: \"none\",\n }\n\n const snap: any = load(await readFile(path.join(getTemplatePath(\"snap\"), \"snapcraft.yaml\"), \"utf-8\"))\n if (this.isUseTemplateApp) {\n delete appDescriptor.adapter\n }\n if (options.base != null) {\n snap.base = options.base\n // from core22 onwards adapter is legacy\n if (Number(snap.base.split(\"core\")[1]) >= 22) {\n delete appDescriptor.adapter\n }\n }\n if (options.grade != null) {\n snap.grade = options.grade\n }\n if (options.confinement != null) {\n snap.confinement = options.confinement\n }\n if (options.appPartStage != null) {\n snap.parts.app.stage = options.appPartStage\n }\n if (options.layout != null) {\n snap.layout = options.layout\n }\n if (slots != null) {\n appDescriptor.slots = Object.getOwnPropertyNames(slots)\n for (const slotName of appDescriptor.slots) {\n if (!isValidKey(slotName)) {\n throw new Error(`Invalid plug/slot name: ${slotName}`)\n }\n const slotOptions = slots[slotName]\n if (slotOptions == null) {\n continue\n }\n if (!snap.slots) {\n snap.slots = {}\n }\n snap.slots[slotName] = slotOptions\n }\n }\n\n deepAssign(snap, {\n name: snapName,\n version: appInfo.version,\n title: options.title || appInfo.productName,\n summary: options.summary || appInfo.productName,\n compression: options.compression,\n description: this.helper.getDescription(options),\n architectures: [toLinuxArchString(arch, \"snap\")],\n apps: {\n [snapName]: appDescriptor,\n },\n parts: {\n app: {\n \"stage-packages\": stagePackages,\n },\n },\n })\n\n if (options.autoStart) {\n appDescriptor.autostart = `${snap.name}.desktop`\n }\n\n if (options.confinement === \"classic\") {\n delete appDescriptor.plugs\n delete snap.plugs\n } else {\n const archTriplet = this.archNameToTriplet(arch)\n const environment: Record<string, string> = {\n PATH: \"$SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin:$PATH\",\n SNAP_DESKTOP_RUNTIME: \"$SNAP/gnome-platform\",\n LD_LIBRARY_PATH: [\n \"$SNAP_LIBRARY_PATH\",\n \"$SNAP/lib:$SNAP/usr/lib:$SNAP/lib/\" + archTriplet + \":$SNAP/usr/lib/\" + archTriplet,\n \"$LD_LIBRARY_PATH:$SNAP/lib:$SNAP/usr/lib\",\n \"$SNAP/lib/\" + archTriplet + \":$SNAP/usr/lib/\" + archTriplet,\n ].join(\":\"),\n ...options.environment,\n }\n // Determine whether Wayland should be disabled based on:\n // - Electron version (<38 historically had Wayland disabled)\n // - Explicit allowNativeWayland override.\n // https://github.com/electron-userland/electron-builder/issues/9320\n const allow = options.allowNativeWayland\n const isOldElectron = !this.helper.isElectronVersionGreaterOrEqualThan(\"38.0.0\", \"7.0.0\")\n if (\n (allow == null && isOldElectron) || // No explicit option -> use legacy behavior for old Electron\n allow === false // Explicitly disallowed\n ) {\n environment.DISABLE_WAYLAND = \"1\"\n }\n\n appDescriptor.environment = environment\n\n if (plugs != null) {\n for (const plugName of plugNames) {\n if (!isValidKey(plugName)) {\n throw new Error(`Invalid plug/slot name: ${plugName}`)\n }\n const plugOptions = plugs[plugName]\n if (plugOptions == null) {\n continue\n }\n if (!snap.plugs) {\n snap.plugs = {}\n }\n snap.plugs[plugName] = plugOptions\n }\n }\n }\n\n if (buildPackages.length > 0) {\n snap.parts.app[\"build-packages\"] = buildPackages\n }\n if (options.after != null) {\n snap.parts.app.after = options.after\n }\n\n if (options.assumes != null) {\n snap.assumes = asArray(options.assumes)\n }\n\n return snap\n }\n\n async buildSnap(props: { snap: any; appOutDir: string; stageDir: string; snapArch: Arch; artifactPath: string }): Promise<void> {\n const { snap, appOutDir, stageDir, snapArch, artifactPath } = props\n const args = [\n \"snap\",\n \"--app\",\n appOutDir,\n \"--stage\",\n stageDir,\n \"--arch\",\n toLinuxArchString(snapArch, \"snap\"),\n \"--output\",\n artifactPath,\n \"--executable\",\n this.packager.executableName,\n ]\n\n await this.helper.icons\n if (this.helper.maxIconPath != null) {\n if (!this.isUseTemplateApp) {\n snap.icon = \"snap/gui/icon.png\"\n }\n args.push(\"--icon\", this.helper.maxIconPath)\n }\n\n // snapcraft.yaml inside a snap directory, or snap.yaml inside meta/ for template builds\n const snapMetaDir = path.join(stageDir, this.isUseTemplateApp ? \"meta\" : \"snap\")\n const desktopFile = path.join(snapMetaDir, \"gui\", `${snap.name}.desktop`)\n await this.helper.writeDesktopEntry(this.options, this.packager.executableName + \" %U\", desktopFile, {\n // tslint:disable:no-invalid-template-strings\n Icon: \"${SNAP}/meta/gui/icon.png\",\n })\n\n const extraAppArgs: Array<string> = this.options.executableArgs ?? []\n if (this.helper.isElectronVersionGreaterOrEqualThan(\"5.0.0\") && !this.isBrowserSandboxAllowed(snap)) {\n const noSandboxArg = \"--no-sandbox\"\n if (!extraAppArgs.includes(noSandboxArg)) {\n extraAppArgs.push(noSandboxArg)\n }\n if (this.isUseTemplateApp) {\n args.push(\"--exclude\", \"chrome-sandbox\")\n }\n }\n if (extraAppArgs.length > 0) {\n args.push(\"--extraAppArgs=\" + extraAppArgs.join(\" \"))\n }\n\n if (snap.compression != null) {\n args.push(\"--compression\", snap.compression)\n }\n\n if (this.isUseTemplateApp) {\n // remove fields that are valid in snapcraft.yaml but not in snap.yaml (template format)\n const fieldsToStrip = [\"compression\", \"contact\", \"donation\", \"issues\", \"parts\", \"source-code\", \"website\"]\n for (const field of fieldsToStrip) {\n delete snap[field]\n }\n }\n\n if (this.packager.packagerOptions.effectiveOptionComputed != null && (await this.packager.packagerOptions.effectiveOptionComputed({ snap, desktopFile, args }))) {\n return\n }\n\n await outputFile(path.join(snapMetaDir, this.isUseTemplateApp ? \"snap.yaml\" : \"snapcraft.yaml\"), serializeToYaml(snap))\n\n const hooksDir = await this.packager.getResource(this.options.hooks, \"snap-hooks\")\n if (hooksDir != null) {\n args.push(\"--hooks\", hooksDir)\n }\n\n if (this.isUseTemplateApp) {\n // Map TypeScript Arch enum to the string keys expected by app-builder's ResolveTemplateDir.\n // The previous code passed the raw numeric enum value (e.g. Arch.x64 = 1 → \"electron4:1\")\n // which fell through to the default case and was treated as a bare URL, failing with\n // \"unsupported protocol scheme\". The switch in snap.go expects \"electron4:amd64\" / \"electron4:armhf\".\n const templateArch = snapArch === Arch.x64 ? \"amd64\" : \"armhf\"\n args.push(\"--template-url\", `electron4:${templateArch}`)\n }\n\n await executeAppBuilder(args)\n }\n\n private normalizePlugConfiguration(raw: Array<string | PlugDescriptor> | PlugDescriptor | Nullish): Record<string, Record<string, any> | null> | null {\n if (raw == null) {\n return null\n }\n\n const result: any = {}\n for (const item of Array.isArray(raw) ? raw : [raw]) {\n if (typeof item === \"string\") {\n if (!isValidKey(item)) {\n throw new Error(`Invalid plug/slot name: ${item}`)\n }\n result[item] = null\n } else {\n deepAssign(result, item)\n }\n }\n return result\n }\n\n private isBrowserSandboxAllowed(snap: any): boolean {\n if (snap.plugs != null) {\n for (const plugName of Object.keys(snap.plugs)) {\n const plug = snap.plugs[plugName]\n if (plug.interface === \"browser-support\" && plug[\"allow-sandbox\"] === true) {\n return true\n }\n }\n }\n return false\n }\n\n private archNameToTriplet(arch: Arch): string {\n switch (arch) {\n case Arch.x64:\n return \"x86_64-linux-gnu\"\n case Arch.ia32:\n return \"i386-linux-gnu\"\n case Arch.armv7l:\n // noinspection SpellCheckingInspection\n return \"arm-linux-gnueabihf\"\n case Arch.arm64:\n return \"aarch64-linux-gnu\"\n\n default:\n throw new Error(`Unsupported arch ${arch}`)\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"coreLegacy.js","sourceRoot":"","sources":["../../../src/targets/snap/coreLegacy.ts"],"names":[],"mappings":"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","sourcesContent":["import { replaceDefault as _replaceDefault, Arch, executeAppBuilder, serializeToYaml, toLinuxArchString } from \"builder-util\"\nimport { asArray, deepAssign, isValidKey, Nullish } from \"builder-util-runtime\"\nimport { outputFile, readFile } from \"fs-extra\"\nimport { load } from \"js-yaml\"\nimport * as path from \"path\"\nimport { PlugDescriptor, SnapOptions } from \"../../options/SnapOptions\"\nimport { getTemplatePath } from \"../../util/pathManager\"\nimport { SnapCore } from \"./SnapTarget\"\nimport { SnapcraftYAML } from \"./snapcraft\"\nimport { DEFAULT_STAGE_PACKAGES } from \"./snapcraftBuilder\"\n\n// Handles core18/core20/core22 snaps via the app-builder binary (not the snapcraft CLI).\n// See: https://github.com/develar/app-builder/blob/master/pkg/package-format/snap\nexport class SnapCoreLegacy extends SnapCore<SnapOptions> {\n private isUseTemplateApp = false\n\n defaultPlugs = [\"desktop\", \"desktop-legacy\", \"home\", \"x11\", \"wayland\", \"unity7\", \"browser-support\", \"network\", \"gsettings\", \"audio-playback\", \"pulseaudio\", \"opengl\"]\n\n private replaceDefault(inList: Array<string> | Nullish, defaultList: Array<string>) {\n const result = _replaceDefault(inList, defaultList)\n // Any customisation opts out of the pre-built template app.\n if (result !== defaultList) {\n this.isUseTemplateApp = false\n }\n return result\n }\n\n async createDescriptor(arch: Arch): Promise<SnapcraftYAML> {\n const appInfo = this.packager.appInfo\n const snapName = this.packager.executableName.toLowerCase()\n const options = this.options\n\n const plugs = this.normalizePlugConfiguration(this.options.plugs)\n\n const plugNames = this.replaceDefault(plugs == null ? null : Object.getOwnPropertyNames(plugs), this.defaultPlugs)\n\n const slots = this.normalizePlugConfiguration(this.options.slots)\n\n const buildPackages = asArray(options.buildPackages)\n const stagePackages = this.replaceDefault(options.stagePackages, DEFAULT_STAGE_PACKAGES)\n\n const stageSet = new Set(stagePackages)\n const stageMatchesDefaults = stagePackages.length === DEFAULT_STAGE_PACKAGES.length && DEFAULT_STAGE_PACKAGES.every((p: string) => stageSet.has(p))\n\n // Template app is only available for x64/armv7l, and only when no packages are customised.\n this.isUseTemplateApp = this.options.useTemplateApp !== false && (arch === Arch.x64 || arch === Arch.armv7l) && buildPackages.length === 0 && stageMatchesDefaults\n\n const appDescriptor: any = {\n command: \"command.sh\",\n plugs: plugNames,\n adapter: \"none\",\n }\n\n const snap: any = load(await readFile(path.join(getTemplatePath(\"snap\"), \"snapcraft.yaml\"), \"utf-8\"))\n if (this.isUseTemplateApp) {\n delete appDescriptor.adapter\n }\n if (options.base != null) {\n snap.base = options.base\n // from core22 onwards adapter is legacy\n if (Number(snap.base.split(\"core\")[1]) >= 22) {\n delete appDescriptor.adapter\n }\n }\n if (options.grade != null) {\n snap.grade = options.grade\n }\n if (options.confinement != null) {\n snap.confinement = options.confinement\n }\n if (options.appPartStage != null) {\n snap.parts.app.stage = options.appPartStage\n }\n if (options.layout != null) {\n snap.layout = options.layout\n }\n if (slots != null) {\n appDescriptor.slots = Object.getOwnPropertyNames(slots)\n for (const slotName of appDescriptor.slots) {\n if (!isValidKey(slotName)) {\n throw new Error(`Invalid plug/slot name: ${slotName}`)\n }\n const slotOptions = slots[slotName]\n if (slotOptions == null) {\n continue\n }\n if (!snap.slots) {\n snap.slots = {}\n }\n snap.slots[slotName] = slotOptions\n }\n }\n\n deepAssign(snap, {\n name: snapName,\n version: appInfo.version,\n title: options.title || appInfo.productName,\n summary: options.summary || appInfo.productName,\n compression: options.compression,\n description: this.helper.getDescription(options),\n architectures: [toLinuxArchString(arch, \"snap\")],\n apps: {\n [snapName]: appDescriptor,\n },\n parts: {\n app: {\n \"stage-packages\": stagePackages,\n },\n },\n })\n\n if (options.autoStart) {\n appDescriptor.autostart = `${snap.name}.desktop`\n }\n\n if (options.confinement === \"classic\") {\n delete appDescriptor.plugs\n delete snap.plugs\n } else {\n const archTriplet = this.archNameToTriplet(arch)\n const environment: Record<string, string> = {\n PATH: \"$SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin:$PATH\",\n SNAP_DESKTOP_RUNTIME: \"$SNAP/gnome-platform\",\n LD_LIBRARY_PATH: [\n \"$SNAP_LIBRARY_PATH\",\n \"$SNAP/lib:$SNAP/usr/lib:$SNAP/lib/\" + archTriplet + \":$SNAP/usr/lib/\" + archTriplet,\n \"$LD_LIBRARY_PATH:$SNAP/lib:$SNAP/usr/lib\",\n \"$SNAP/lib/\" + archTriplet + \":$SNAP/usr/lib/\" + archTriplet,\n ].join(\":\"),\n ...options.environment,\n }\n // Determine whether Wayland should be disabled based on:\n // - Electron version (<38 historically had Wayland disabled)\n // - Explicit allowNativeWayland override.\n // https://github.com/electron-userland/electron-builder/issues/9320\n const allow = options.allowNativeWayland\n const isOldElectron = !this.helper.isElectronVersionGreaterOrEqualThan(\"38.0.0\", \"7.0.0\")\n if (\n (allow == null && isOldElectron) || // No explicit option -> use legacy behavior for old Electron\n allow === false // Explicitly disallowed\n ) {\n environment.DISABLE_WAYLAND = \"1\"\n }\n\n appDescriptor.environment = environment\n\n if (plugs != null) {\n for (const plugName of plugNames) {\n if (!isValidKey(plugName)) {\n throw new Error(`Invalid plug/slot name: ${plugName}`)\n }\n const plugOptions = plugs[plugName]\n if (plugOptions == null) {\n continue\n }\n if (!snap.plugs) {\n snap.plugs = {}\n }\n snap.plugs[plugName] = plugOptions\n }\n }\n }\n\n if (buildPackages.length > 0) {\n snap.parts.app[\"build-packages\"] = buildPackages\n }\n if (options.after != null) {\n snap.parts.app.after = options.after\n }\n\n if (options.assumes != null) {\n snap.assumes = asArray(options.assumes)\n }\n\n return snap\n }\n\n async buildSnap(props: { snap: any; appOutDir: string; stageDir: string; snapArch: Arch; artifactPath: string }): Promise<void> {\n const { snap, appOutDir, stageDir, snapArch, artifactPath } = props\n const args = [\n \"snap\",\n \"--app\",\n appOutDir,\n \"--stage\",\n stageDir,\n \"--arch\",\n toLinuxArchString(snapArch, \"snap\"),\n \"--output\",\n artifactPath,\n \"--executable\",\n this.packager.executableName,\n ]\n\n await this.helper.icons\n if (this.helper.maxIconPath != null) {\n if (!this.isUseTemplateApp) {\n snap.icon = \"snap/gui/icon.png\"\n }\n args.push(\"--icon\", this.helper.maxIconPath)\n }\n\n // snapcraft.yaml inside a snap directory, or snap.yaml inside meta/ for template builds\n const snapMetaDir = path.join(stageDir, this.isUseTemplateApp ? \"meta\" : \"snap\")\n const desktopFile = path.join(snapMetaDir, \"gui\", `${snap.name}.desktop`)\n await this.helper.writeDesktopEntry(this.options, this.packager.executableName + \" %U\", desktopFile, {\n // tslint:disable:no-invalid-template-strings\n Icon: \"${SNAP}/meta/gui/icon.png\",\n })\n\n const extraAppArgs: Array<string> = this.options.executableArgs ?? []\n if (this.helper.isElectronVersionGreaterOrEqualThan(\"5.0.0\") && !this.isBrowserSandboxAllowed(snap)) {\n const noSandboxArg = \"--no-sandbox\"\n if (!extraAppArgs.includes(noSandboxArg)) {\n extraAppArgs.push(noSandboxArg)\n }\n if (this.isUseTemplateApp) {\n args.push(\"--exclude\", \"chrome-sandbox\")\n }\n }\n if (extraAppArgs.length > 0) {\n args.push(\"--extraAppArgs=\" + extraAppArgs.join(\" \"))\n }\n\n if (snap.compression != null) {\n args.push(\"--compression\", snap.compression)\n }\n\n if (this.isUseTemplateApp) {\n // remove fields that are valid in snapcraft.yaml but not in snap.yaml (template format)\n const fieldsToStrip = [\"compression\", \"contact\", \"donation\", \"issues\", \"parts\", \"source-code\", \"website\"]\n for (const field of fieldsToStrip) {\n delete snap[field]\n }\n }\n\n if (this.packager.packagerOptions.effectiveOptionComputed != null && (await this.packager.packagerOptions.effectiveOptionComputed({ snap, desktopFile, args }))) {\n return\n }\n\n await outputFile(path.join(snapMetaDir, this.isUseTemplateApp ? \"snap.yaml\" : \"snapcraft.yaml\"), serializeToYaml(snap))\n\n const hooksDir = await this.packager.getResource(this.options.hooks, \"snap-hooks\")\n if (hooksDir != null) {\n args.push(\"--hooks\", hooksDir)\n }\n\n if (this.isUseTemplateApp) {\n // Map TypeScript Arch enum to the string keys expected by app-builder's ResolveTemplateDir.\n // The previous code passed the raw numeric enum value (e.g. Arch.x64 = 1 → \"electron4:1\")\n // which fell through to the default case and was treated as a bare URL, failing with\n // \"unsupported protocol scheme\". The switch in snap.go expects \"electron4:amd64\" / \"electron4:armhf\".\n const templateArch = snapArch === Arch.x64 ? \"amd64\" : \"armhf\"\n args.push(\"--template-url\", `electron4:${templateArch}`)\n }\n\n await executeAppBuilder(args)\n }\n\n private normalizePlugConfiguration(raw: Array<string | PlugDescriptor> | PlugDescriptor | Nullish): Record<string, Record<string, any> | null> | null {\n if (raw == null) {\n return null\n }\n\n const result: any = {}\n for (const item of Array.isArray(raw) ? raw : [raw]) {\n if (typeof item === \"string\") {\n if (!isValidKey(item)) {\n throw new Error(`Invalid plug/slot name: ${item}`)\n }\n result[item] = null\n } else {\n deepAssign(result, item)\n }\n }\n return result\n }\n\n private isBrowserSandboxAllowed(snap: any): boolean {\n if (snap.plugs != null) {\n for (const plugName of Object.keys(snap.plugs)) {\n const plug = snap.plugs[plugName]\n if (plug.interface === \"browser-support\" && plug[\"allow-sandbox\"] === true) {\n return true\n }\n }\n }\n return false\n }\n\n private archNameToTriplet(arch: Arch): string {\n switch (arch) {\n case Arch.x64:\n return \"x86_64-linux-gnu\"\n case Arch.ia32:\n return \"i386-linux-gnu\"\n case Arch.armv7l:\n // noinspection SpellCheckingInspection\n return \"arm-linux-gnueabihf\"\n case Arch.arm64:\n return \"aarch64-linux-gnu\"\n\n default:\n throw new Error(`Unsupported arch ${arch}`)\n }\n }\n}\n"]}
|
|
@@ -9,6 +9,7 @@ const electron_publish_1 = require("electron-publish");
|
|
|
9
9
|
const fs_extra_1 = require("fs-extra");
|
|
10
10
|
const path = require("path");
|
|
11
11
|
const util = require("util");
|
|
12
|
+
const builder_util_runtime_1 = require("builder-util-runtime");
|
|
12
13
|
const execAsync = util.promisify(childProcess.exec);
|
|
13
14
|
exports.SNAPCRAFT_YAML_OPTIONS = { indent: 2, lineWidth: -1, noRefs: true };
|
|
14
15
|
exports.DEFAULT_STAGE_PACKAGES = ["libnspr4", "libnss3", "libxss1", "libappindicator3-1", "libsecret-1-0"];
|
|
@@ -187,12 +188,12 @@ async function buildSnap(options) {
|
|
|
187
188
|
await ensureSnapcraftInstalled();
|
|
188
189
|
// Inject credentials for all build modes from snapcraft.cscLink / SNAP_CSC_LINK.
|
|
189
190
|
const credEnv = await (0, electron_publish_1.resolveSnapCredentials)(cscLink, options.packager.buildResourcesDir);
|
|
190
|
-
(0,
|
|
191
|
+
(0, builder_util_runtime_1.deepAssign)(isolatedEnv, credEnv);
|
|
191
192
|
if (remoteBuild === null || remoteBuild === void 0 ? void 0 : remoteBuild.enabled) {
|
|
192
193
|
// Remote-build auth does additional checks (interactive session, throws on missing creds)
|
|
193
194
|
// and overrides any credential already set above.
|
|
194
195
|
const authEnv = await ensureRemoteBuildAuthentication(cscLink, options.packager.buildResourcesDir);
|
|
195
|
-
(0,
|
|
196
|
+
(0, builder_util_runtime_1.deepAssign)(isolatedEnv, authEnv);
|
|
196
197
|
}
|
|
197
198
|
const projectAppDir = path.join(stageDir, "app");
|
|
198
199
|
if (!(await (0, fs_extra_1.pathExists)(projectAppDir))) {
|
|
@@ -291,7 +292,7 @@ async function ensureRemoteBuildAuthentication(cscLink, resourcesDir) {
|
|
|
291
292
|
*/
|
|
292
293
|
async function executeSnapcraftBuild(options) {
|
|
293
294
|
const { workDir, outputSnap: outputFileName, remoteBuild, useLXD, useMultipass, useDestructiveMode, isolatedEnv } = options;
|
|
294
|
-
let processedEnv = { ...process.env, ...isolatedEnv };
|
|
295
|
+
let processedEnv = { ...(0, builder_util_1.stripSensitiveEnvVars)(process.env), ...isolatedEnv };
|
|
295
296
|
// Use a UUID-based temp name as the --output target so the copy below doesn't
|
|
296
297
|
// depend on snapcraft's naming convention (which always uses underscores).
|
|
297
298
|
const tmpSnap = `eb-snap-${(0, crypto_1.randomUUID)().replace(/-/g, "")}.snap`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapcraftBuilder.js","sourceRoot":"","sources":["../../../src/targets/snap/snapcraftBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { deepAssign, InvalidConfigurationError, isEmptyOrSpaces, log, spawn } from \"builder-util\"\nimport * as childProcess from \"child_process\"\nimport { randomUUID } from \"crypto\"\nimport { resolveSnapCredentials } from \"electron-publish\"\nimport { copyFile, ensureDir, pathExists, readdir, remove } from \"fs-extra\"\nimport * as path from \"path\"\nimport * as util from \"util\"\nimport { LinuxPackager } from \"../../linuxPackager\"\nimport { RemoteBuildOptions } from \"../../options/SnapOptions\"\nimport { SnapcraftYAML } from \"./snapcraft\"\n\nconst execAsync = util.promisify(childProcess.exec)\n\nexport const SNAPCRAFT_YAML_OPTIONS = { indent: 2, lineWidth: -1, noRefs: true } as const\nexport const DEFAULT_STAGE_PACKAGES: string[] = [\"libnspr4\", \"libnss3\", \"libxss1\", \"libappindicator3-1\", \"libsecret-1-0\"]\n\ninterface BuildSnapOptions {\n /** The snapcraft YAML configuration */\n snapcraftConfig: SnapcraftYAML\n /** Working directory where snapcraft.yaml is written and the build executes */\n stageDir: string\n /** Whether to use remote build (builds on Launchpad) */\n remoteBuild?: RemoteBuildOptions\n /** Whether to use LXD for local builds */\n useLXD?: boolean\n /** Whether to use Multipass for local builds */\n useMultipass?: boolean\n /** Whether to use destructive mode (builds directly on host, Linux only) */\n useDestructiveMode?: boolean\n /** The snap output path */\n artifactPath: string\n /** LinuxPackager instance, used to resolve workspace dir for remote build authentication */\n packager: LinuxPackager\n /** Snap Store credentials from SnapcraftOptions root — base64 string or file path */\n cscLink?: string\n}\n\n/**\n * Validates snapcraft.yaml using snapcraft's built-in `expand-extensions` command.\n * Throws on failure. The caller in `buildSnap` catches this and treats it as a non-fatal warning.\n */\nasync function validateSnapcraftYamlWithCLI(workDir: string): Promise<void> {\n try {\n const { stdout } = await execAsync(\"snapcraft expand-extensions\", {\n cwd: workDir,\n timeout: 30000,\n })\n log.debug({ expandedYaml: stdout }, \"validated extended snapcraft.yaml\")\n } catch (error: any) {\n log.error({ error: error.message, stderr: error.stderr }, \"snapcraft.yaml validation failed\")\n throw new Error(\n `Invalid snapcraft.yaml: ${error.message}\\n` +\n `Snapcraft output: ${error.stderr || error.stdout || \"No output\"}\\n` +\n `Run 'snapcraft expand-extensions' in ${workDir} for more details`\n )\n }\n}\n\n/**\n * Validates snapcraft.yaml configuration with basic client-side checks\n * This is a fast pre-check before running the full CLI validation\n */\nfunction validateSnapcraftConfig(config: SnapcraftYAML): void {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Required fields\n if (!config.name) {\n errors.push(\"name is required\")\n }\n if (!config.base) {\n errors.push(\"base is required\")\n }\n if (!config.confinement) {\n errors.push(\"confinement is required\")\n }\n if (!config.parts || Object.keys(config.parts).length === 0) {\n errors.push(\"at least one part is required\")\n }\n\n // Name validation\n if (config.name) {\n if (!/^[a-z0-9-]*$/.test(config.name)) {\n errors.push(\"name must only contain lowercase letters, numbers, and hyphens\")\n }\n if (config.name.length > 40) {\n errors.push(\"name must be 40 characters or less\")\n }\n if (config.name.startsWith(\"-\") || config.name.endsWith(\"-\")) {\n errors.push(\"name cannot start or end with a hyphen\")\n }\n }\n\n // Parts validation\n Object.entries(config.parts).forEach(([partName, part]) => {\n if (!part.plugin) {\n errors.push(`part '${partName}' missing required 'plugin' field`)\n }\n })\n\n // Apps validation\n if (config.apps) {\n Object.entries(config.apps).forEach(([appName, app]) => {\n if (!app.command) {\n errors.push(`app '${appName}' missing required 'command' field`)\n }\n })\n }\n\n // Summary validation\n if (config.summary && config.summary.length > 78) {\n warnings.push(`summary is ${config.summary.length} characters (recommended: 78 or less)`)\n }\n\n // Log results\n if (errors.length > 0) {\n log.error({ errors }, \"snapcraft.yaml validation failed\")\n throw new InvalidConfigurationError(`Invalid snapcraft.yaml: ${errors.join(\", \")}`)\n }\n\n if (warnings.length > 0) {\n log.warn({ warnings }, \"snapcraft.yaml validation warnings\")\n }\n}\n\n/**\n * Retry wrapper for operations that may fail transiently\n */\nasync function executeWithRetry<T>(\n fn: () => Promise<T>,\n options: {\n maxRetries?: number\n retryDelay?: number\n retryableErrors?: string[]\n } = {}\n): Promise<T> {\n const { maxRetries = 3, retryDelay = 5000, retryableErrors = [\"network timeout\", \"connection refused\", \"temporary failure\", \"snap store error\"] } = options\n\n let lastError: Error | undefined\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n return await fn()\n } catch (error: any) {\n lastError = error\n const errorMessage = error.message?.toLowerCase() || \"\"\n const isRetryable = retryableErrors.some(pattern => errorMessage.includes(pattern))\n\n if (attempt < maxRetries && isRetryable) {\n log.warn({ attempt, maxRetries, error: error.message, retryIn: retryDelay }, \"build failed with retryable error, retrying...\")\n await new Promise(resolve => setTimeout(resolve, retryDelay))\n } else {\n break\n }\n }\n }\n\n throw lastError!\n}\n\n/**\n * Cleans up build artifacts\n */\nasync function cleanupBuildArtifacts(workDir: string): Promise<void> {\n const artifactsToClean = [\"parts\", \"stage\", \"prime\"]\n\n for (const artifact of artifactsToClean) {\n const artifactPath = path.join(workDir, artifact)\n try {\n await remove(artifactPath)\n log.debug({ artifact }, \"cleaned build artifact\")\n } catch (e: any) {\n log.debug({ artifact, error: e.message }, \"no build artifact to clean\")\n }\n }\n\n try {\n const files = await readdir(workDir)\n for (const file of files) {\n if (file.endsWith(\".snap\")) {\n await remove(path.join(workDir, file))\n log.debug({ file }, \"cleaned snap file\")\n }\n }\n } catch (e: any) {\n log.debug({ error: e.message }, \"no snap files to clean\")\n }\n}\n\nasync function copySnapToArtifactPath(workDir: string, outputBasename: string, outputFileName: string): Promise<string> {\n const snapInWorkDir = path.join(workDir, outputBasename)\n if (snapInWorkDir !== outputFileName) {\n await ensureDir(path.dirname(outputFileName))\n await copyFile(snapInWorkDir, outputFileName)\n log.debug({ from: snapInWorkDir, to: outputFileName }, \"copied snap from build dir to artifact path\")\n }\n return outputFileName\n}\n\n/**\n * Builds a snap package from SnapcraftYAML configuration.\n *\n * `SNAPCRAFT_NO_NETWORK` is intentionally **not** forced to `\"1\"` here.\n * All build modes (destructive-mode, LXD, Multipass, remote) require network\n * access to download stage-packages, the base image, and extensions.\n * To opt into an offline build, set `SNAPCRAFT_NO_NETWORK=1` in your environment.\n */\nexport async function buildSnap(options: BuildSnapOptions): Promise<string> {\n const { SNAPCRAFT_NO_NETWORK } = process.env\n const { snapcraftConfig, artifactPath, remoteBuild, stageDir, useLXD = false, useMultipass = false, useDestructiveMode = false, cscLink } = options\n\n const isolatedEnv: Record<string, string> = {\n ...(SNAPCRAFT_NO_NETWORK != null ? { SNAPCRAFT_NO_NETWORK } : {}),\n }\n if (useDestructiveMode) {\n isolatedEnv.SNAPCRAFT_BUILD_ENVIRONMENT = \"host\"\n }\n\n if (useLXD && process.platform !== \"linux\") {\n throw new InvalidConfigurationError(`useLXD is only supported on Linux. On ${process.platform}, use useMultipass or remoteBuild instead.`)\n }\n if (useDestructiveMode && process.platform !== \"linux\") {\n throw new InvalidConfigurationError(\n `useDestructiveMode is only supported on Linux (requires Ubuntu 24.04 host for core24). On ${process.platform}, use useMultipass or remoteBuild instead.`\n )\n }\n\n // Config validation — throws InvalidConfigurationError, no build artifacts exist yet.\n validateSnapcraftConfig(snapcraftConfig)\n\n try {\n await validateSnapcraftYamlWithCLI(stageDir)\n } catch (validationError: any) {\n log.warn({ error: validationError.message }, \"snapcraft CLI pre-validation failed (non-fatal), continuing build\")\n }\n\n await ensureSnapcraftInstalled()\n\n // Inject credentials for all build modes from snapcraft.cscLink / SNAP_CSC_LINK.\n const credEnv = await resolveSnapCredentials(cscLink, options.packager.buildResourcesDir)\n deepAssign(isolatedEnv, credEnv)\n\n if (remoteBuild?.enabled) {\n // Remote-build auth does additional checks (interactive session, throws on missing creds)\n // and overrides any credential already set above.\n const authEnv = await ensureRemoteBuildAuthentication(cscLink, options.packager.buildResourcesDir)\n deepAssign(isolatedEnv, authEnv)\n }\n\n const projectAppDir = path.join(stageDir, \"app\")\n if (!(await pathExists(projectAppDir))) {\n throw new InvalidConfigurationError(`snap build failed: expected app directory not found at ${projectAppDir}`)\n }\n log.debug({ appFiles: (await readdir(projectAppDir)).slice(0, 20) }, \"app directory contents (truncated)\")\n\n if (!remoteBuild?.enabled && !useLXD && !useMultipass && !useDestructiveMode && process.platform !== \"linux\") {\n throw new InvalidConfigurationError(\n `No snap build environment specified for ${process.platform}. Set one of: useMultipass, useLXD (Linux only), useDestructiveMode (Linux only), or remoteBuild.enabled`\n )\n }\n\n // Actual build — only this step can leave partial artifacts that need cleanup.\n try {\n return await executeWithRetry(\n () =>\n executeSnapcraftBuild({\n workDir: stageDir,\n remoteBuild,\n outputSnap: artifactPath,\n useLXD,\n useMultipass,\n useDestructiveMode,\n isolatedEnv: isolatedEnv,\n }),\n { maxRetries: remoteBuild?.enabled ? 3 : 1, retryDelay: 10000 }\n )\n } catch (error: any) {\n log.error({ error: error.message }, \"snap build failed\")\n await cleanupBuildArtifacts(stageDir).catch((cleanupError: any) => {\n log.warn({ error: cleanupError.message }, \"failed to cleanup build artifacts\")\n })\n throw error\n }\n}\n\n/**\n * Ensures snapcraft is installed on the system\n */\nasync function ensureSnapcraftInstalled(): Promise<void> {\n try {\n const { stdout } = await execAsync(\"snapcraft --version\")\n log.info({ version: stdout.trim() }, \"snapcraft found\")\n } catch (error: any) {\n log.error({ error: error.message }, \"snapcraft is not installed\")\n\n const platform = process.platform\n if (platform === \"linux\") {\n log.error(null, \"Install with: sudo snap install snapcraft --classic\")\n } else if (platform === \"darwin\") {\n log.error(null, \"Install snapcraft with: pip3 install snapcraft\")\n log.error(null, \"On macOS, useMultipass or remoteBuild are the only supported build modes for core24\")\n } else if (platform === \"win32\") {\n log.error(null, \"Install snapcraft via WSL2 or use remote-build\")\n log.error(null, \"See: https://snapcraft.io/docs/snapcraft-overview\")\n }\n\n throw new InvalidConfigurationError(\"snapcraft not found - please install snapcraft to continue\")\n }\n}\n\n/**\n * Resolves Snapcraft Store authentication for remote builds and returns the credential\n * env entries to inject. Returns an empty map when snapcraft can authenticate itself\n * (interactive session). Throws when no credential source is found.\n */\nasync function ensureRemoteBuildAuthentication(cscLink: string | undefined, resourcesDir: string | undefined): Promise<Record<string, string>> {\n log.debug(null, \"resolving remote build authentication...\")\n\n // 1. snapcraft.cscLink / SNAP_CSC_LINK — config-level or env credential (base64 or file path).\n // resolveSnapCredentials already ran for all build modes; re-run here so remote-build\n // gets the same result and the interactive-session fallback is only reached when neither is set.\n const credEnv = await resolveSnapCredentials(cscLink, resourcesDir)\n if (Object.keys(credEnv).length > 0) {\n return credEnv\n }\n\n // 2. SNAPCRAFT_STORE_CREDENTIALS env var — directly provide the credentials string (not base64-encoded).\n const SNAPCRAFT_STORE_CREDENTIALS = process.env.SNAPCRAFT_STORE_CREDENTIALS?.trim()\n if (!isEmptyOrSpaces(SNAPCRAFT_STORE_CREDENTIALS)) {\n log.debug(null, \"using SNAPCRAFT_STORE_CREDENTIALS from environment, verbatim\")\n return { SNAPCRAFT_STORE_CREDENTIALS }\n }\n\n // 3. Interactive snapcraft session.\n try {\n const { stdout } = await execAsync(\"snapcraft whoami\")\n if (stdout.includes(\"email:\")) {\n log.debug({ account: stdout.trim() }, \"already authenticated with snapcraft\")\n return {}\n }\n } catch {\n // Not logged in, fall through to error.\n }\n\n throw new InvalidConfigurationError(\n \"Snapcraft authentication required for remote build.\\n\" +\n \"Authenticate with one of any:\\n\" +\n \" 1. Set SNAP_CSC_LINK\\n\" +\n \" 2. Set snapcraft.cscLink in your build config\\n\" +\n \" 3. Run: snapcraft login\\n\" +\n \" 4. Set SNAPCRAFT_STORE_CREDENTIALS environment variable directly\"\n )\n}\n\ninterface ExecuteSnapcraftOptions {\n workDir: string\n outputSnap: string\n remoteBuild?: RemoteBuildOptions\n useLXD: boolean\n useMultipass: boolean\n useDestructiveMode: boolean\n isolatedEnv: Record<string, string>\n}\n\n/**\n * Executes the snapcraft build command\n */\nasync function executeSnapcraftBuild(options: ExecuteSnapcraftOptions): Promise<string> {\n const { workDir, outputSnap: outputFileName, remoteBuild, useLXD, useMultipass, useDestructiveMode, isolatedEnv } = options\n let processedEnv: NodeJS.ProcessEnv = { ...process.env, ...isolatedEnv }\n\n // Use a UUID-based temp name as the --output target so the copy below doesn't\n // depend on snapcraft's naming convention (which always uses underscores).\n const tmpSnap = `eb-snap-${randomUUID().replace(/-/g, \"\")}.snap`\n\n if (useDestructiveMode && !remoteBuild?.enabled) {\n return await runDestructiveBuild(workDir, processedEnv, tmpSnap, outputFileName)\n }\n\n const command = \"snapcraft\"\n const args: string[] = []\n\n if (remoteBuild?.enabled) {\n const remoteBuildArgs = generateRemoteBuildArgs(remoteBuild, workDir)\n // Remote build on Launchpad (works from any platform)\n args.push(...remoteBuildArgs.args)\n processedEnv = { ...processedEnv, ...remoteBuildArgs.isolatedEnv }\n } else {\n // `snapcraft pack` runs the full lifecycle (pull → build → stage → prime → pack).\n // snapcraft 8.x removed --use-multipass entirely; Multipass is now configured\n // via the SNAPCRAFT_BUILD_ENVIRONMENT env var (or auto-selected on macOS).\n // --use-lxd remains a supported CLI flag on `pack`.\n args.push(\"pack\")\n if (useLXD) {\n args.push(\"--use-lxd\")\n log.debug(null, \"using LXD for build\")\n } else if (useMultipass) {\n processedEnv.SNAPCRAFT_BUILD_ENVIRONMENT = \"multipass\"\n log.debug(null, \"using Multipass for build (via SNAPCRAFT_BUILD_ENVIRONMENT)\")\n } else {\n args.push(\"--output\", tmpSnap)\n }\n }\n\n if (log.isDebugEnabled) {\n args.push(\"--verbose\")\n }\n\n log.info({ workDir: log.filePath(workDir) }, \"executing snapcraft\")\n\n await spawn(command, args, {\n cwd: workDir,\n env: processedEnv,\n })\n\n if (remoteBuild?.enabled || useLXD || useMultipass) {\n // snapcraft names the output snap itself (e.g. <name>_<version>_<arch>.snap).\n // Each electron-builder build invocation targets exactly one arch, so exactly one snap is expected.\n const files = await readdir(workDir)\n const builtSnap = files.find(f => f.endsWith(\".snap\"))\n if (!builtSnap) {\n throw new Error(`Build succeeded but no .snap file found in ${workDir}`)\n }\n return copySnapToArtifactPath(workDir, builtSnap, outputFileName)\n }\n\n return copySnapToArtifactPath(workDir, tmpSnap, outputFileName)\n}\n\nfunction generateRemoteBuildArgs(remoteBuild: RemoteBuildOptions, workDir: string) {\n const isolatedEnv: Record<string, string> = {}\n const args: string[] = [\"remote-build\"]\n\n log.debug(null, \"using remote-build (Launchpad)\")\n\n // Add remote build specific options\n if (remoteBuild.launchpadUsername) {\n args.push(\"--user\", remoteBuild.launchpadUsername)\n }\n\n if (remoteBuild.acceptPublicUpload) {\n args.push(\"--launchpad-accept-public-upload\")\n } else {\n log.warn(null, \"your project will be publicly uploaded to Launchpad. Use `acceptPublicUpload: true` to suppress this warning\")\n }\n\n if (remoteBuild.privateProject) {\n args.push(\"--project\", remoteBuild.privateProject)\n log.debug({ project: remoteBuild.privateProject }, \"using private Launchpad project\")\n }\n\n if (remoteBuild.buildFor) {\n args.push(\"--build-for\", remoteBuild.buildFor)\n log.debug({ arch: remoteBuild.buildFor }, \"building for architecture\")\n }\n\n if (remoteBuild.recover) {\n args.push(\"--recover\")\n log.debug(null, \"recovering previous build\")\n }\n\n if (remoteBuild.strategy) {\n isolatedEnv.SNAPCRAFT_REMOTE_BUILD_STRATEGY = remoteBuild.strategy\n }\n\n if (remoteBuild.timeout) {\n args.push(\"--timeout\", String(remoteBuild.timeout))\n log.debug({ timeout: `${remoteBuild.timeout}s` }, \"build timeout configured\")\n }\n\n // Remote-build downloads the finished snap into workDir.\n // --output-dir (not --output <file>) lets snapcraft name the file itself.\n args.push(\"--output-dir\", workDir)\n\n return { args, isolatedEnv }\n}\n\n// Snapcraft 8 (craft-application) hangs after a successful destructive-mode\n// build in containerised environments (Docker/CI without snapd running).\n// craft-application's PackageService teardown tries to reach\n// /run/snapd-snap.socket (snapctl IPC) which doesn't exist without a live\n// snapd daemon — causing an indefinite block.\n//\n// Work-around: split into two steps:\n// 1. `snapcraft prime --destructive-mode` — runs pull/build/stage/prime,\n// exits cleanly (no post-pack teardown executed).\n// 2. `snapcraft pack <primeDir>` — packs the pre-primed directory without\n// running the full build lifecycle, avoiding the problematic teardown.\nasync function runDestructiveBuild(workDir: string, processedEnv: NodeJS.ProcessEnv, tmpSnap: string, outputFileName: string) {\n const primeArgs = [\"prime\", \"--destructive-mode\"]\n if (log.isDebugEnabled) {\n primeArgs.push(\"--verbose\")\n }\n log.info({ command: `snapcraft ${primeArgs.join(\" \")}`, workDir: log.filePath(workDir) }, \"snapcraft prime (1/2)\")\n await spawn(\"snapcraft\", primeArgs, {\n cwd: workDir,\n env: processedEnv,\n })\n\n const primeDir = path.join(workDir, \"prime\")\n const snapcraftPackArgs = [\"pack\", \"--output\", tmpSnap, primeDir]\n if (log.isDebugEnabled) {\n snapcraftPackArgs.push(\"--verbose\")\n }\n log.info({ command: `snapcraft ${snapcraftPackArgs.join(\" \")}`, workDir: log.filePath(workDir) }, \"snapcraft pack prime dir (2/2)\")\n await spawn(\"snapcraft\", snapcraftPackArgs, {\n cwd: workDir,\n env: processedEnv,\n })\n\n return copySnapToArtifactPath(workDir, tmpSnap, outputFileName)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"snapcraftBuilder.js","sourceRoot":"","sources":["../../../src/targets/snap/snapcraftBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { InvalidConfigurationError, isEmptyOrSpaces, log, spawn, stripSensitiveEnvVars } from \"builder-util\"\nimport * as childProcess from \"child_process\"\nimport { randomUUID } from \"crypto\"\nimport { resolveSnapCredentials } from \"electron-publish\"\nimport { copyFile, ensureDir, pathExists, readdir, remove } from \"fs-extra\"\nimport * as path from \"path\"\nimport * as util from \"util\"\nimport { LinuxPackager } from \"../../linuxPackager\"\nimport { RemoteBuildOptions } from \"../../options/SnapOptions\"\nimport { SnapcraftYAML } from \"./snapcraft\"\nimport { deepAssign } from \"builder-util-runtime\"\n\nconst execAsync = util.promisify(childProcess.exec)\n\nexport const SNAPCRAFT_YAML_OPTIONS = { indent: 2, lineWidth: -1, noRefs: true } as const\nexport const DEFAULT_STAGE_PACKAGES: string[] = [\"libnspr4\", \"libnss3\", \"libxss1\", \"libappindicator3-1\", \"libsecret-1-0\"]\n\ninterface BuildSnapOptions {\n /** The snapcraft YAML configuration */\n snapcraftConfig: SnapcraftYAML\n /** Working directory where snapcraft.yaml is written and the build executes */\n stageDir: string\n /** Whether to use remote build (builds on Launchpad) */\n remoteBuild?: RemoteBuildOptions\n /** Whether to use LXD for local builds */\n useLXD?: boolean\n /** Whether to use Multipass for local builds */\n useMultipass?: boolean\n /** Whether to use destructive mode (builds directly on host, Linux only) */\n useDestructiveMode?: boolean\n /** The snap output path */\n artifactPath: string\n /** LinuxPackager instance, used to resolve workspace dir for remote build authentication */\n packager: LinuxPackager\n /** Snap Store credentials from SnapcraftOptions root — base64 string or file path */\n cscLink?: string\n}\n\n/**\n * Validates snapcraft.yaml using snapcraft's built-in `expand-extensions` command.\n * Throws on failure. The caller in `buildSnap` catches this and treats it as a non-fatal warning.\n */\nasync function validateSnapcraftYamlWithCLI(workDir: string): Promise<void> {\n try {\n const { stdout } = await execAsync(\"snapcraft expand-extensions\", {\n cwd: workDir,\n timeout: 30000,\n })\n log.debug({ expandedYaml: stdout }, \"validated extended snapcraft.yaml\")\n } catch (error: any) {\n log.error({ error: error.message, stderr: error.stderr }, \"snapcraft.yaml validation failed\")\n throw new Error(\n `Invalid snapcraft.yaml: ${error.message}\\n` +\n `Snapcraft output: ${error.stderr || error.stdout || \"No output\"}\\n` +\n `Run 'snapcraft expand-extensions' in ${workDir} for more details`\n )\n }\n}\n\n/**\n * Validates snapcraft.yaml configuration with basic client-side checks\n * This is a fast pre-check before running the full CLI validation\n */\nfunction validateSnapcraftConfig(config: SnapcraftYAML): void {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Required fields\n if (!config.name) {\n errors.push(\"name is required\")\n }\n if (!config.base) {\n errors.push(\"base is required\")\n }\n if (!config.confinement) {\n errors.push(\"confinement is required\")\n }\n if (!config.parts || Object.keys(config.parts).length === 0) {\n errors.push(\"at least one part is required\")\n }\n\n // Name validation\n if (config.name) {\n if (!/^[a-z0-9-]*$/.test(config.name)) {\n errors.push(\"name must only contain lowercase letters, numbers, and hyphens\")\n }\n if (config.name.length > 40) {\n errors.push(\"name must be 40 characters or less\")\n }\n if (config.name.startsWith(\"-\") || config.name.endsWith(\"-\")) {\n errors.push(\"name cannot start or end with a hyphen\")\n }\n }\n\n // Parts validation\n Object.entries(config.parts).forEach(([partName, part]) => {\n if (!part.plugin) {\n errors.push(`part '${partName}' missing required 'plugin' field`)\n }\n })\n\n // Apps validation\n if (config.apps) {\n Object.entries(config.apps).forEach(([appName, app]) => {\n if (!app.command) {\n errors.push(`app '${appName}' missing required 'command' field`)\n }\n })\n }\n\n // Summary validation\n if (config.summary && config.summary.length > 78) {\n warnings.push(`summary is ${config.summary.length} characters (recommended: 78 or less)`)\n }\n\n // Log results\n if (errors.length > 0) {\n log.error({ errors }, \"snapcraft.yaml validation failed\")\n throw new InvalidConfigurationError(`Invalid snapcraft.yaml: ${errors.join(\", \")}`)\n }\n\n if (warnings.length > 0) {\n log.warn({ warnings }, \"snapcraft.yaml validation warnings\")\n }\n}\n\n/**\n * Retry wrapper for operations that may fail transiently\n */\nasync function executeWithRetry<T>(\n fn: () => Promise<T>,\n options: {\n maxRetries?: number\n retryDelay?: number\n retryableErrors?: string[]\n } = {}\n): Promise<T> {\n const { maxRetries = 3, retryDelay = 5000, retryableErrors = [\"network timeout\", \"connection refused\", \"temporary failure\", \"snap store error\"] } = options\n\n let lastError: Error | undefined\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n return await fn()\n } catch (error: any) {\n lastError = error\n const errorMessage = error.message?.toLowerCase() || \"\"\n const isRetryable = retryableErrors.some(pattern => errorMessage.includes(pattern))\n\n if (attempt < maxRetries && isRetryable) {\n log.warn({ attempt, maxRetries, error: error.message, retryIn: retryDelay }, \"build failed with retryable error, retrying...\")\n await new Promise(resolve => setTimeout(resolve, retryDelay))\n } else {\n break\n }\n }\n }\n\n throw lastError!\n}\n\n/**\n * Cleans up build artifacts\n */\nasync function cleanupBuildArtifacts(workDir: string): Promise<void> {\n const artifactsToClean = [\"parts\", \"stage\", \"prime\"]\n\n for (const artifact of artifactsToClean) {\n const artifactPath = path.join(workDir, artifact)\n try {\n await remove(artifactPath)\n log.debug({ artifact }, \"cleaned build artifact\")\n } catch (e: any) {\n log.debug({ artifact, error: e.message }, \"no build artifact to clean\")\n }\n }\n\n try {\n const files = await readdir(workDir)\n for (const file of files) {\n if (file.endsWith(\".snap\")) {\n await remove(path.join(workDir, file))\n log.debug({ file }, \"cleaned snap file\")\n }\n }\n } catch (e: any) {\n log.debug({ error: e.message }, \"no snap files to clean\")\n }\n}\n\nasync function copySnapToArtifactPath(workDir: string, outputBasename: string, outputFileName: string): Promise<string> {\n const snapInWorkDir = path.join(workDir, outputBasename)\n if (snapInWorkDir !== outputFileName) {\n await ensureDir(path.dirname(outputFileName))\n await copyFile(snapInWorkDir, outputFileName)\n log.debug({ from: snapInWorkDir, to: outputFileName }, \"copied snap from build dir to artifact path\")\n }\n return outputFileName\n}\n\n/**\n * Builds a snap package from SnapcraftYAML configuration.\n *\n * `SNAPCRAFT_NO_NETWORK` is intentionally **not** forced to `\"1\"` here.\n * All build modes (destructive-mode, LXD, Multipass, remote) require network\n * access to download stage-packages, the base image, and extensions.\n * To opt into an offline build, set `SNAPCRAFT_NO_NETWORK=1` in your environment.\n */\nexport async function buildSnap(options: BuildSnapOptions): Promise<string> {\n const { SNAPCRAFT_NO_NETWORK } = process.env\n const { snapcraftConfig, artifactPath, remoteBuild, stageDir, useLXD = false, useMultipass = false, useDestructiveMode = false, cscLink } = options\n\n const isolatedEnv: Record<string, string> = {\n ...(SNAPCRAFT_NO_NETWORK != null ? { SNAPCRAFT_NO_NETWORK } : {}),\n }\n if (useDestructiveMode) {\n isolatedEnv.SNAPCRAFT_BUILD_ENVIRONMENT = \"host\"\n }\n\n if (useLXD && process.platform !== \"linux\") {\n throw new InvalidConfigurationError(`useLXD is only supported on Linux. On ${process.platform}, use useMultipass or remoteBuild instead.`)\n }\n if (useDestructiveMode && process.platform !== \"linux\") {\n throw new InvalidConfigurationError(\n `useDestructiveMode is only supported on Linux (requires Ubuntu 24.04 host for core24). On ${process.platform}, use useMultipass or remoteBuild instead.`\n )\n }\n\n // Config validation — throws InvalidConfigurationError, no build artifacts exist yet.\n validateSnapcraftConfig(snapcraftConfig)\n\n try {\n await validateSnapcraftYamlWithCLI(stageDir)\n } catch (validationError: any) {\n log.warn({ error: validationError.message }, \"snapcraft CLI pre-validation failed (non-fatal), continuing build\")\n }\n\n await ensureSnapcraftInstalled()\n\n // Inject credentials for all build modes from snapcraft.cscLink / SNAP_CSC_LINK.\n const credEnv = await resolveSnapCredentials(cscLink, options.packager.buildResourcesDir)\n deepAssign(isolatedEnv, credEnv)\n\n if (remoteBuild?.enabled) {\n // Remote-build auth does additional checks (interactive session, throws on missing creds)\n // and overrides any credential already set above.\n const authEnv = await ensureRemoteBuildAuthentication(cscLink, options.packager.buildResourcesDir)\n deepAssign(isolatedEnv, authEnv)\n }\n\n const projectAppDir = path.join(stageDir, \"app\")\n if (!(await pathExists(projectAppDir))) {\n throw new InvalidConfigurationError(`snap build failed: expected app directory not found at ${projectAppDir}`)\n }\n log.debug({ appFiles: (await readdir(projectAppDir)).slice(0, 20) }, \"app directory contents (truncated)\")\n\n if (!remoteBuild?.enabled && !useLXD && !useMultipass && !useDestructiveMode && process.platform !== \"linux\") {\n throw new InvalidConfigurationError(\n `No snap build environment specified for ${process.platform}. Set one of: useMultipass, useLXD (Linux only), useDestructiveMode (Linux only), or remoteBuild.enabled`\n )\n }\n\n // Actual build — only this step can leave partial artifacts that need cleanup.\n try {\n return await executeWithRetry(\n () =>\n executeSnapcraftBuild({\n workDir: stageDir,\n remoteBuild,\n outputSnap: artifactPath,\n useLXD,\n useMultipass,\n useDestructiveMode,\n isolatedEnv: isolatedEnv,\n }),\n { maxRetries: remoteBuild?.enabled ? 3 : 1, retryDelay: 10000 }\n )\n } catch (error: any) {\n log.error({ error: error.message }, \"snap build failed\")\n await cleanupBuildArtifacts(stageDir).catch((cleanupError: any) => {\n log.warn({ error: cleanupError.message }, \"failed to cleanup build artifacts\")\n })\n throw error\n }\n}\n\n/**\n * Ensures snapcraft is installed on the system\n */\nasync function ensureSnapcraftInstalled(): Promise<void> {\n try {\n const { stdout } = await execAsync(\"snapcraft --version\")\n log.info({ version: stdout.trim() }, \"snapcraft found\")\n } catch (error: any) {\n log.error({ error: error.message }, \"snapcraft is not installed\")\n\n const platform = process.platform\n if (platform === \"linux\") {\n log.error(null, \"Install with: sudo snap install snapcraft --classic\")\n } else if (platform === \"darwin\") {\n log.error(null, \"Install snapcraft with: pip3 install snapcraft\")\n log.error(null, \"On macOS, useMultipass or remoteBuild are the only supported build modes for core24\")\n } else if (platform === \"win32\") {\n log.error(null, \"Install snapcraft via WSL2 or use remote-build\")\n log.error(null, \"See: https://snapcraft.io/docs/snapcraft-overview\")\n }\n\n throw new InvalidConfigurationError(\"snapcraft not found - please install snapcraft to continue\")\n }\n}\n\n/**\n * Resolves Snapcraft Store authentication for remote builds and returns the credential\n * env entries to inject. Returns an empty map when snapcraft can authenticate itself\n * (interactive session). Throws when no credential source is found.\n */\nasync function ensureRemoteBuildAuthentication(cscLink: string | undefined, resourcesDir: string | undefined): Promise<Record<string, string>> {\n log.debug(null, \"resolving remote build authentication...\")\n\n // 1. snapcraft.cscLink / SNAP_CSC_LINK — config-level or env credential (base64 or file path).\n // resolveSnapCredentials already ran for all build modes; re-run here so remote-build\n // gets the same result and the interactive-session fallback is only reached when neither is set.\n const credEnv = await resolveSnapCredentials(cscLink, resourcesDir)\n if (Object.keys(credEnv).length > 0) {\n return credEnv\n }\n\n // 2. SNAPCRAFT_STORE_CREDENTIALS env var — directly provide the credentials string (not base64-encoded).\n const SNAPCRAFT_STORE_CREDENTIALS = process.env.SNAPCRAFT_STORE_CREDENTIALS?.trim()\n if (!isEmptyOrSpaces(SNAPCRAFT_STORE_CREDENTIALS)) {\n log.debug(null, \"using SNAPCRAFT_STORE_CREDENTIALS from environment, verbatim\")\n return { SNAPCRAFT_STORE_CREDENTIALS }\n }\n\n // 3. Interactive snapcraft session.\n try {\n const { stdout } = await execAsync(\"snapcraft whoami\")\n if (stdout.includes(\"email:\")) {\n log.debug({ account: stdout.trim() }, \"already authenticated with snapcraft\")\n return {}\n }\n } catch {\n // Not logged in, fall through to error.\n }\n\n throw new InvalidConfigurationError(\n \"Snapcraft authentication required for remote build.\\n\" +\n \"Authenticate with one of any:\\n\" +\n \" 1. Set SNAP_CSC_LINK\\n\" +\n \" 2. Set snapcraft.cscLink in your build config\\n\" +\n \" 3. Run: snapcraft login\\n\" +\n \" 4. Set SNAPCRAFT_STORE_CREDENTIALS environment variable directly\"\n )\n}\n\ninterface ExecuteSnapcraftOptions {\n workDir: string\n outputSnap: string\n remoteBuild?: RemoteBuildOptions\n useLXD: boolean\n useMultipass: boolean\n useDestructiveMode: boolean\n isolatedEnv: Record<string, string>\n}\n\n/**\n * Executes the snapcraft build command\n */\nasync function executeSnapcraftBuild(options: ExecuteSnapcraftOptions): Promise<string> {\n const { workDir, outputSnap: outputFileName, remoteBuild, useLXD, useMultipass, useDestructiveMode, isolatedEnv } = options\n let processedEnv: NodeJS.ProcessEnv = { ...stripSensitiveEnvVars(process.env), ...isolatedEnv }\n\n // Use a UUID-based temp name as the --output target so the copy below doesn't\n // depend on snapcraft's naming convention (which always uses underscores).\n const tmpSnap = `eb-snap-${randomUUID().replace(/-/g, \"\")}.snap`\n\n if (useDestructiveMode && !remoteBuild?.enabled) {\n return await runDestructiveBuild(workDir, processedEnv, tmpSnap, outputFileName)\n }\n\n const command = \"snapcraft\"\n const args: string[] = []\n\n if (remoteBuild?.enabled) {\n const remoteBuildArgs = generateRemoteBuildArgs(remoteBuild, workDir)\n // Remote build on Launchpad (works from any platform)\n args.push(...remoteBuildArgs.args)\n processedEnv = { ...processedEnv, ...remoteBuildArgs.isolatedEnv }\n } else {\n // `snapcraft pack` runs the full lifecycle (pull → build → stage → prime → pack).\n // snapcraft 8.x removed --use-multipass entirely; Multipass is now configured\n // via the SNAPCRAFT_BUILD_ENVIRONMENT env var (or auto-selected on macOS).\n // --use-lxd remains a supported CLI flag on `pack`.\n args.push(\"pack\")\n if (useLXD) {\n args.push(\"--use-lxd\")\n log.debug(null, \"using LXD for build\")\n } else if (useMultipass) {\n processedEnv.SNAPCRAFT_BUILD_ENVIRONMENT = \"multipass\"\n log.debug(null, \"using Multipass for build (via SNAPCRAFT_BUILD_ENVIRONMENT)\")\n } else {\n args.push(\"--output\", tmpSnap)\n }\n }\n\n if (log.isDebugEnabled) {\n args.push(\"--verbose\")\n }\n\n log.info({ workDir: log.filePath(workDir) }, \"executing snapcraft\")\n\n await spawn(command, args, {\n cwd: workDir,\n env: processedEnv,\n })\n\n if (remoteBuild?.enabled || useLXD || useMultipass) {\n // snapcraft names the output snap itself (e.g. <name>_<version>_<arch>.snap).\n // Each electron-builder build invocation targets exactly one arch, so exactly one snap is expected.\n const files = await readdir(workDir)\n const builtSnap = files.find(f => f.endsWith(\".snap\"))\n if (!builtSnap) {\n throw new Error(`Build succeeded but no .snap file found in ${workDir}`)\n }\n return copySnapToArtifactPath(workDir, builtSnap, outputFileName)\n }\n\n return copySnapToArtifactPath(workDir, tmpSnap, outputFileName)\n}\n\nfunction generateRemoteBuildArgs(remoteBuild: RemoteBuildOptions, workDir: string) {\n const isolatedEnv: Record<string, string> = {}\n const args: string[] = [\"remote-build\"]\n\n log.debug(null, \"using remote-build (Launchpad)\")\n\n // Add remote build specific options\n if (remoteBuild.launchpadUsername) {\n args.push(\"--user\", remoteBuild.launchpadUsername)\n }\n\n if (remoteBuild.acceptPublicUpload) {\n args.push(\"--launchpad-accept-public-upload\")\n } else {\n log.warn(null, \"your project will be publicly uploaded to Launchpad. Use `acceptPublicUpload: true` to suppress this warning\")\n }\n\n if (remoteBuild.privateProject) {\n args.push(\"--project\", remoteBuild.privateProject)\n log.debug({ project: remoteBuild.privateProject }, \"using private Launchpad project\")\n }\n\n if (remoteBuild.buildFor) {\n args.push(\"--build-for\", remoteBuild.buildFor)\n log.debug({ arch: remoteBuild.buildFor }, \"building for architecture\")\n }\n\n if (remoteBuild.recover) {\n args.push(\"--recover\")\n log.debug(null, \"recovering previous build\")\n }\n\n if (remoteBuild.strategy) {\n isolatedEnv.SNAPCRAFT_REMOTE_BUILD_STRATEGY = remoteBuild.strategy\n }\n\n if (remoteBuild.timeout) {\n args.push(\"--timeout\", String(remoteBuild.timeout))\n log.debug({ timeout: `${remoteBuild.timeout}s` }, \"build timeout configured\")\n }\n\n // Remote-build downloads the finished snap into workDir.\n // --output-dir (not --output <file>) lets snapcraft name the file itself.\n args.push(\"--output-dir\", workDir)\n\n return { args, isolatedEnv }\n}\n\n// Snapcraft 8 (craft-application) hangs after a successful destructive-mode\n// build in containerised environments (Docker/CI without snapd running).\n// craft-application's PackageService teardown tries to reach\n// /run/snapd-snap.socket (snapctl IPC) which doesn't exist without a live\n// snapd daemon — causing an indefinite block.\n//\n// Work-around: split into two steps:\n// 1. `snapcraft prime --destructive-mode` — runs pull/build/stage/prime,\n// exits cleanly (no post-pack teardown executed).\n// 2. `snapcraft pack <primeDir>` — packs the pre-primed directory without\n// running the full build lifecycle, avoiding the problematic teardown.\nasync function runDestructiveBuild(workDir: string, processedEnv: NodeJS.ProcessEnv, tmpSnap: string, outputFileName: string) {\n const primeArgs = [\"prime\", \"--destructive-mode\"]\n if (log.isDebugEnabled) {\n primeArgs.push(\"--verbose\")\n }\n log.info({ command: `snapcraft ${primeArgs.join(\" \")}`, workDir: log.filePath(workDir) }, \"snapcraft prime (1/2)\")\n await spawn(\"snapcraft\", primeArgs, {\n cwd: workDir,\n env: processedEnv,\n })\n\n const primeDir = path.join(workDir, \"prime\")\n const snapcraftPackArgs = [\"pack\", \"--output\", tmpSnap, primeDir]\n if (log.isDebugEnabled) {\n snapcraftPackArgs.push(\"--verbose\")\n }\n log.info({ command: `snapcraft ${snapcraftPackArgs.join(\" \")}`, workDir: log.filePath(workDir) }, \"snapcraft pack prime dir (2/2)\")\n await spawn(\"snapcraft\", snapcraftPackArgs, {\n cwd: workDir,\n env: processedEnv,\n })\n\n return copySnapToArtifactPath(workDir, tmpSnap, outputFileName)\n}\n"]}
|
package/out/toolsets/linux.js
CHANGED
|
@@ -34,7 +34,7 @@ const linuxToolsMacChecksums = {
|
|
|
34
34
|
"linux-tools-mac-darwin-x86_64.tar.gz": "7ee26dfbd0d2a4c2c83b55a9416a30cc84876eef01c6497ca49bb016a190c726",
|
|
35
35
|
};
|
|
36
36
|
async function getLinuxToolsPath() {
|
|
37
|
-
const envPath = await (0, builder_util_2.resolveEnvToolsetPath)("LINUX_TOOLS_MAC_PATH");
|
|
37
|
+
const envPath = await (0, builder_util_2.resolveEnvToolsetPath)("LINUX_TOOLS_MAC_PATH", "directory");
|
|
38
38
|
if (envPath != null) {
|
|
39
39
|
return envPath;
|
|
40
40
|
}
|
|
@@ -60,7 +60,7 @@ async function getLinuxToolsMacToolset() {
|
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
async function getFpmPath() {
|
|
63
|
-
const customFpmPath = await (0, builder_util_2.resolveEnvToolsetPath)("CUSTOM_FPM_PATH");
|
|
63
|
+
const customFpmPath = await (0, builder_util_2.resolveEnvToolsetPath)("CUSTOM_FPM_PATH", "file");
|
|
64
64
|
if (customFpmPath != null) {
|
|
65
65
|
return customFpmPath;
|
|
66
66
|
}
|
|
@@ -101,7 +101,7 @@ async function getAppImageTools(appimageToolVersion, targetArch) {
|
|
|
101
101
|
runtimeLibraries: path.resolve(artifactPath, "lib", runtimeArch),
|
|
102
102
|
});
|
|
103
103
|
const filenameWithExt = "appimage-tools-runtime-20251108.tar.gz";
|
|
104
|
-
const envPath = await (0, builder_util_2.resolveEnvToolsetPath)("APPIMAGE_TOOLS_PATH");
|
|
104
|
+
const envPath = await (0, builder_util_2.resolveEnvToolsetPath)("APPIMAGE_TOOLS_PATH", "directory");
|
|
105
105
|
if (envPath != null) {
|
|
106
106
|
return getPaths(envPath);
|
|
107
107
|
}
|