Skip to content

Commit 9fc5157

Browse files
authored
fix: pass publish options to snap publisher (#7908)
1 parent 061d729 commit 9fc5157

2 files changed

Lines changed: 67 additions & 3 deletions

File tree

.changeset/swift-dingos-live.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
"app-builder-lib": patch
3+
"dmg-builder": patch
4+
"electron-builder": patch
5+
"electron-builder-squirrel-windows": patch
6+
"electron-forge-maker-appimage": patch
7+
"electron-forge-maker-nsis": patch
8+
"electron-forge-maker-nsis-web": patch
9+
"electron-forge-maker-snap": patch
10+
---
11+
12+
fix: pass publish options to snap publisher

packages/app-builder-lib/src/targets/snap.ts

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import { Arch, deepAssign, executeAppBuilder, InvalidConfigurationError, log, replaceDefault as _replaceDefault, serializeToYaml, toLinuxArchString } from "builder-util"
2-
import { asArray } from "builder-util-runtime"
2+
import { SnapStoreOptions, asArray } from "builder-util-runtime"
33
import { outputFile, readFile } from "fs-extra"
44
import { load } from "js-yaml"
55
import * as path from "path"
66
import * as semver from "semver"
7-
import { Target } from "../core"
7+
import { Publish, Target } from "../core"
88
import { LinuxPackager } from "../linuxPackager"
99
import { PlugDescriptor, SnapOptions } from "../options/SnapOptions"
1010
import { getTemplatePath } from "../util/pathManager"
1111
import { LinuxTargetHelper } from "./LinuxTargetHelper"
1212
import { createStageDirPath } from "./targetUtil"
13+
import { Configuration } from "../configuration"
1314

1415
const defaultPlugs = ["desktop", "desktop-legacy", "home", "x11", "wayland", "unity7", "browser-support", "network", "gsettings", "audio-playback", "pulseaudio", "opengl"]
1516

@@ -245,13 +246,15 @@ export default class SnapTarget extends Target {
245246

246247
await executeAppBuilder(args)
247248

249+
const publishConfig = findSnapPublishConfig(this.packager.config)
250+
248251
await packager.info.callArtifactBuildCompleted({
249252
file: artifactPath,
250253
safeArtifactName: packager.computeSafeArtifactName(artifactName, "snap", arch, false),
251254
target: this,
252255
arch,
253256
packager,
254-
publishConfig: options.publish == null ? { provider: "snapStore" } : null,
257+
publishConfig: publishConfig == null ? { provider: "snapStore" } : publishConfig,
255258
})
256259
}
257260

@@ -260,6 +263,55 @@ export default class SnapTarget extends Target {
260263
}
261264
}
262265

266+
function findSnapPublishConfig(config?: Configuration): SnapStoreOptions | null {
267+
if (!config) {
268+
return null
269+
}
270+
271+
if (config.linux?.publish) {
272+
const configCandidate = findSnapPublishConfigInPublishNode(config.linux.publish)
273+
274+
if (configCandidate) {
275+
return configCandidate
276+
}
277+
}
278+
279+
if (config.publish) {
280+
const configCandidate = findSnapPublishConfigInPublishNode(config.publish)
281+
282+
if (configCandidate) {
283+
return configCandidate
284+
}
285+
}
286+
287+
return null
288+
}
289+
290+
function findSnapPublishConfigInPublishNode(configPublishNode: Publish): SnapStoreOptions | null {
291+
if (!configPublishNode) {
292+
return null
293+
}
294+
295+
if (Array.isArray(configPublishNode)) {
296+
for (const configObj of configPublishNode) {
297+
if (isSnapStoreOptions(configObj)) {
298+
return configObj
299+
}
300+
}
301+
}
302+
303+
if (typeof configPublishNode === `object` && isSnapStoreOptions(configPublishNode)) {
304+
return configPublishNode
305+
}
306+
307+
return null
308+
}
309+
310+
function isSnapStoreOptions(configPublishNode: Publish): configPublishNode is SnapStoreOptions {
311+
const snapStoreOptionsCandidate = configPublishNode as SnapStoreOptions
312+
return snapStoreOptionsCandidate?.provider === `snapStore`
313+
}
314+
263315
function archNameToTriplet(arch: Arch): string {
264316
switch (arch) {
265317
case Arch.x64:

0 commit comments

Comments
 (0)