11import { 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"
33import { outputFile , readFile } from "fs-extra"
44import { load } from "js-yaml"
55import * as path from "path"
66import * as semver from "semver"
7- import { Target } from "../core"
7+ import { Publish , Target } from "../core"
88import { LinuxPackager } from "../linuxPackager"
99import { PlugDescriptor , SnapOptions } from "../options/SnapOptions"
1010import { getTemplatePath } from "../util/pathManager"
1111import { LinuxTargetHelper } from "./LinuxTargetHelper"
1212import { createStageDirPath } from "./targetUtil"
13+ import { Configuration } from "../configuration"
1314
1415const 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+
263315function archNameToTriplet ( arch : Arch ) : string {
264316 switch ( arch ) {
265317 case Arch . x64 :
0 commit comments