Skip to content

ci(release): one-click release from the Actions UI - #234

Merged
got3nks merged 2 commits into
amule-org:masterfrom
got3nks:feat/one-click-release
Jun 23, 2026
Merged

ci(release): one-click release from the Actions UI#234
got3nks merged 2 commits into
amule-org:masterfrom
got3nks:feat/one-click-release

Conversation

@got3nks

@got3nks got3nks commented Jun 23, 2026

Copy link
Copy Markdown

What

Adds a one-click release path to release.yml. A maintainer opens Actions → Release → Run workflow, picks the branch to release from, types a version (e.g. 3.0.1), and the workflow creates the tag, builds every platform, and assembles a draft GitHub Release with all artifacts attached. No local git tag / git push, and no PAT — the tag is pushed by GITHUB_TOKEN and the same run continues via needs:, so the "GITHUB_TOKEN pushes don't re-trigger workflows" limitation never applies.

Pushing a release tag from a local checkout still works exactly as before; this only adds the UI entry point.

How to cut a release

  1. Go to Actions → Release → Run workflow.
  2. In Use workflow from, pick the branch to release from (normally master).
  3. Enter the version, e.g. 3.0.1 or 3.1.0-rc1, then click Run workflow.
  4. The run tags the branch tip, builds the full matrix, and creates a draft Release. Open it under Releases, review and edit the auto-generated notes, confirm the asset list, and click Publish.

A hyphenated version such as 3.1.0-rc1 is automatically marked as a pre-release. Re-running with a version whose tag already exists just re-assembles the assets, so a transient runner failure can be retried without cutting a new tag.

Safety: artifact manifest gate

Before the draft is assembled, the release job asserts that all ten expected assets are present and names any that are missing:

  • Linux AppImage ×2 (x86_64, aarch64)
  • Linux Flatpak ×2 (x86_64, aarch64)
  • macOS Universal2 .dmg ×1
  • Windows portable .zip ×2 (x64, arm64)
  • Windows installer .exe ×2 (x64, arm64)
  • source bundle ×1

If any are absent the job fails and no draft is produced, so a half-built matrix can't silently ship an incomplete release.

Also in this PR

Fixes the macos-universal2 job to fetch tags, so the Universal2 .dmg is named aMule-<tag>-macOS-universal2.dmg instead of falling back to the short commit SHA on its shallow checkout.

Validation

Run end-to-end on a fork with version 0.0.0-fork-test: the tag was auto-created at the branch tip, the full 14-job matrix went green, the manifest gate reported all ten assets, and a draft pre-release was produced with every asset correctly version-named.

got3nks added 2 commits June 23, 2026 11:05
Add a prepare-tag job so a maintainer can cut a release entirely from
the Actions UI: pick a branch, type a version, and the workflow creates
and pushes the tag at the branch tip before running the packaging
matrix. No local git tag/push needed, and no PAT (the same run
continues via needs:). The push-a-tag path is unchanged.

Also assert the full 10-asset manifest in the release job before the
draft is assembled, so a half-built matrix names the missing platform
instead of failing as a generic dependency error.
…named

The Universal2 job derived its .dmg name from `git describe --tags
--always` on a shallow checkout with no tags, so it fell back to the
short SHA (aMule-d813cbe-macOS-universal2.dmg) while every other
artifact used the release tag. Fetch full history + tags so the dmg is
named aMule-<tag>-macOS-universal2.dmg.
@got3nks
got3nks merged commit 56521db into amule-org:master Jun 23, 2026
10 checks passed
@got3nks
got3nks deleted the feat/one-click-release branch June 23, 2026 10:17
@mrjimenez

Copy link
Copy Markdown

Awsome job, worked like a charm!

@got3nks

got3nks commented Jun 24, 2026

Copy link
Copy Markdown
Author

Awsome job, worked like a charm!

Yay! 🎉

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.

2 participants