Releases: canonical/snapcraft
4.4
Special thanks to the contributors that made this release happen: @artivis, @cjp256, @galgalesh, @hellsworth, @kenvandine, @kyrofa, @maxiberta, @sergiusens and @timsueberkrueb
Command Line
It is now possible to add custom CA certificates into the build environments created by Snapcraft by using --add-ca-certificates with the lifecycle related commands.
And, Snapcraft's snap command now accepts an --output parameter.
Extensions
Desktop
A new mechanism to pre-generate font caches has been added to the desktop related extensions. This allows for system font caches to be generated at install time and isolated from the potentially ABI incompatible host generated cache.
To benefit from this feature, any extension using Snapcraft project just needs to rebuild their snap. More details about this feature can be found in the specification.
Package Repositories
The experimental package repositories feature is adapting to the latest changes:
- The undocumented =$SNAPCRAFT_APT= variables have been removed.
- Introduced improved error handling and schema validation.
The specification has been finalized which opens a path from leaving the experimental flag behind.
Store
Progressive Releases
Progressive releases now support reporting metrics as defined in the specification. Input on the feature is welcome on the forum.
Snap Revisions
Snapcraft's revisions command is now internally using a new endpoint which should provide much better results:
- the table headers have slightly changed to better represent architectures.
- channels are now fully qualified (i.e.;
<track/risk/branch>). - comma separated column entries no longer have a space separating each item.
Refer to the specification for further details.
Full list of changes
New Features
- cli: remove spaces from progressive metrics @sergiusens (#3335)
- storeapi: add releases endpoint @sergiusens (#3311)
- cli: provide option to install ca certs into build environment @cjp256 (#3224)
- Add PYTHONPATH to environment (fixes #1893262) @hellsworth (#3270)
- snap packaging: fetch remote icons configured via appstream @cjp256 (#3241)
- pluginhandler: support using patchelf on strict snaps @kyrofa (#3277)
- gnome extensions: multiarch bindtextdomain.so support @galgalesh (#3127)
- db: introduce generalized datastore @cjp256 (#3238)
- meta: write stubs for command-chain using hooks when needed @sergiusens (#3296)
- cli: support snap --output @cjp256 (#3297)
- extensions: configure hook for fonts @sergiusens (#3299)
- storeapi: add support for reporting status of progressive releases @maxiberta (#3306)
- package repositories: improve error handling @cjp256 (#3334)
- spread tests: move package-repositories test snaps into own dir @cjp256 (#3331)
Maintenance
- cli: update revisions to use releases API @sergiusens (#3329)
- storeapi: remove bindings for history @sergiusens (#3332)
- v1 plugins: lock godep's dependencies @cjp256 (#3285)
- readme: remove link to Google+ @timsueberkrueb (#3292)
- storeapi: drop arch requirement for get_channel_mapping() @cjp256 (#3301)
- build(deps-dev): bump junit from 3.8.1 to 4.13.1 in /tests/spread/plugins/v1/maven/snaps/legacy-maven-hello/my-app @dependabot (#3316)
- build(deps-dev): bump junit from 3.8.1 to 4.13.1 in /tests/spread/plugins/v1/maven/snaps/maven-hello/my-app @dependabot (#3315)
- spread tests: introduce electron-builder test @cjp256 (#3312)
- unit tests: fix runtests.sh not filtering tests when passed a subdirectory @maxiberta (#3305)
- electron-builder spread test: sync expected snapcraft.yaml @cjp256 (#3323)
- package repositories: drop $SNAPCRAFT_APT_HOST_ARCH variable @cjp256 (#3322)
- package repositories: drop $SNAPCRAFT_APT_RELEASE variable @cjp256 (#3328)
- flutter tests: updated for latest embedder @kenvandine (#3310)
- lxd unit tests: simplify command checking pattern @cjp256 (#3326)
Bug Fixes
- package repositories: fix case where formats is empty @cjp256 (#3330)
- meta: add error check for "command not found" @cjp256 (#3321)
- snapcraftctl: add checks for empty string for set-version & set-grade @cjp256 (#3325)
- pluginhandler: properly handle snapcraftctl errors @cjp256 (#3317)
- schema: add regex to validate description is non-empty @cjp256 (#3303)
- set ROS_PYTHON_VERSION for rosdep @artivis (#3324)
- Set ROS_VERSION for rosdep in plugins v1 @artivis (#3313)
- repo: install requested build-package versions @cjp256 (#3221)
- project loader: install dirmngr prior to configuring package repositories @cjp256 (#3294)
- build providers: fix issues running on Windows @sergiusens (#3289)
- cmake v2 plugin: add help for cmake generators @sergiusens (#3288)
- setup.py: assert with helpful error when unable to determine version @cjp256 (#3307)
Specifications and Documentation
- specifications: v1 history to v2 releases @sergiusens (#3304)
- specification: desktop extension font hook @sergiusens (#3295)
- specifications: finalization of package repositories spec @cjp256 (#3333)
4.3
Special thanks to the contributors that made this release happen: @cjp256, @flexiondotorg, @kyrofa and @sergiusens
New Features
ROS 1 Extension together with a v2 catking and catkin-tools plugin for core20
This allows you to target ROS 1 Noetic Ninjemys which is the latest (and last)
ROS 1 LTS that runs on Ubuntu 20.04 (Focal Fossa).
This feature allows building ROS 1 applications with a snapcraft.yaml as simple as:
name: catkin-noetic-hello
version: "1.0"
summary: hello world
description: |
A ROS 1 roscpp-based workspace.
grade: stable
confinement: strict
base: core20
apps:
catkin-noetic-hello:
command: opt/ros/noetic/lib/snapcraft_hello/snapcraft_hello
plugs: [network, network-bind]
extensions: [ros1-noetic]
parts:
hello:
plugin: catkin
source: .
build-packages: [g++, make]The experience should be pretty similar to the newly introduced ROS 2 extension and colcon plugin
in Snapcraft 4.2.
Source is assumed to be local and a valid catkin project
Set the default Channel Track from the Snapcraft
Building on the feature set from Snapcraft 4.2
where track listing was introduced, it is now possible to set default tracks and it is as simple as running:
$ snapcraft set-default-track node 17
Default track for 'node' set to '17'.
Other improvements
- build providers: use the releases endpoint for LXD @sergiusens (#3271)
- cli: add --enable-experimental-extensions option for expand-extensions @cjp256 (#3266)
Bug Fixes
- spread tests: remove references of core16 @cjp256 (#3269)
- cli: ignore sudo warning when using multipass @sergiusens (#3275)
- schema: rename package-repository's "deb-types" to "format" @cjp256 (#3274)
- spread tests: lock down setuptools for plainbox @sergiusens (#3273)
- build providers: hide systemd setup for LXD @sergiusens (#3281)
- Set VDPAU_DRIVER_PATH appropriately @flexiondotorg (#3279)
- storeapi: improve to channel map docstrings @sergiusens (#3272)
- colcon v2 plugin: honour http(s) proxy for stage-runtime-dependencies @cjp256 (#3265)
Specifications and Documentation
4.2
The team behind Snapcraft is pleased to announce the release of Snapcraft 4.2.
Special thanks to the contributors that made this release happen: @GamePad64, @Saviq, @cjp256, @igorljubuncic and @sergiusens
New Features
ROS 2 Extension and colcon v2 plugin with base core20
This allows you to target ROS 2 Foxy Fitzroy which is the latest ROS 2 LTS
that runs on Ubuntu 20.04 (Focal Fossa).
This feature allows building ROS2 applications with a snapcraft.yaml as simple as:
name: ros2-talker-listener
version: '0.1'
summary: ROS2 Talker/Listener Example
description: |
This example launches a ROS2 talker and listener.
grade: devel
confinement: strict
base: core20
parts:
ros-demos:
plugin: colcon
source: https://github.com/ros2/demos.git
source-branch: foxy
source-subdir: demo_nodes_cpp
build-packages: [make, gcc, g++]
stage-packages: [ros-foxy-ros2launch]
apps:
ros2-talker-listener:
command: opt/ros/foxy/bin/ros2 launch demo_nodes_cpp talker_listener.launch.py
plugs: [network, network-bind]
extensions: [ros2-foxy]A nice walkthrough on how to work with the plugin and extension can be found on https://snapcraft.io/blog/how-to-build-a-snap-using-ros-2-foxy
Ninja generator support when using cmake with base core20
The default generator is set to create Makefiles when using the cmake plugin on core20. A new plugin property has now been introduced to allow for setting that to ninjas. To do so as an example a part can be configured to look like
hello:
source: .
plugin: cmake
cmake-parameters:
- -DCMAKE_INSTALL_PREFIX=/usr
cmake-generator: NinjaListing Snap Channel Tracks from Snapcraft
A long missing feature in Snapcraft since the introduction of Channel Tracks and the possibility
to have a default one was to view the available Tracks created for a given snap.
There is now a new command available to retrieve such information, snapcraft list-tracks that
has an alias for convenience and can be called with snapcraft tracks.
The list will show the list of tracks together with their state:
- default (implicit active)
- active
- hidden
- closed
And their creation date together with their assigned Version Pattern (version string required in a given
Snap Revision to be able to release to a given Track).
Bug Fixes
- meta: detailed warnings for resolution of commands @cjp256 (#3219)
- file utils: introduce get_host_tool_path() to find commands on host @cjp256 (#3244)
- plugins v2: use repo.Repo not repo.Ubuntu in colcon @cjp256 (#3257)
- remote-build: use requests.get() instead of urlopen() @cjp256 (#3255)
- spread tests: fix classic patchelf linker regex to match all arches @cjp256 (#3247)
- tests: restrict colcon / ros2-foxy test to amd64 & arm64 @cjp256 (#3254)
- extensions: prepend the snapd glvnd path @Saviq (#3253)
- build providers: honour http proxy settings for snapd @cjp256 (#3251)
- snapcraft: use system certificates by default for https requests @cjp256 (#3252)
Specifications and Documentation
4.1.5
Special thanks to the contributors that made this release happen: @cjp256
Bug Fixes
- plugins v2: quote python packages argument for pip @cjp256 (#3246)
- build providers: install apt-transport-https @cjp256 (#3232)
- cli: only issue warning when checking for usage of sudo @cjp256 (#3240)
- tests: migrate legacy classic patchelf tests to spread @cjp256 (#3242)
Specifications and Documentation
4.1.4
4.1.3
Special thanks to the contributors that made this release happen: @cjp256, @galgalesh, @sergiusens and @snshn
Maintenance
- tests: fix assert ordering for error format tests @cjp256 (#3235)
- spread: use host pip @cjp256 (#3237)
Bug Fixes
- cli: fix typo on build provider installation request @snshn (#3222)
- extensions: kde-neon: use gtk3 platform theme on gtk-based DE's @galgalesh (#3226)
- lifecycle: check for snap using shutil.which() @cjp256 (#3230)
- meta: fix content slot to set content when using source key @cjp256 (#3227)
- review tools: fix snap link or copy path @sergiusens (#3228)
- file utils: rename get_tool_path() to get_snap_tool_path() @cjp256 (#3231)
- errors: introduce HostToolNotFoundError exception @cjp256 (#3229)
Specifications and Documentation
- specifications: default tracks @sergiusens (#3225)
Tooling
4.1.2
Special thanks to the contributors that made this release happen: @anonymouse64, @cjp256, @jhenstridge and @sergiusens
Bug Fixes
- review tools: link or copy snap to snap common @sergiusens (#3220)
- lxd: enable security.syscalls.intercept.mknod if supported to allow snaps to create some device nodes @jhenstridge (#3218)
- cmake v2 plugin: add stage to CMAKE_PREFIX_PATH @sergiusens (#3217)
- build providers: tweak environment clean detection and logging @cjp256 (#3216)
- build providers: use PEP-440 compliant version comparison operator @cjp256 (#3215)
- cli: use prefix in store name registration hint @sergiusens (#3213)
- pluginhandler: fix stage-snaps for v2 plugins @jhenstridge (#3211)
- docker: install snapd dependency @cjp256 (#3210)
- snap: set PATH for snapcraft command @sergiusens (#3208)
Maintenance
4.1.1
Special thanks to the contributors that made this release happen: @cjp256, @kenvandine, and @sergiusens
Bug Fixes
- flutter v1 plugin: move pub get to build @kenvandine (#3204)
- tests: add missing asserts to python unit tests @cjp256 (#3206)
- build providers: fix base change warning message @cjp256 (#3202)
Tooling
- spread tests: higher timeout for extension tests @sergiusens (#3205)
Flutter all the things
Special thanks to the contributors that made this release happen: @cjp256, @edumucelli, @hpoul, @kenvandine, @sergiusens and @xnox
New Features
The most interesting feature in this release is the addition of being able to
create snaps for Flutter based applications. A first snap workflow has been
written to guide you through the process https://snapcraft.io/#flutter
- flutter v1 plugin: new plugin for flutter @sergiusens (#3192)
- flutter v1 plugin: pull from source-subdir if set @sergiusens (#3200)
- extensions: introduce flutter-dev @sergiusens (#3199)
- extensions: introduce flutter-master @sergiusens (#3195)
- riscv64 support @xnox (#3186)
- plugins: add support for local v2 plugins (core20) @cjp256 (#3118)
- snap: support for lzo as a compression target @sergiusens (#3189)
Maintenance
- pyinstaller: workaround pkg_resources issue @sergiusens (#3201)
- extensions: export content snap egl vendor dir @sergiusens (#3190)
- cli: use snap pack instead of mksquashfs @sergiusens (#3173)
- extensions: plug the opengl interface for GNOME @sergiusens (#3193)
Bug Fixes
- link_or_copy: do not try to create hardlinks to symlinks. @hpoul (#3174)
- cli: allow promoting from edge without --yes @sergiusens (#3185)
- maven plugin: improve error message when target libs are not found. @edumucelli (#3179)
- cli: unset false boolean flags in environment @cjp256 (#3196)
- cli: use maxval of UnknownLength for pack progress @sergiusens (#3187)
- build providers: check revision before switching @sergiusens (#3184)
Specifications and Documentation
- extensions: introduce flutter-master @sergiusens (#3195)
Tooling
4.0.7
Special thanks to the contributors that made this release happen: @cjp256 and @sergiusens
Full list of changes
Bug Fixes
- build providers: improve warning for unknown base @cjp256 (#3182)
- build providers: nice message on bad base @sergiusens (#3180)
- cli: don't warn about --target-arch if target_arch is None @cjp256 (#3181)
Tooling
- static: prepare for update to black 19.10b0 @sergiusens (#3183)