Skip to content

fix(release): consistent release asset naming across editions - #1393

Merged
ErikBjare merged 1 commit into
masterfrom
fix/release-asset-naming
Aug 6, 2026
Merged

fix(release): consistent release asset naming across editions#1393
ErikBjare merged 1 commit into
masterfrom
fix/release-asset-naming

Conversation

@ErikBjare

Copy link
Copy Markdown
Member

Summary

The v0.14.0b3-research release assets mixed three naming conventions:

  • zips/setup.exe put the edition before the version: activitywatch-research-edition-v0.14.0b3-research-...
  • dmg/deb/rpm/AppImage put it after the arch: ...-linux-x86_64-research-edition.deb
  • the Qt AppImage had no version at all: activitywatch-linux-x86_64-research-edition.AppImage

…and all of them said "research" twice, since the tag already carries a -research suffix.

This unifies everything to:

activitywatch[-tauri][-research]-<version>-<os>-<arch>[-setup].<ext>

The -research tag suffix is stripped from the version part of filenames (the edition lives in its own token, keeping the version part a plain version). Example names for a future v0.14.0b4-research:

activitywatch-research-linux-x86_64.AppImage
activitywatch-research-v0.14.0b4-linux-x86_64.deb
activitywatch-research-v0.14.0b4-macos-arm64.dmg
activitywatch-research-v0.14.0b4-windows-x86_64-setup.exe
activitywatch-tauri-research-v0.14.0b4-linux-x86_64.AppImage
activitywatch-tauri-research-v0.14.0b4-macos-arm64.dmg
...

Standard-edition names are unchanged.

Changes

  • scripts/package/package-all.sh: strip -research from the version, use -research (not -research-edition) as the edition token; the stripped version also flows into the innosetup AW_VERSION.
  • scripts/package/package-deb.sh: same stripping (a bare -research in the Debian Version field would parse as a Debian revision) + edition token.
  • scripts/package/package-appimage.sh: edition token handled in the script; documented why the filename is deliberately unversioned (stable releases/latest/download/activitywatch-linux-x86_64.AppImage URL).
  • .github/workflows/release.yml: strip -research from VERSION_WITH_V, new token in dmg/tauri-bundle names, and drop the post-hoc mv renames for AppImage/deb now that the scripts handle the edition themselves.

Test plan

  • bash -n on all touched scripts, YAML parse of the workflow
  • Simulated the name construction for all four (tauri × research) combos
  • Verify via a workflow_dispatch research build once merged

Unify all asset filenames to:

    activitywatch[-tauri][-research]-<version>-<os>-<arch>[-setup].<ext>

Previously research-edition assets mixed three conventions (edition
token before the version in zips, after the arch in dmg/deb/rpm, and
one AppImage without a version), and said 'research' twice since the
tag already carries a -research suffix.

- Strip the -research tag suffix from the version part of filenames
  (and from the Debian control version, where it would parse as a
  revision); the edition lives in its own token after the product name.
- Rename the edition token from '-research-edition' to '-research'.
- Move edition naming for AppImage/deb into the package scripts,
  dropping the post-hoc mv hacks in the workflow.
- Document why the Qt AppImage filename is unversioned (stable
  releases/latest/download URL).
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@ErikBjare

Copy link
Copy Markdown
Member Author

@greptileai review

@greptile-apps

greptile-apps Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR consistently moves the research-edition marker ahead of the version in release asset names while removing the tag suffix from filename and selected package-version fields.

  • Normalizes Qt and Tauri artifact names across Windows, macOS, and Linux.
  • Moves AppImage and Debian edition naming into their packaging scripts.
  • Preserves the standard edition’s stable, unversioned AppImage filename.

Confidence Score: 5/5

The PR appears safe to merge; the normalized names remain reachable by the existing upload and release globs.

The changed scripts and workflow consistently derive the research token from AW_RESEARCH_EDITION, preserve standard-edition names, and continue producing artifacts matched by the publishing pipeline.

Important Files Changed

