Skip to content

ci: publish a draft github release with assets, add release conventions#99

Merged
0xKT merged 1 commit into
mainfrom
ci/release_pipeline
Jul 8, 2026
Merged

ci: publish a draft github release with assets, add release conventions#99
0xKT merged 1 commit into
mainfrom
ci/release_pipeline

Conversation

@0xKT

@0xKT 0xKT commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Summary

release.yml only uploaded the built wheel to Actions artifacts, so a pushed tag never produced a downloadable Release asset. install.sh resolves the wheel from the latest Release asset, so a tag silently kept serving the old version until someone manually created the Release and attached the wheel. This builds a draft Release with the wheel and sdist attached (cutting a release becomes one review plus a Publish click), and documents the conventions in RELEASING.md.

  • release.yml: on a version tag, create a draft GitHub Release with the wheel + sdist attached, a dated title, and notes prefilled from a template. Idempotent re-runs (list endpoint + delete a stale draft, keeping the tag); prerelease tags (vX.Y.Z-rcN) stay out of /releases/latest; the tag is guarded against the pyproject version; adds concurrency and aligns action versions with ci/commits.
  • RELEASING.md + .github/release-notes-template.md: the release conventions and the CI notes skeleton.

Publishing stays a deliberate human step -- CI only creates the draft.

Type

  • CI / tooling

Verification

Local (macOS):

  • actionlint (with shellcheck on the run blocks) clean on release.yml.

  • YAML parses; the version/prerelease shell logic and template substitution run correctly against the real pyproject and tag values.

  • Idempotency detection verified against the live releases API (published tag -> left alone; missing tag -> create).

  • Not yet run end to end on a GitHub runner. Before the first stable release, a vX.Y.Z-rc1 tag will dry-run the full draft/attach/idempotency path -- a prerelease never becomes /releases/latest, so users are unaffected.

  • Relevant tests pass locally

  • Relevant lint / type checks pass locally

  • User-facing docs or screenshots are updated when needed

Risk

  • Security impact considered
  • Backward compatibility considered
  • Rollback path is clear for risky changes

The job gets contents: write (needed to create the Release). No behavior change until a version tag is pushed; the workflow is dormant otherwise. Rollback: revert the commit.

Related Issues

N/A

@0xKT 0xKT requested review from arelchan and cyfyifanchen July 7, 2026 15:24
release.yml only uploaded the wheel to Actions artifacts, so a pushed tag
never produced a downloadable Release asset -- install.sh, which resolves
the latest Release wheel, silently kept serving the old version. Build a
draft Release with the wheel and sdist attached so a release is one review
plus a Publish click.

- release.yml: on a version tag, create a draft Release with assets, a
  dated title, notes prefilled from a template; idempotent re-runs;
  prerelease tags stay out of /releases/latest; tag vs pyproject version
  guard; concurrency; align action versions with ci/commits.
- RELEASING.md + .github/release-notes-template.md: release conventions
  and the CI notes skeleton.

Co-authored-by: Claude (claude-opus-4-8) <noreply@anthropic.com>
@0xKT 0xKT force-pushed the ci/release_pipeline branch from 652862d to 4d08744 Compare July 7, 2026 15:27
@0xKT 0xKT changed the title ci: publish a draft GitHub Release with assets, add release conventions ci: publish a draft github release with assets, add release conventions Jul 7, 2026
@0xKT 0xKT merged commit 7d5f29d into main Jul 8, 2026
7 checks passed
@0xKT 0xKT deleted the ci/release_pipeline branch July 8, 2026 03:14
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