electron-builder: snap fails to process with "bin/desktop-launch $SNAP/app/my-app does not exist lint-snap-v2_command"

  • Version: 20.0.7
  • Target: build --linux --x64

Now that https://github.com/electron-userland/electron-builder/issues/2596 has been resolved I have tried pushing a packaged .snap for our app again.

The snap successfully uploads this time, yet it now fails the validation process with the following:

1 Warning:
unknown fields for app 'my-app': 'adapter' lint-snap-v2_apps_unknown (my-app) 
1 Fail:
bin/desktop-launch $SNAP/app/my-app does not exist lint-snap-v2_command (my-app) 

and 60 passes…

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Reactions: 2
  • Comments: 18 (10 by maintainers)

Commits related to this issue

Most upvoted comments

@kspearrin - please see my last comment for ‘adapter’.

The issue with bin/desktop-launch $SNAP/app/my-app does not exist lint-snap-v2_command (my-app) is a bug in our review tools, which I’ll fix. If you request a manual review, I’ll approve it (though see below).

If you remove adapter: none from your snapcraft.yaml, this will pass again. What is happening is that with adapter: none a command wrapper is used in the resulting meta/snap.yaml such that it has command: command-tusk.wrapper, which passes review. With the new adapter: none yaml, snapcraft passes the command unmodified from snapcraft.yaml to meta/snap.yaml (ie bin/desktop-launch $SNAP/app/my-app) and the review tools aren’t splitting on spaces and so it treats the command as bin/desktop-launch $SNAP/app/my-app when it should be bin/desktop-launch.

The ‘adapter’ issue is a bug in snapcraft: https://bugs.launchpad.net/snapcraft/+bug/1750658. It looks like @kalikiana started to look at it.

@develar here is outcome I’ve got on ubuntu vm:

electron-builder: 20.0.8 os: ubuntu 17.10

FileNotFoundError: [Errno 2] No such file or directory: '/home/osboxes/edc/release-builds/__snap-x64/prime/meta/snap.yaml'
$ time electron-builder -l snap

  • electron-builder version=20.0.8
  • loaded configuration file=package.json ("build" field)
  • writing effective config file=release-builds/electron-builder.yaml
  • rebuilding native production dependencies platform=linux arch=x64
  • packaging       platform=linux arch=x64 electron=1.8.2 appOutDir=release-builds/linux-unpacked
  • building        target=snap arch=x64 file=release-builds/easy-disk-cleaner_1.0.2_amd64.snap
  • application Linux category is set to default "Utility" reason=linux.category is not set and cannot map from macOS docs=https://electron.build/configuration/configuration#LinuxBuildOptions-category
Setting target machine to 'amd64'
Preparing to pull desktop-gtk2 
...................................................................................................................

Pulling app 
Preparing to build app 
Building app 
Staging app 
Priming desktop-gtk2 
Files from the build host were migrated into the snap to satisfy dependencies that would otherwise not be met. This feature will be removed in a future release. If these libraries are needed in the final snap, ensure that the following are either satisfied by a stage-packages entry or through a part:
lib/x86_64-linux-gnu/libblkid.so.1
lib/x86_64-linux-gnu/libcom_err.so.2
lib/x86_64-linux-gnu/libgcc_s.so.1
lib/x86_64-linux-gnu/libgcrypt.so.20
lib/x86_64-linux-gnu/libgpg-error.so.0
lib/x86_64-linux-gnu/liblzma.so.5
lib/x86_64-linux-gnu/libmount.so.1
lib/x86_64-linux-gnu/libselinux.so.1
lib/x86_64-linux-gnu/libsystemd.so.0
lib/x86_64-linux-gnu/libuuid.so.1
lib/x86_64-linux-gnu/libz.so.1
usr/lib/x86_64-linux-gnu/libstdc++.so.6
Traceback (most recent call last):
  File "/usr/local/bin/snapcraft", line 7, in <module>
    from snapcraft.cli.__main__ import run
  File "/usr/lib/python3/dist-packages/snapcraft/cli/__main__.py", line 43, in <module>
    run(prog_name='snapcraft')
  File "/usr/lib/python3/dist-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/snapcraft/cli/lifecycle.py", line 111, in prime
    _execute('prime', parts, **kwargs)
  File "/usr/lib/python3/dist-packages/snapcraft/cli/lifecycle.py", line 33, in _execute
    lifecycle.execute(command, project_options, parts)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle/_runner.py", line 79, in execute
    _Executor(config, project_options).run(step, part_names)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle/_runner.py", line 185, in run
    self._run_step(step, part, part_names)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle/_runner.py", line 222, in _run_step
    getattr(part, step)()
  File "/usr/lib/python3/dist-packages/snapcraft/internal/pluginhandler/__init__.py", line 589, in prime
    elf_patcher.patch(elf_file=elf_file)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/elf.py", line 392, in patch
    elf_file_path=elf_file.path)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/elf.py", line 297, in wrapper
    return f(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/elf.py", line 407, in _run_patchelf
    subprocess.check_call(cmd)
  File "/usr/lib/python3.6/subprocess.py", line 286, in check_call
    retcode = call(*popenargs, **kwargs)
  File "/usr/lib/python3.6/subprocess.py", line 267, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/usr/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1275, in _execute_child
    restore_signals, start_new_session, preexec_fn)
TypeError: expected str, bytes or os.PathLike object, not NoneType
  ⨯ exit status 1
output: Traceback (most recent call last):
  File "/usr/local/bin/snapcraft", line 7, in <module>
    from snapcraft.cli.__main__ import run
  File "/usr/lib/python3/dist-packages/snapcraft/cli/__main__.py", line 43, in <module>
    run(prog_name='snapcraft')
  File "/usr/lib/python3/dist-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/snapcraft/cli/lifecycle.py", line 158, in pack
    snap_name = lifecycle.pack(directory, output)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle/_packer.py", line 57, in pack
    snap = _snap_data_from_dir(directory)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle/_packer.py", line 34, in _snap_data_from_dir
    with open(os.path.join(directory, 'meta', 'snap.yaml')) as f:
FileNotFoundError: [Errno 2] No such file or directory: '/home/osboxes/edc/release-builds/__snap-x64/prime/meta/snap.yaml'


Error: /usr/local/lib/node_modules/electron-builder/node_modules/app-builder-bin-linux/x64/app-builder exited with code 1
    at ChildProcess.childProcess.once.code (/usr/local/lib/node_modules/electron-builder/node_modules/builder-util/src/util.ts:252:14)
    at ChildProcess.g (events.js:292:16)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at maybeClose (internal/child_process.js:920:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:230:5)
From previous event:
    at SnapTarget.build (/usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/out/targets/snap.js:174:11)
    at taskManager.addTask.default.map.it (/usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/src/platformPackager.ts:121:67)
From previous event:
    at LinuxPackager.packageInDistributableFormat (/usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/src/platformPackager.ts:121:23)
    at /usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/src/platformPackager.ts:116:10
    at next (native)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
From previous event:
    at LinuxPackager.pack (/usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/out/platformPackager.js:188:11)
    at /usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/src/packager.ts:372:24
    at next (native)
    at xfs.stat (/usr/local/lib/node_modules/electron-builder/node_modules/fs-extra/lib/mkdirs/mkdirs.js:56:16)
    at /usr/local/lib/node_modules/electron-builder/node_modules/graceful-fs/polyfills.js:287:18
From previous event:
    at Packager.doBuild (/usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/out/packager.js:441:11)
    at /usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/src/packager.ts:316:52
    at next (native)
    at /usr/local/lib/node_modules/electron-builder/node_modules/graceful-fs/graceful-fs.js:99:16
    at /usr/local/lib/node_modules/electron-builder/node_modules/graceful-fs/graceful-fs.js:43:10
    at FSReqWrap.oncomplete (fs.js:123:15)
From previous event:
    at Packager._build (/usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/out/packager.js:385:11)
    at /usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/src/packager.ts:278:23
    at next (native)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
From previous event:
    at Packager.build (/usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/out/packager.js:341:11)
    at /usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/src/index.ts:50:40
    at next (native)
From previous event:
    at build (/usr/local/lib/node_modules/electron-builder/node_modules/electron-builder-lib/out/index.js:47:21)
    at build (/usr/local/lib/node_modules/electron-builder/src/builder.ts:228:10)
    at then (/usr/local/lib/node_modules/electron-builder/src/cli/cli.ts:48:33)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
From previous event:
    at Object.args [as handler] (/usr/local/lib/node_modules/electron-builder/src/cli/cli.ts:48:33)
    at Object.runCommand (/usr/local/lib/node_modules/electron-builder/node_modules/yargs/lib/command.js:235:44)
    at Object.parseArgs [as _parseArgs] (/usr/local/lib/node_modules/electron-builder/node_modules/yargs/yargs.js:1042:24)
    at Object.get [as argv] (/usr/local/lib/node_modules/electron-builder/node_modules/yargs/yargs.js:957:21)
    at Object.<anonymous> (/usr/local/lib/node_modules/electron-builder/src/cli/cli.ts:42:15)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:383:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:496:3

real	19m29.489s
user	9m18.924s
sys	0m20.366s

osboxes@osboxes:~/edc$ ls -la /home/osboxes/edc/release-builds/__snap-x64/prime/meta/snap.yaml
ls: cannot access '/home/osboxes/edc/release-builds/__snap-x64/prime/meta/snap.yaml': No such file or directory

osboxes@osboxes:~/edc$ find /home/osboxes/edc/release-builds/__snap-x64/ -name snap.yaml
osboxes@osboxes:~/edc$

Config looks like the following:

"snap": {
      "confinement": "classic",
      "useTemplateApp": "false"
    },