app-builder-lib 26.11.1 → 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 +36 -6
- package/out/binDownload.js.map +1 -1
- package/out/codeSign/codesign.js +7 -23
- package/out/codeSign/codesign.js.map +1 -1
- package/out/codeSign/macCodeSign.js +2 -2
- package/out/codeSign/macCodeSign.js.map +1 -1
- package/out/configuration.d.ts +36 -2
- package/out/configuration.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/fileMatcher.d.ts +2 -1
- package/out/fileMatcher.js +0 -1
- package/out/fileMatcher.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/index.d.ts +1 -1
- package/out/index.js.map +1 -1
- package/out/linuxPackager.js +1 -1
- package/out/linuxPackager.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/node-module-collector/moduleManager.d.ts +1 -0
- package/out/node-module-collector/moduleManager.js +2 -0
- package/out/node-module-collector/moduleManager.js.map +1 -1
- package/out/node-module-collector/nodeModulesCollector.d.ts +3 -2
- package/out/node-module-collector/nodeModulesCollector.js +23 -3
- package/out/node-module-collector/nodeModulesCollector.js.map +1 -1
- package/out/node-module-collector/pnpmNodeModulesCollector.js +5 -1
- package/out/node-module-collector/pnpmNodeModulesCollector.js.map +1 -1
- package/out/options/SnapOptions.d.ts +415 -56
- package/out/options/SnapOptions.js.map +1 -1
- package/out/options/linuxOptions.d.ts +8 -0
- package/out/options/linuxOptions.js.map +1 -1
- package/out/packager.js +4 -4
- package/out/packager.js.map +1 -1
- package/out/platformPackager.js +9 -5
- package/out/platformPackager.js.map +1 -1
- package/out/publish/PublishManager.js +2 -2
- package/out/publish/PublishManager.js.map +1 -1
- package/out/publish/updateInfoBuilder.d.ts +4 -0
- package/out/publish/updateInfoBuilder.js +14 -2
- package/out/publish/updateInfoBuilder.js.map +1 -1
- package/out/targets/AppxTarget.js +2 -1
- package/out/targets/AppxTarget.js.map +1 -1
- package/out/targets/ArchiveTarget.js +1 -1
- package/out/targets/ArchiveTarget.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 +4 -1
- package/out/targets/LinuxTargetHelper.js +134 -8
- package/out/targets/LinuxTargetHelper.js.map +1 -1
- package/out/targets/MsiTarget.js +7 -4
- 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/archive.js +2 -6
- package/out/targets/archive.js.map +1 -1
- package/out/targets/nsis/NsisTarget.js +26 -16
- 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/nsis/nsisUtil.d.ts +0 -7
- package/out/targets/nsis/nsisUtil.js +5 -48
- package/out/targets/nsis/nsisUtil.js.map +1 -1
- package/out/targets/pkg.js +1 -1
- package/out/targets/pkg.js.map +1 -1
- package/out/targets/snap/SnapTarget.d.ts +36 -0
- package/out/targets/snap/SnapTarget.js +105 -0
- package/out/targets/snap/SnapTarget.js.map +1 -0
- package/out/targets/snap/core24.d.ts +52 -0
- package/out/targets/snap/core24.js +448 -0
- package/out/targets/snap/core24.js.map +1 -0
- package/out/targets/snap/coreCustom.d.ts +28 -0
- package/out/targets/snap/coreCustom.js +63 -0
- package/out/targets/snap/coreCustom.js.map +1 -0
- package/out/targets/snap/coreLegacy.d.ts +20 -0
- package/out/targets/snap/coreLegacy.js +278 -0
- package/out/targets/snap/coreLegacy.js.map +1 -0
- package/out/targets/snap/snapcraftBuilder.d.ts +39 -0
- package/out/targets/snap/snapcraftBuilder.js +419 -0
- package/out/targets/snap/snapcraftBuilder.js.map +1 -0
- package/out/toolsets/linux.d.ts +5 -0
- package/out/toolsets/linux.js +55 -23
- package/out/toolsets/linux.js.map +1 -1
- package/out/toolsets/windows.d.ts +19 -0
- package/out/toolsets/windows.js +126 -18
- 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 +6 -1
- package/out/util/electronGet.js +15 -7
- package/out/util/electronGet.js.map +1 -1
- package/out/util/envPath.d.ts +2 -0
- package/out/util/envPath.js +28 -0
- package/out/util/envPath.js.map +1 -0
- package/out/util/packageMetadata.js +2 -1
- package/out/util/packageMetadata.js.map +1 -1
- package/out/util/toolsetLock.d.ts +1 -0
- package/out/util/toolsetLock.js +23 -0
- package/out/util/toolsetLock.js.map +1 -0
- 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/out/vm/vm.d.ts +1 -0
- package/out/vm/vm.js +18 -0
- package/out/vm/vm.js.map +1 -1
- package/package.json +9 -9
- package/scheme.json +1401 -107
- package/templates/nsis/multiUser.nsh +14 -12
- package/out/targets/snap.d.ts +0 -17
- package/out/targets/snap.js +0 -337
- package/out/targets/snap.js.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Arch } from "builder-util";
|
|
2
|
+
import { SnapOptions } from "../../options/SnapOptions";
|
|
3
|
+
import { SnapCore } from "./SnapTarget";
|
|
4
|
+
import { SnapcraftYAML } from "./snapcraft";
|
|
5
|
+
export declare class SnapCoreLegacy extends SnapCore<SnapOptions> {
|
|
6
|
+
private isUseTemplateApp;
|
|
7
|
+
defaultPlugs: string[];
|
|
8
|
+
private replaceDefault;
|
|
9
|
+
createDescriptor(arch: Arch): Promise<SnapcraftYAML>;
|
|
10
|
+
buildSnap(props: {
|
|
11
|
+
snap: any;
|
|
12
|
+
appOutDir: string;
|
|
13
|
+
stageDir: string;
|
|
14
|
+
snapArch: Arch;
|
|
15
|
+
artifactPath: string;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
private normalizePlugConfiguration;
|
|
18
|
+
private isBrowserSandboxAllowed;
|
|
19
|
+
private archNameToTriplet;
|
|
20
|
+
}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SnapCoreLegacy = void 0;
|
|
4
|
+
const builder_util_1 = require("builder-util");
|
|
5
|
+
const builder_util_runtime_1 = require("builder-util-runtime");
|
|
6
|
+
const fs_extra_1 = require("fs-extra");
|
|
7
|
+
const js_yaml_1 = require("js-yaml");
|
|
8
|
+
const path = require("path");
|
|
9
|
+
const pathManager_1 = require("../../util/pathManager");
|
|
10
|
+
const SnapTarget_1 = require("./SnapTarget");
|
|
11
|
+
const snapcraftBuilder_1 = require("./snapcraftBuilder");
|
|
12
|
+
// Handles core18/core20/core22 snaps via the app-builder binary (not the snapcraft CLI).
|
|
13
|
+
// See: https://github.com/develar/app-builder/blob/master/pkg/package-format/snap
|
|
14
|
+
class SnapCoreLegacy extends SnapTarget_1.SnapCore {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.isUseTemplateApp = false;
|
|
18
|
+
this.defaultPlugs = ["desktop", "desktop-legacy", "home", "x11", "wayland", "unity7", "browser-support", "network", "gsettings", "audio-playback", "pulseaudio", "opengl"];
|
|
19
|
+
}
|
|
20
|
+
replaceDefault(inList, defaultList) {
|
|
21
|
+
const result = (0, builder_util_1.replaceDefault)(inList, defaultList);
|
|
22
|
+
// Any customisation opts out of the pre-built template app.
|
|
23
|
+
if (result !== defaultList) {
|
|
24
|
+
this.isUseTemplateApp = false;
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
async createDescriptor(arch) {
|
|
29
|
+
const appInfo = this.packager.appInfo;
|
|
30
|
+
const snapName = this.packager.executableName.toLowerCase();
|
|
31
|
+
const options = this.options;
|
|
32
|
+
const plugs = this.normalizePlugConfiguration(this.options.plugs);
|
|
33
|
+
const plugNames = this.replaceDefault(plugs == null ? null : Object.getOwnPropertyNames(plugs), this.defaultPlugs);
|
|
34
|
+
const slots = this.normalizePlugConfiguration(this.options.slots);
|
|
35
|
+
const buildPackages = (0, builder_util_runtime_1.asArray)(options.buildPackages);
|
|
36
|
+
const stagePackages = this.replaceDefault(options.stagePackages, snapcraftBuilder_1.DEFAULT_STAGE_PACKAGES);
|
|
37
|
+
const stageSet = new Set(stagePackages);
|
|
38
|
+
const stageMatchesDefaults = stagePackages.length === snapcraftBuilder_1.DEFAULT_STAGE_PACKAGES.length && snapcraftBuilder_1.DEFAULT_STAGE_PACKAGES.every((p) => stageSet.has(p));
|
|
39
|
+
// Template app is only available for x64/armv7l, and only when no packages are customised.
|
|
40
|
+
this.isUseTemplateApp = this.options.useTemplateApp !== false && (arch === builder_util_1.Arch.x64 || arch === builder_util_1.Arch.armv7l) && buildPackages.length === 0 && stageMatchesDefaults;
|
|
41
|
+
const appDescriptor = {
|
|
42
|
+
command: "command.sh",
|
|
43
|
+
plugs: plugNames,
|
|
44
|
+
adapter: "none",
|
|
45
|
+
};
|
|
46
|
+
const snap = (0, js_yaml_1.load)(await (0, fs_extra_1.readFile)(path.join((0, pathManager_1.getTemplatePath)("snap"), "snapcraft.yaml"), "utf-8"));
|
|
47
|
+
if (this.isUseTemplateApp) {
|
|
48
|
+
delete appDescriptor.adapter;
|
|
49
|
+
}
|
|
50
|
+
if (options.base != null) {
|
|
51
|
+
snap.base = options.base;
|
|
52
|
+
// from core22 onwards adapter is legacy
|
|
53
|
+
if (Number(snap.base.split("core")[1]) >= 22) {
|
|
54
|
+
delete appDescriptor.adapter;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (options.grade != null) {
|
|
58
|
+
snap.grade = options.grade;
|
|
59
|
+
}
|
|
60
|
+
if (options.confinement != null) {
|
|
61
|
+
snap.confinement = options.confinement;
|
|
62
|
+
}
|
|
63
|
+
if (options.appPartStage != null) {
|
|
64
|
+
snap.parts.app.stage = options.appPartStage;
|
|
65
|
+
}
|
|
66
|
+
if (options.layout != null) {
|
|
67
|
+
snap.layout = options.layout;
|
|
68
|
+
}
|
|
69
|
+
if (slots != null) {
|
|
70
|
+
appDescriptor.slots = Object.getOwnPropertyNames(slots);
|
|
71
|
+
for (const slotName of appDescriptor.slots) {
|
|
72
|
+
if (!(0, builder_util_runtime_1.isValidKey)(slotName)) {
|
|
73
|
+
throw new Error(`Invalid plug/slot name: ${slotName}`);
|
|
74
|
+
}
|
|
75
|
+
const slotOptions = slots[slotName];
|
|
76
|
+
if (slotOptions == null) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (!snap.slots) {
|
|
80
|
+
snap.slots = {};
|
|
81
|
+
}
|
|
82
|
+
snap.slots[slotName] = slotOptions;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
(0, builder_util_runtime_1.deepAssign)(snap, {
|
|
86
|
+
name: snapName,
|
|
87
|
+
version: appInfo.version,
|
|
88
|
+
title: options.title || appInfo.productName,
|
|
89
|
+
summary: options.summary || appInfo.productName,
|
|
90
|
+
compression: options.compression,
|
|
91
|
+
description: this.helper.getDescription(options),
|
|
92
|
+
architectures: [(0, builder_util_1.toLinuxArchString)(arch, "snap")],
|
|
93
|
+
apps: {
|
|
94
|
+
[snapName]: appDescriptor,
|
|
95
|
+
},
|
|
96
|
+
parts: {
|
|
97
|
+
app: {
|
|
98
|
+
"stage-packages": stagePackages,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
if (options.autoStart) {
|
|
103
|
+
appDescriptor.autostart = `${snap.name}.desktop`;
|
|
104
|
+
}
|
|
105
|
+
if (options.confinement === "classic") {
|
|
106
|
+
delete appDescriptor.plugs;
|
|
107
|
+
delete snap.plugs;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const archTriplet = this.archNameToTriplet(arch);
|
|
111
|
+
const environment = {
|
|
112
|
+
PATH: "$SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin:$PATH",
|
|
113
|
+
SNAP_DESKTOP_RUNTIME: "$SNAP/gnome-platform",
|
|
114
|
+
LD_LIBRARY_PATH: [
|
|
115
|
+
"$SNAP_LIBRARY_PATH",
|
|
116
|
+
"$SNAP/lib:$SNAP/usr/lib:$SNAP/lib/" + archTriplet + ":$SNAP/usr/lib/" + archTriplet,
|
|
117
|
+
"$LD_LIBRARY_PATH:$SNAP/lib:$SNAP/usr/lib",
|
|
118
|
+
"$SNAP/lib/" + archTriplet + ":$SNAP/usr/lib/" + archTriplet,
|
|
119
|
+
].join(":"),
|
|
120
|
+
...options.environment,
|
|
121
|
+
};
|
|
122
|
+
// Determine whether Wayland should be disabled based on:
|
|
123
|
+
// - Electron version (<38 historically had Wayland disabled)
|
|
124
|
+
// - Explicit allowNativeWayland override.
|
|
125
|
+
// https://github.com/electron-userland/electron-builder/issues/9320
|
|
126
|
+
const allow = options.allowNativeWayland;
|
|
127
|
+
const isOldElectron = !this.helper.isElectronVersionGreaterOrEqualThan("38.0.0", "7.0.0");
|
|
128
|
+
if ((allow == null && isOldElectron) || // No explicit option -> use legacy behavior for old Electron
|
|
129
|
+
allow === false // Explicitly disallowed
|
|
130
|
+
) {
|
|
131
|
+
environment.DISABLE_WAYLAND = "1";
|
|
132
|
+
}
|
|
133
|
+
appDescriptor.environment = environment;
|
|
134
|
+
if (plugs != null) {
|
|
135
|
+
for (const plugName of plugNames) {
|
|
136
|
+
if (!(0, builder_util_runtime_1.isValidKey)(plugName)) {
|
|
137
|
+
throw new Error(`Invalid plug/slot name: ${plugName}`);
|
|
138
|
+
}
|
|
139
|
+
const plugOptions = plugs[plugName];
|
|
140
|
+
if (plugOptions == null) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (!snap.plugs) {
|
|
144
|
+
snap.plugs = {};
|
|
145
|
+
}
|
|
146
|
+
snap.plugs[plugName] = plugOptions;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (buildPackages.length > 0) {
|
|
151
|
+
snap.parts.app["build-packages"] = buildPackages;
|
|
152
|
+
}
|
|
153
|
+
if (options.after != null) {
|
|
154
|
+
snap.parts.app.after = options.after;
|
|
155
|
+
}
|
|
156
|
+
if (options.assumes != null) {
|
|
157
|
+
snap.assumes = (0, builder_util_runtime_1.asArray)(options.assumes);
|
|
158
|
+
}
|
|
159
|
+
return snap;
|
|
160
|
+
}
|
|
161
|
+
async buildSnap(props) {
|
|
162
|
+
var _a;
|
|
163
|
+
const { snap, appOutDir, stageDir, snapArch, artifactPath } = props;
|
|
164
|
+
const args = [
|
|
165
|
+
"snap",
|
|
166
|
+
"--app",
|
|
167
|
+
appOutDir,
|
|
168
|
+
"--stage",
|
|
169
|
+
stageDir,
|
|
170
|
+
"--arch",
|
|
171
|
+
(0, builder_util_1.toLinuxArchString)(snapArch, "snap"),
|
|
172
|
+
"--output",
|
|
173
|
+
artifactPath,
|
|
174
|
+
"--executable",
|
|
175
|
+
this.packager.executableName,
|
|
176
|
+
];
|
|
177
|
+
await this.helper.icons;
|
|
178
|
+
if (this.helper.maxIconPath != null) {
|
|
179
|
+
if (!this.isUseTemplateApp) {
|
|
180
|
+
snap.icon = "snap/gui/icon.png";
|
|
181
|
+
}
|
|
182
|
+
args.push("--icon", this.helper.maxIconPath);
|
|
183
|
+
}
|
|
184
|
+
// snapcraft.yaml inside a snap directory, or snap.yaml inside meta/ for template builds
|
|
185
|
+
const snapMetaDir = path.join(stageDir, this.isUseTemplateApp ? "meta" : "snap");
|
|
186
|
+
const desktopFile = path.join(snapMetaDir, "gui", `${snap.name}.desktop`);
|
|
187
|
+
await this.helper.writeDesktopEntry(this.options, this.packager.executableName + " %U", desktopFile, {
|
|
188
|
+
// tslint:disable:no-invalid-template-strings
|
|
189
|
+
Icon: "${SNAP}/meta/gui/icon.png",
|
|
190
|
+
});
|
|
191
|
+
const extraAppArgs = (_a = this.options.executableArgs) !== null && _a !== void 0 ? _a : [];
|
|
192
|
+
if (this.helper.isElectronVersionGreaterOrEqualThan("5.0.0") && !this.isBrowserSandboxAllowed(snap)) {
|
|
193
|
+
const noSandboxArg = "--no-sandbox";
|
|
194
|
+
if (!extraAppArgs.includes(noSandboxArg)) {
|
|
195
|
+
extraAppArgs.push(noSandboxArg);
|
|
196
|
+
}
|
|
197
|
+
if (this.isUseTemplateApp) {
|
|
198
|
+
args.push("--exclude", "chrome-sandbox");
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (extraAppArgs.length > 0) {
|
|
202
|
+
args.push("--extraAppArgs=" + extraAppArgs.join(" "));
|
|
203
|
+
}
|
|
204
|
+
if (snap.compression != null) {
|
|
205
|
+
args.push("--compression", snap.compression);
|
|
206
|
+
}
|
|
207
|
+
if (this.isUseTemplateApp) {
|
|
208
|
+
// remove fields that are valid in snapcraft.yaml but not in snap.yaml (template format)
|
|
209
|
+
const fieldsToStrip = ["compression", "contact", "donation", "issues", "parts", "source-code", "website"];
|
|
210
|
+
for (const field of fieldsToStrip) {
|
|
211
|
+
delete snap[field];
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (this.packager.packagerOptions.effectiveOptionComputed != null && (await this.packager.packagerOptions.effectiveOptionComputed({ snap, desktopFile, args }))) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
await (0, fs_extra_1.outputFile)(path.join(snapMetaDir, this.isUseTemplateApp ? "snap.yaml" : "snapcraft.yaml"), (0, builder_util_1.serializeToYaml)(snap));
|
|
218
|
+
const hooksDir = await this.packager.getResource(this.options.hooks, "snap-hooks");
|
|
219
|
+
if (hooksDir != null) {
|
|
220
|
+
args.push("--hooks", hooksDir);
|
|
221
|
+
}
|
|
222
|
+
if (this.isUseTemplateApp) {
|
|
223
|
+
// Map TypeScript Arch enum to the string keys expected by app-builder's ResolveTemplateDir.
|
|
224
|
+
// The previous code passed the raw numeric enum value (e.g. Arch.x64 = 1 → "electron4:1")
|
|
225
|
+
// which fell through to the default case and was treated as a bare URL, failing with
|
|
226
|
+
// "unsupported protocol scheme". The switch in snap.go expects "electron4:amd64" / "electron4:armhf".
|
|
227
|
+
const templateArch = snapArch === builder_util_1.Arch.x64 ? "amd64" : "armhf";
|
|
228
|
+
args.push("--template-url", `electron4:${templateArch}`);
|
|
229
|
+
}
|
|
230
|
+
await (0, builder_util_1.executeAppBuilder)(args);
|
|
231
|
+
}
|
|
232
|
+
normalizePlugConfiguration(raw) {
|
|
233
|
+
if (raw == null) {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
const result = {};
|
|
237
|
+
for (const item of Array.isArray(raw) ? raw : [raw]) {
|
|
238
|
+
if (typeof item === "string") {
|
|
239
|
+
if (!(0, builder_util_runtime_1.isValidKey)(item)) {
|
|
240
|
+
throw new Error(`Invalid plug/slot name: ${item}`);
|
|
241
|
+
}
|
|
242
|
+
result[item] = null;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
(0, builder_util_runtime_1.deepAssign)(result, item);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
isBrowserSandboxAllowed(snap) {
|
|
251
|
+
if (snap.plugs != null) {
|
|
252
|
+
for (const plugName of Object.keys(snap.plugs)) {
|
|
253
|
+
const plug = snap.plugs[plugName];
|
|
254
|
+
if (plug.interface === "browser-support" && plug["allow-sandbox"] === true) {
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
archNameToTriplet(arch) {
|
|
262
|
+
switch (arch) {
|
|
263
|
+
case builder_util_1.Arch.x64:
|
|
264
|
+
return "x86_64-linux-gnu";
|
|
265
|
+
case builder_util_1.Arch.ia32:
|
|
266
|
+
return "i386-linux-gnu";
|
|
267
|
+
case builder_util_1.Arch.armv7l:
|
|
268
|
+
// noinspection SpellCheckingInspection
|
|
269
|
+
return "arm-linux-gnueabihf";
|
|
270
|
+
case builder_util_1.Arch.arm64:
|
|
271
|
+
return "aarch64-linux-gnu";
|
|
272
|
+
default:
|
|
273
|
+
throw new Error(`Unsupported arch ${arch}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
exports.SnapCoreLegacy = SnapCoreLegacy;
|
|
278
|
+
//# sourceMappingURL=coreLegacy.js.map
|
|
@@ -0,0 +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, 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"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { LinuxPackager } from "../../linuxPackager";
|
|
2
|
+
import { RemoteBuildOptions } from "../../options/SnapOptions";
|
|
3
|
+
import { SnapcraftYAML } from "./snapcraft";
|
|
4
|
+
export declare const SNAPCRAFT_YAML_OPTIONS: {
|
|
5
|
+
readonly indent: 2;
|
|
6
|
+
readonly lineWidth: -1;
|
|
7
|
+
readonly noRefs: true;
|
|
8
|
+
};
|
|
9
|
+
export declare const DEFAULT_STAGE_PACKAGES: string[];
|
|
10
|
+
interface BuildSnapOptions {
|
|
11
|
+
/** The snapcraft YAML configuration */
|
|
12
|
+
snapcraftConfig: SnapcraftYAML;
|
|
13
|
+
/** Working directory where snapcraft.yaml is written and the build executes */
|
|
14
|
+
stageDir: string;
|
|
15
|
+
/** Whether to use remote build (builds on Launchpad) */
|
|
16
|
+
remoteBuild?: RemoteBuildOptions;
|
|
17
|
+
/** Whether to use LXD for local builds */
|
|
18
|
+
useLXD?: boolean;
|
|
19
|
+
/** Whether to use Multipass for local builds */
|
|
20
|
+
useMultipass?: boolean;
|
|
21
|
+
/** Whether to use destructive mode (builds directly on host, Linux only) */
|
|
22
|
+
useDestructiveMode?: boolean;
|
|
23
|
+
/** The snap output path */
|
|
24
|
+
artifactPath: string;
|
|
25
|
+
/** LinuxPackager instance, used to resolve workspace dir for remote build authentication */
|
|
26
|
+
packager: LinuxPackager;
|
|
27
|
+
/** Snap Store credentials from SnapcraftOptions root — base64 string or file path */
|
|
28
|
+
cscLink?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Builds a snap package from SnapcraftYAML configuration.
|
|
32
|
+
*
|
|
33
|
+
* `SNAPCRAFT_NO_NETWORK` is intentionally **not** forced to `"1"` here.
|
|
34
|
+
* All build modes (destructive-mode, LXD, Multipass, remote) require network
|
|
35
|
+
* access to download stage-packages, the base image, and extensions.
|
|
36
|
+
* To opt into an offline build, set `SNAPCRAFT_NO_NETWORK=1` in your environment.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildSnap(options: BuildSnapOptions): Promise<string>;
|
|
39
|
+
export {};
|