Skip to content

refactor(build): unify release artifact zip names behind one source - #94

Merged
loss-and-quick merged 1 commit into
mainfrom
build/module-zip-name
Jun 22, 2026
Merged

refactor(build): unify release artifact zip names behind one source#94
loss-and-quick merged 1 commit into
mainfrom
build/module-zip-name

Conversation

@loss-and-quick

Copy link
Copy Markdown
Owner

Summary

Our release zip names had drifted apart, with the format hand-written in four places:

Artifact Before
Android module kasumi-proxy-vX.Y.Z.zip
Windows portable (release) kasumi-proxy-X.Y.Z-windows-portable.zip
Linux portable (release) kasumi-proxy-X.Y.Z-linux-portable.zip
Windows portable (nightly) kasumi-proxy-X.Y.Z-portable.zip (no platform)

Inconsistencies: variant before the version for the module but after for the portables; v prefix kept for the module, stripped for the desktop builds; the nightly Windows portable missing its platform; and no Linux portable from the nightly at all.

This adds scripts/artifact-name.sh as the single source of truth (mirroring app-version.sh): given a variant it prints kasumi-proxy-<variant>-<version>.zip, version read verbatim from module.prop. Every producer now goes through it:

  • package-release.sh — the Android module zip default (now kasumi-proxy-module-…)
  • gen-update-json.sh — the Magisk/KernelSU updateJson zipUrl, which must match the uploaded asset. Renaming the module zip without this would point in-app updates at a 404 — the rename and this fix have to ship together.
  • release.yml / nightly.yml — the portable-zip steps; the release module-upload step uses a build/*.zip glob so the workflow never re-states the name.

Also brings the nightly build in line: it now publishes a Linux portable zip (only Windows had one), and drops the dead BUILD_NAME env that package-release.sh never read.

Resulting names — one scheme, variant before version, v kept everywhere:

kasumi-proxy-module-vX.Y.Z.zip
kasumi-proxy-windows-portable-vX.Y.Z.zip
kasumi-proxy-linux-portable-vX.Y.Z.zip

Affected layer

  • frontend/ — React Web UI
  • crates/ · src-tauri/ — Rust core / backend / Tauri desktop
  • module/ — Android installable zip (thin launcher over the Rust daemon)
  • scripts/ — build / release helpers
  • CI / .github/
  • Docs only

Verification

  • shellcheck clean on artifact-name.sh, package-release.sh, gen-update-json.sh
  • actionlint (v1.7.12) clean on release.yml + nightly.yml (incl. its shellcheck pass over the edited run: blocks)
  • artifact-name.sh {module,windows-portable,linux-portable} prints the expected names
  • gen-update-json.sh regenerates update.json with zipUrlkasumi-proxy-module-v0.4.1.zip (matches the uploaded asset); the version-specific update.json itself is left untouched (CI regenerates it on release)

Checklist

  • Title is a scoped Conventional Commit; commits are logically split
  • No build artifacts committed
  • Generated frontend/src/generated/ not touched
  • No user-visible strings changed
  • Renames touching the project id were grepped in all case forms

Notes for reviewers

The Android module rename is the user-facing change; the gen-update-json.sh edit is the non-obvious half that keeps in-app updates working. update.json in the repo still references the old name — that file is regenerated and committed by the release workflow, so it self-corrects on the next release rather than being hand-edited here.

Our zip names had drifted: the Android module was kasumi-proxy-<ver>,
the desktop portables were kasumi-proxy-<ver>-{windows,linux}-portable,
and the nightly Windows portable dropped the platform entirely
(kasumi-proxy-<ver>-portable) — variant before vs. after the version,
'v' kept in one place and stripped in another, with the format
hand-written in package-release.sh, gen-update-json.sh and both
workflows.

Add scripts/artifact-name.sh as the single source of truth: given a
variant it prints kasumi-proxy-<variant>-<version>.zip with the version
read verbatim from module.prop. Every producer now goes through it:

- package-release.sh — the module zip default (now kasumi-proxy-module-…)
- gen-update-json.sh — the Magisk updateJson zipUrl, which MUST match the
  uploaded asset; the rename would otherwise 404 in-app updates
- release.yml / nightly.yml — the portable-zip steps; the release module
  upload uses a glob so the workflow never re-states the name

Also brings the nightly build in line: it now publishes a Linux portable
zip (only Windows had one) and drops the dead BUILD_NAME env that
package-release.sh never read.

Resulting names:
  kasumi-proxy-module-vX.Y.Z.zip
  kasumi-proxy-windows-portable-vX.Y.Z.zip
  kasumi-proxy-linux-portable-vX.Y.Z.zip
@github-actions github-actions Bot added documentation Improvements or additions to documentation ci CI / workflows (.github/) labels Jun 22, 2026
@loss-and-quick
loss-and-quick merged commit f5cb96f into main Jun 22, 2026
8 checks passed
@loss-and-quick
loss-and-quick deleted the build/module-zip-name branch June 22, 2026 11:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci CI / workflows (.github/) documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant