#snappy #snapcraft #development

Snapcraft 3.1

5 February 2019

snapcraft 3.1 is now available on the stable channel of the Snap Store. This is a new minor release building on top of the foundations laid out from the snapcraft 3.1 release.

If you are already on the stable channel for snapcraft then all you need to do is wait for the snap to be refreshed.

The full release notes are replicated here below

Build Environments

It is now possible, when using the base keyword, to once again clean parts. To do so run:

snapcraft clean <part-name>

Cleaning individual steps from a specific part, previously provided by the --step option to clean, is being redesigned to be more intuitive and straight forward in its use.

Core

before and after

The before and after keywords, used for ordering service launching within a snap, are now properly supported in snapcraft.

Appstream extractor

The appstream metadata extractor can now properly handle tags inside the relevant nodes and properly filter xml:lang, such that:

  <description>
    <p>List:</p>
    <p xml:lang="es">Lista:</p>
    <ul>
      <li>First item.</li>
      <li xml:lang="es">Primer item.</li>
      <li>Second item.</li>
      <li xml:lang="es">Segundo item.</li>
    </ul>
  </description>

Is presented as the following description in snap.yaml:

List:

- First item.
- Second item.

Additionally, desktop files are now properly found from the appstream launchable entries or by falling back to legacy mode and inferring the desktop file from the appstream id.

Plugins

cmake

The plugin can now leverage build-snaps into the build environment, when any given build-snaps entry exists for a part that uses the cmake plugin, the plugin will make use of CMAKE_FIND_ROOT_PATH so that libraries and headers from that snap are preferred.

Additionally, cmake primitives are now used to drive the build instead of just calling make.

These features have already been used to create an initial set of KDE applications leveraging core18 as a base as described on the KDE apps at the snap of your fingers article.

rust

The rust plugin has been refactored in a backwards compatible way to work better with the non-legacy rustup tool.

Platforms

OS X

When using snapcraft with homebrew for the first time, if multipass is not found, the user will be prompted to install it before proceeding.

The issues and features worked on for 3.1 can be seen on the 3.1 launchpad milestone which are reflected in the following change list:

  • cmake plugin: use native primitives (#2397)
  • cmake plugin: use build snaps to search paths (#2399)
  • static: update to the latest flake8 (#2420)
  • project: state file path change (#2419)
  • tests: do not use bash as a reserved package name on staging (#2423)
  • nodejs plugin: fail gracefully when a package.json is missing (#2424)
  • tests: use fixed version for idna in plainbox (#2426)
  • tests: remove obsolete snap and external tests (#2421)
  • snap: re-add pyc files for snapcraft (#2425)
  • tests: increase test timeout for plainbox (#2428)
  • lifecycle: query for multipass install on darwin (#2427)
  • cli: fix usage string in help command (#2429)
  • repo: document package purpose (#2390)
  • extractors: better appstream support for descriptions (#2430)
  • tests: re-enable spread tests on gce
  • rust plugin: refactor to use the latest rustup
  • tests: temporarily disable osx tests
  • snap: add build-package for xml
  • appstream extractor: properly find desktop files
  • appstream extractor: support legacy launchables
  • snap: add xslt dependencies for lxml
  • repo,baseplugin: support trusting repo keys (#2437)
  • schema: allow before and after (#2443)
  • meta: make hooks executable instead of complaining they are not (#2440)
  • build providers: remove SIGUSR1 signal ignore workaround for multipass (#2447)
  • cli: enable cleaning of parts (#2442)
  • tests: appstream unit tests are xenial specific
  • tests: skip rust unit tests on s390x
  • tests: use more fine grained assertions in lifecycle tests
  • tests: remove rust revision testing for i386