8000 Release from the tag: crates, image and GitHub Release by one workflow (0.1.2) by ynishi · Pull Request #15 · ynishi/evalhub · GitHub
[go: up one dir, main page]

Skip to content

Release from the tag: crates, image and GitHub Release by one workflow (0.1.2) - #15

Merged
ynishi merged 1 commit into
mainfrom
chore/release-ci
Sep 22, 2026
Merged

ynishi merged 1 commit into
mainfrom
chore/release-ci

Conversation

@ynishi
@ynishi ynishi commented Sep 22, 2026 •
Copy link
Copy Markdown
Owner

The tag push becomes the only release action a person takes; the release workflow does the rest.

What changes

  • .github/workflows/release.yml on a v* tag:
    • check: the tag names the version in Cargo.toml and the tagged commit is on main; otherwise nothing runs.
    • crates: just package, cargo semver-checks against the versions on crates.io, then cargo publish for whichever of evalhub-schema / evalhub-core / evalhub-query is not yet on crates.io at that version. Authentication is crates.io Trusted Publishing (OIDC, rust-lang/crates-io-auth-action); no token is stored. A rerun publishes nothing twice.
    • image: as before (ghcr.io/ynishi/evalhub:<version>, :latest).
    • release: a GitHub Release for the tag, notes from the merged pull request's body plus crate and image links.
  • deploy/release/land.sh <pr> <issue>: merge with a merge commit (never squash), close the issue, fast-forward main, then tag.sh.
  • deploy/release/tag.sh: on main, clean, HEAD is origin/main, CI for HEAD green (waits), version from Cargo.toml, tag once, push, follow the workflow with gh run watch.
  • just semver-check; CONTRIBUTING §Releases; pointers in AGENTS.md and docs/hosting.md.

Why not release-plz (dsl-kit's flow)

Its version and changelog are computed from Conventional Commit headers, which this repository does not use (prose subjects, bump riding with the last change), and its release PR carries a bot commit without Signed-off-by. What it is for (no hand-typed publish, one tag as the trigger, a semver check, a release page) is taken; the rest is left.

0.1.2

This PR is the release that exercises the workflow it adds: the version bump rides in its one commit, and landing it (deploy/release/land.sh 15 14) tags v0.1.2 from a commit that contains release.yml. No Rust code changed since 0.1.1.

Verified

  • bash -n on both scripts; release.yml parses; the PR lookup by merge sha returns Hosting: SDK crates on crates.io, the application as an image, the service on Fly.io (0.1.1) #13 for the 0.1.1 merge commit; gh run watch --exit-status exists.
  • cargo fmt --check, cargo clippy --workspace --all-targets -D warnings, cargo test -p evalhub-schema / -core / -query, just package at 0.1.2, just semver-check against 0.1.1.
  • Trusted Publishing is enabled on crates.io for the three crates (repository ynishi/evalhub, workflow release.yml).
  • Not run before merge: the workflow itself; that is what the tag does.

Refs #14

…w (0.1.2)

A release was three remote writes typed by hand after the merge (tag
push, `cargo publish` for the SDK crates, and the image through the old
release workflow), driven for 0.1.1 by a script pair written during the
release and by a long-lived `cargo login` token on one machine. Now the
tag push is the only thing a person does.

`release.yml` on a `v*` tag: `check` refuses a tag whose version is not
the manifest's or whose commit is not on main; `crates` runs `just
package`, cargo-semver-checks against the published versions, then
publishes whichever of evalhub-schema / -core / -query is not on
crates.io at that version, authenticated by crates.io Trusted Publishing
(OIDC from this repository and workflow file; no stored token; the first
version of each crate had to be published by hand, which 0.1.0 was);
`image` is unchanged; `release` creates the GitHub Release with the
merged pull request's body as notes. A rerun publishes nothing twice and
leaves an existing release alone.

`deploy/release/land.sh <pr> <issue>` merges with a merge commit (never
squash: the commits carry the Signed-off-by), closes the issue,
fast-forwards main, and hands to `deploy/release/tag.sh`, which waits
for main's CI, tags once, pushes, and follows the workflow to the end.
`just semver-check` is the same API check by hand.

release-plz as in dsl-kit was considered and not taken: its version and
changelog come from Conventional Commit headers this repository does not
use, and its release PR carries a bot commit without a sign-off.

Version 0.1.2, so that this change is released by the workflow it adds:
the tag will point at a commit that contains it. No Rust code changed.

Verified: bash -n on both scripts; release.yml parses; the PR lookup
by merge sha returns #13 for the 0.1.1 merge commit; `gh run watch
--exit-status` exists; cargo fmt --check, cargo clippy --workspace
--all-targets -D warnings, cargo test -p evalhub-schema / -core /
-query, `just package` at 0.1.2, `just semver-check` against 0.1.1.
Trusted Publishing is enabled on crates.io for the three crates.

Refs #14

Signed-off-by: Yutaka Nishimura <ytk.nishimura@gmail.com>
@ynishi ynishi changed the title Release from the tag: crates, image and GitHub Release by one workflow Release from the tag: crates, image and GitHub Release by one workflow (0.1.2) Sep 22, 2026
@ynishi
ynishi merged commit 98d39c6 into main Sep 22, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
< 5296 div data-show-on-forbidden-error hidden>

Uh oh!

There was an error while loading. Please reload this page.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

0