Filename Overview
.github/workflows/release.yml Normalizes research-edition DMG and Tauri bundle names and delegates Qt Linux naming to packaging scripts without breaking artifact globs.
scripts/package/package-all.sh Separates the research edition token from version strings used in ZIP, installer filenames, and Inno Setup metadata.
scripts/package/package-appimage.sh Adds edition-aware naming while preserving the standard AppImage’s stable unversioned download name.
scripts/package/package-deb.sh Removes the research suffix from Debian package versions and emits the normalized edition-aware filename.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A["getversion.sh<br/>vX.Y-research"] --> B["Strip -research suffix"]
  B --> C["Plain version<br/>vX.Y"]
  D["AW_RESEARCH_EDITION=true"] --> E["Edition token<br/>-research"]
  C --> F["Artifact naming"]
  E --> F
  F --> G["activitywatch[-tauri]-research-vX.Y-OS-ARCH.ext"]
  F --> H["Unversioned Qt AppImage<br/>activitywatch-research-linux-x86_64.AppImage"]
Loading

Reviews (1): Last reviewed commit: "fix(release): consistent release asset n..." | Re-trigger Greptile

@ErikBjare
ErikBjare merged commit 25e34c7 into master Aug 6, 2026
18 checks passed
TimeToBuildBob added a commit to TimeToBuildBob/activitywatch that referenced this pull request Aug 17, 2026
…edition ready) (#1)

* fix(release): consistent release asset naming across editions (ActivityWatch#1393)

Unify all asset filenames to:

    activitywatch[-tauri][-research]-<version>-<os>-<arch>[-setup].<ext>

Previously research-edition assets mixed three conventions (edition
token before the version in zips, after the arch in dmg/deb/rpm, and
one AppImage without a version), and said 'research' twice since the
tag already carries a -research suffix.

- Strip the -research tag suffix from the version part of filenames
  (and from the Debian control version, where it would parse as a
  revision); the edition lives in its own token after the product name.
- Rename the edition token from '-research-edition' to '-research'.
- Move edition naming for AppImage/deb into the package scripts,
  dropping the post-hoc mv hacks in the workflow.
- Document why the Qt AppImage filename is unversioned (stable
  releases/latest/download URL).

* ci(build-tauri): fail fast if aw-server-rust submodule is on an older release line (ActivityWatch#1391)

* ci(activitywatch): verify aw-server-rust submodule matches release tag in build-tauri

Adds a fast-fail step in build-tauri that reads the bundled aw-server
version from aw-server-rust/aw-server/Cargo.toml and compares the
major.minor prefix against the AW release tag. If the submodule is
pinned to an older release line, the build fails immediately rather
than producing a 30-min Tauri bundle with the wrong backend (the
Windows 0.14 release shipped with aw-server v0.13.1 due to this).

Fixes ActivityWatch#1380

* ci(build-tauri): add missing aw-server-rust version guard

The version-freshness check landed in build-qt but not build-tauri —
the job that actually shipped the mismatched bundle in ActivityWatch#1380.
Add the same fail-fast step to build-tauri so all five Tauri matrix jobs
are guarded, not just the independent Qt build.

---------

Co-authored-by: Bob <bob@bob.local>

* feat(research): inject APP_TO_CATEGORY map for non-browser app privacy (ActivityWatch#1397)

* feat(research): inject APP_TO_CATEGORY map into research config at build time

Adds APP_CATEGORY_MAP (72 entries, faithfully derived from Matthias Lehner's
APP_TO_CATEGORY dict) to the CI patch script.  When
[aw-watcher-window.research_app_category_map] is present in the submodule's
config.py (requires ActivityWatch/aw-watcher-window#136 in the pin), the patch
script now injects the app map alongside the existing URL/title category map.

Non-browser apps are replaced by a broad study category (e.g.
'Microsoft Outlook' → 'Email', 'Spotify' → 'Music & Audio') instead of
keeping the raw app name.  Unmapped apps become 'Excluded'.

The injection is non-fatal when the section is absent so this commit
stays compatible with older submodule pins before ActivityWatch#136 merges.

* fix(tests): unpack tuple return from patch_config in test assertions

* fix(research): bump aw-watcher-window past ActivityWatch#136 and fail closed on stale pins

The submodule was pinned at 624823a7, exactly one commit behind the merged
APP_TO_CATEGORY support (a297914c, ActivityWatch#136). That pin has no
[aw-watcher-window.research_app_category_map] section, and the injection step
treated a missing section as non-fatal — so the build went green, printed a
note into the CI log, and produced an artifact where non-browser apps keep
their raw names. That is the exact symptom the map exists to fix.

- bump aw-watcher-window 624823a7 -> a297914c (merged ActivityWatch#136)
- patch_config() now raises when the app-map section is absent
- regression test for the pre-ActivityWatch#136 pin

Verified by symptom against both pins' real config.py:
new pin injects 570 patterns + 72 app entries (exit 0); old pin aborts (exit 1).

* fix(research): survive the ActivityWatch#137 config layout, and anchor the flag rewrite

aw-watcher-window#137 moved the research knobs out of `default_config` into a
separate `research_defaults` template, so they stop being persisted into every
fresh install's config file. That is the right fix, but it removes both TOML
table headers the Research Edition patch script anchors on. Two defects follow.

1. Injection breaks on the next submodule bump.

   `patch_config()` requires exactly one
   `[aw-watcher-window.research_category_map]` and one
   `[aw-watcher-window.research_app_category_map]` header. Neither exists past
   ActivityWatch#137, so the script aborts and the Research Edition build fails. The pin is
   currently a297914 (the ActivityWatch#136 merge), where both headers still exist -- so the
   build works today and breaks the moment anything, including a dependabot
   submodule bump, moves it forward.

   The fail-closed message would also misdiagnose it as 'submodule predates
   ActivityWatch#136' when the real cause is the opposite.

2. The flag rewrite could silently disable the Research Edition.

   ActivityWatch#137 documents the release-time rewrite in a comment containing the literal
   text `sed -i 's/^research_enabled = false$/research_enabled = true/'`, and
   that comment sits *above* the real flag. The unanchored
   `text.replace(..., 1)` therefore patches the comment and leaves
   `research_enabled = false`, producing a green build with research disabled
   and no error anywhere.

Both layouts are now handled: post-ActivityWatch#137 the maps are injected into
`research_defaults` with unprefixed headers (that template is parsed standalone
and merged into the section key by key, so a prefixed header would create a
nested key nothing reads); pre-ActivityWatch#137 the existing prefixed headers are used. The
flag rewrite is line-anchored via regex, matching the contract ActivityWatch#137's own
comment documents, and refuses to guess if it finds anything other than exactly
one match.

The pre-ActivityWatch#136 guard now keys on the runtime lookup
`config.get("research_app_category_map"` rather than a table header, so it
tests the capability that actually matters and survives further reshuffling of
the config templates.

Verified against both real config.py revisions: 570 category patterns and 72 app
entries inject correctly, and the output parses as Python and as TOML in each.

* build(deps): bump aw-watcher-window past ActivityWatch#137

Advance the aw-watcher-window submodule from a297914 to a7690ac, picking up
ActivityWatch/aw-watcher-window#137 (fix(config): keep research options out
of the first-run config). This is the prerequisite for the post-ActivityWatch#137 config
layout the patch_research_edition_config.py script (c328757, in fix/re-patch-
config-shape) was rewritten to handle.

Without this bump, the Research Edition build would still pin to the
pre-ActivityWatch#137 layout and patch in category maps that no longer exist after
ActivityWatch#137 moved research knobs into a separate research_defaults template.

Verified: scripts/tests/test_patch_research_edition_config.py (7 tests,
all pass); live patch run against aw-watcher-window/aw_watcher_window/
config.py injects 570 unique URL/title patterns across 17 categories
and 72 app-name entries, and flips research_enabled from false to true.

Refs: ActivityWatch/aw-watcher-window#137, ErikBjare/bob#599,
tasks/aw-research-edition-study-ops-goal-arc

---------

Co-authored-by: Erik Bjäreholt <erik@bjareho.lt>
Co-authored-by: Bob <bob@bob.local>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant