Making your snaps available to the store using snapcraftNov 4, 2016
Delivery and Store Concepts
So let’s start with a refresher on what we have available on the Store side to manage your snaps.
Every time you push a snap to the store, the store will assign it a revision, this revision is unique in the store for this particular snap.
However to be able to push a snap for the first time, the name needs to be registered which is pretty easy to do given the name is not already taken.
Any revision on the store can be released to a number of channels which are defined conceptually to give your users the idea of a stability or risk level, these channel names are:
Ideally anyone with a CI/CD process would push daily or on every source update to the edge channel. During this process there are two things to take into account.
The first thing to take into account is that at the beginning of the
snapping process you will likely get started with a non confined snap
as this is where the bulk of the work needs to happen to adapt to
this new paradigm.
With that in mind, your project gets started with a
confinement set to
devmode. This makes it possible to get going on the early phases
of development and still get your snap into the store. Once everything
is fully supported with the security model snaps work in, this
confinement entry can be switched to
strict. Given the
devmode this snap is only releasable on the
channels which hints your users on how much risk they are taking by
So let’s say you are good to go on the confinement side and you start
a CI/CD process against
edge but you also want to make sure in some
cases that early releases of a new iteration against master never make
candidate and for this we have a
grade entry. If
grade of the snap is set to
devel the store will never allow you
to release to the most stable channels (
not be possible.
Somewhere along the way we might want to release a revision into beta
which some users are more likely want to track on their side (which
given good release management process should be to some level more
usable than a random daily build). When that stage in the process is over
but want people to keep getting updates we can choose to
beta channel as we only plan to release to
from a certain point in time, by closing this
beta channel we will
make that channel track the following open channel in the stability
list, in this case it is
candidate is tracking
stable whatever is in
stable is what we will get.
So given all these concepts how do we get going with
snapcraft, first of
all we need to
$ snapcraft login Enter your Ubuntu One SSO credentials. Email: firstname.lastname@example.org Password: ************** Second-factor auth: 123456
After logging in we are ready to get our snap registered, for examples sake
let’s say we wanted to register
awesome-database, a fantasy snap we want
to get started with:
$ snapcraft register awesome-database We always want to ensure that users get the software they expect for a particular name. If needed, we will rename snaps to ensure that a particular name reflects the software most widely expected by our community. For example, most people would expect ‘thunderbird’ to be published by Mozilla. They would also expect to be able to get other snaps of Thunderbird as 'thunderbird-sergiusens'. Would you say that MOST users will expect 'a' to come from you, and be the software you intend to publish there? [y/N]: y You are now the publisher for 'awesome-database'.
So assuming we have the snap built already, all we have to do is
push it to the store. Let’s take advantage of a shortcut and
in the same command:
$ snapcraft push awesome-databse_0.1_amd64.snap --release edge Uploading awesome-database_0.1_amd64.snap [=================] 100% Processing.... Revision 1 of 'awesome-database' created. Channel Version Revision stable - - candidate - - beta - - edge 0.1 1 The edge channel is now open.
If we try to release this to
stable the store will block us:
$ snapcraft release awesome-database 1 stable Revision 1 (devmode) cannot target a stable channel (stable, grade: devel)
We are safe from messing up and making this available to our faithful
users. Now eventually we will
push a revision worthy of releasing to the
$ snapcraft push awesome-databse_0.1_amd64.snap Uploading awesome-database_0.1_amd64.snap [=================] 100% Processing.... Revision 10 of 'awesome-database' created.
Notice that the version is just a friendly identifier and what really
matters is the revision number the store generates for us. Now let’s
go ahead and release this to
$ snapcraft release awesome-database 10 stable Channel Version Revision stable 0.1 10 candidate ^ ^ beta ^ ^ edge 0.1 10 The 'stable' channel is now open.
In this last channel map view for the architecture we are working with,
we can see that
edge is going to be stuck on revision 10, and that
candidate will be following
stable which is on revision 10.
For some reason we decide that we will focus on stability and make our
CI/CD push to
beta instead. This means that our
edge channel will
slightly fall out of date, in order to avoid things like this we can
close the channel:
$ snapcraft close awesome-database edge Arch Channel Version Revision amd64 stable 0.1 10 candidate ^ ^ beta ^ ^ edge ^ ^ The edge channel is now closed.
In this current state, all channels are following the
so people subscribed to
edge would be tracking
changes to that channel. If revision 11 is ever pushed to
people on the other channels would also see it.
This listing also provides us with a full architecture view, in this
case we have only been working with
Getting more information
So some time passed and we want to know what was the history and status
of our snap in the store. There are two commands for this, the
straightforward one is to run
status which will give us a familiar
$ snapcraft status awesome-database Arch Channel Version Revision amd64 stable 0.1 10 candidate ^ ^ beta ^ ^ edge ^ ^
We can also get the full history:
$ snapcraft history awesome-database Rev. Uploaded Arch Version Channels 3 2016-09-30T12:46:21Z amd64 0.1 stable* ... ... ... 2 2016-09-30T12:38:20Z amd64 0.1 - 1 2016-09-30T12:33:55Z amd64 0.1 -
I hope this gives an overview of the things you can do with the store and more people start taking advantage of it!