The craftctl
tool is bundled with snapcraft to help get and set metadata, and to run default actions, from scripts that override a build step.
It is only available when building snaps with a core22
base snap or higher.
From within an override script, craftctl can do the following:
Running the default action
When overriding a step, the default logic for that step will not be executed. Instead, the script you specify using override-*
will run. In this script, the default logic for that step can be run with the craftctl default
command.
For example, if you want to modify a file after pulling and before building, you can override the pull
step, run the step using craftctl default
, and change the sources.
parts:
gnome-text-editor:
source: https://gitlab.gnome.org/GNOME/gnome-text-editor
override-pull: |
craftctl default
sed -i.bak -e 's|Icon=@app_id@$|Icon=snap.gnome-text-editor.icon|g' data/org.gnome.TextEditor.desktop.in.in
Setting metadata
Metadata, such as the version or title of a snap, can be dynamically set within an override-*
script using the craftctl set <key>=<value>
command.
Replace <key>
with the name of the value you want to change and <value>
with what you want to change it to.
The following keys are supported:
version
grade
For example, if you want to set the version
of a snap based on the git tags
for a project, override the pull
step with a script that first runs craftctl default
before executing the craftctl set version assignment with the git command to retrieve the version information:
adopt-info: gnome-text-editor
parts:
gnome-text-editor:
source: https://gitlab.gnome.org/GNOME/gnome-text-editor
override-pull: |
craftctl default
craftctl set version=$(git describe --tags --abbrev=10)
For details on how a snap build can incorporate external metadata, see Using external metadata.
Use adopt-info
To incorporate retrieved metadata correctly, ensure that adopt-info
points to the part that runs craftctl set
. Without this, snap metadata will not be updated.
Getting metadata
Current metadata values can be retrieved with craftctl get <key>
. Replace <key>
with the name of the value to retrieve. This command supports the same keys as Setting metadata.
For example, to append the git commit hash to snap version, override stage, run the default action, use craftctl get version
to get the current version, and modify it:
adopt-info: gnome-text-editor
parts:
gnome-text-editor:
override-stage: |
craftctl default
craftctl set version="$(craftctl get version)-$(git rev-parse --short HEAD)"