As my dev workstation is running Ubuntu, I have recently started using Snap to install most of my applications.
Snap is an interesting packaging approach since it allows applications publisher to release new versions directly without having to involve distribution maintainers. This reduces the delay between application development and end users deployment.
Another interesting aspect of Snap is that they are self-contained and running in a sandbox with limited access to the host system. This isolation improves security and allows multiples version of the same snap to be installed at the same time.
The packaging of Snap applications is really simple and is done with a single file
Here’s as example the configuration file of osync:
name: osync base: core18 version: git summary: Tool to synchronize in a optimized way a lot of files to a FTP server. description: | Osync is a Rust written tool designed to upload huge amount of files to a remote FTP server, in an efficient manner. license: GPL-3.0 grade: stable confinement: strict parts: osync: plugin: rust source: . build-packages: - libc6-dev apps: osync: command: bin/osync plugs: - home - removable-media - network
As you can see, Snap packaging is quite straightforward and simple, but I think we can improve the experience. That’s what I’ve tried with autosnap.
Autosnap allows automatic snap packaging easily in a fashion way:
$ autosnap https://github.com/creekorful/polonium.git 2020-08-27 07:23:32,400 INFO [autosnap] Starting packaging of https://github.com/creekorful/polonium.git 2020-08-27 07:23:33,617 INFO [autosnap] Successfully packaged polonium! 2020-08-27 07:23:33,617 INFO [autosnap] The snapcraft file is stored at /home/creekorful/Documents/polonium/snapcraft.yaml 2020-08-27 07:23:33,618 INFO [autosnap] Please fix any TODO in the file and run `cd /home/creekorful/Documents/polonium && snapcraft`
Depending on the language that will be packaged, autosnap will be able to detect the license, the build packages, the version, etc… and therefore ease the life of package maintainer.
Current languages supported by Autosnap are: [Go, Rust] (new languages will be supported soon).
The source code of autosnap is available here.