Development

June 16, 2026 ยท View on GitHub

Common development tasks are available via make:

CommandDescription
make buildBuild the TypeScript sources
make typecheckType-check without emitting
make installBuild and install the extension
make enableEnable the extension
make disableDisable the extension
make lintRun ESLint
make lint-fixRun ESLint with auto-fix
make logFollow the GNOME Shell log
make potRegenerate the translation template
make merge-poRegenerate .pot and merge into all .po files

Run make help to see all available targets.

Release

Pushing a v* tag triggers the build.yml workflow, which builds the zip and publishes a GitHub Release with it attached.

  1. Bump version: in meson.build (a plain integer, incremented by 1 โ€” GNOME uses it to detect updates), commit, and merge.

  2. Tag the release commit and push:

    git tag -a v1.0.0 -m "Release 1.0.0"
    git push origin v1.0.0
    

To re-cut, delete the tag (and its Release) first:

git tag -d v1.0.0                    # local
git push origin :refs/tags/v1.0.0    # remote

Install the published zip with:

gnome-extensions install hanabi-extension@jeffshee.github.io.shell-extension.zip

License Headers

License headers in src/ are managed with licensure. Configuration is in .licensure.yml.

To check that all files have correct headers:

licensure --project --check

To apply or update headers in-place:

licensure --project --in-place