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
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.
<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:
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)
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.
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)"