Skip to content

ci: release workflow with git-cliff changelogs - #12

Merged
kasvith merged 2 commits into
mainfrom
release/v1.0.0
Oct 21, 2026
Merged

kasvith merged 2 commits into
mainfrom
release/v1.0.0

Conversation

@kasvith

@kasvith kasvith commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

Adds a Release workflow that tags, publishes to Hex and creates the GitHub release for one package per run. Changelogs come from conventional commits via git-cliff.

How to release

Actions → Release → Run workflow, then pick durable or durable_dashboard. Leave the version blank to take the next one git-cliff derives from the package's commits since its last tag, or enter one.

  1. Tag job: bumps @version, regenerates <package>/CHANGELOG.md (config in cliff.toml), commits chore(<package>): release X to main, and tags <package>-vX. The commit and the tag go up in one atomic push.

  2. Publish job:

    • mix compile --warnings-as-errors against Hex deps, so a dashboard that needs an unreleased durable fails here;
    • mix hex.publish with the HEX_API_KEY secret;
    • gh release create, with that version's changelog as the notes. Versions with a - are marked as prereleases.

    It skips anything already on Hex or GitHub, so "Re-run failed jobs" is safe.

Other changes

  • Dashboard dependency: durable_dashboard now always depends on {:durable, "~> 1.0"} from Hex. Setting DURABLE_PATH=../durable builds it against the local checkout instead. The CI dashboard job and the workspace mix commands set it, so tests still run against the monorepo's durable.
  • Docs and package: source_ref points at the per-package tags, and CHANGELOG.md ships in each package and its HexDocs.
  • Earlier releases: tagged durable-v0.1.0-rc (c0c0140) and durable_dashboard-v0.1.0-rc (63a36ee), the commits each rc was published from, so the 1.0.0 changelog lists only what changed since then.
  • Versions: both stay at 0.1.0-rc here. The workflow bumps them.

After merging

  1. Add the HEX_API_KEY repository secret. It must be a Hex key with API write access, from the wavezync Hex account that owns both packages.
  2. Run Release for durable with version 1.0.0.
  3. Run Release for durable_dashboard with version 1.0.0.

Tested with a dry run of the tag step against a throwaway remote: an explicit version, a refused duplicate, and an automatic minor bump from a feat: commit. actionlint passes on both workflows. Dashboard tests pass with DURABLE_PATH (237), and mix hex.build and mix docs pass for durable.

https://claude.ai/code/session_012aEMFtJKJsMz1vGtbSijGR

Actions → Release bumps a package's version, regenerates its CHANGELOG.md
with git-cliff from conventional commits, commits and tags
<package>-v<version> on main, publishes to Hex (HEX_API_KEY) and creates
the GitHub release. Publish re-runs skip what already went out.

durable_dashboard now always depends on durable from Hex ("~> 1.0");
DURABLE_PATH points it at a local checkout, which CI and the workspace
commands set. Docs link the per-package tags and ship the changelog.

Claude-Session: https://claude.ai/code/session_012aEMFtJKJsMz1vGtbSijGR
The core README links the dashboard's docs on HexDocs instead of a
relative path that doesn't resolve there.

Claude-Session: https://claude.ai/code/session_012aEMFtJKJsMz1vGtbSijGR
@kasvith
kasvith merged commit 3a0399c into main Oct 21, 2026
4 checks passed
@kasvith
kasvith deleted the release/v1.0.0 branch October 23, 2026 01:31
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