fix(inkless:release): unblock the release workflow#714
Open
jeqo wants to merge 4 commits into
Open
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates the Inkless GitHub release automation to be resumable and CI-friendly, primarily by changing branch validation to be PR-presence based (cherry-pick aware), adding a resume mode, and making release-notes rendering robust.
Changes:
- Add
--checkmode toinkless-sync/branch-consistency.shso CI can fail fast when a release branch is missing actionable Inkless commits (without requiring an upstream remote). - Extend
inkless-release.ymlwithresume=trueto skip validation/tagging when tags already exist, and adjust validation to usebranch-consistency.sh --checkrather than SHA ancestry. - Write GitHub Release notes to a temporary file and pass them via
--notes-file, and fail loudly on malformed matrix JSON instead of silently dropping notes.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
inkless-sync/branch-consistency.sh |
Adds --check flag and exposes actionable-missing count via exit code for CI gating. |
.github/workflows/inkless-release.yml |
Adds resume support, switches validation to PR-presence sync check, and adjusts job dependencies/conditions accordingly. |
.github/workflows/inkless-publish.yml |
Generates release notes via a temp file and uses --notes-file; hard-fails on invalid matrix JSON. |
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
.github/workflows/inkless-release.yml:159
extra_branchesis merged intoALL_BRANCHESwithout validating branch name format. Since the branch names are later interpolated into agit fetchrefspec (+refs/heads/$BRANCH:...), an unexpected value (e.g. containing:or other refspec syntax) could fetch/update unintended refs. Add a strict allowlist check (e.g.^inkless-[0-9]+\.[0-9]+$) immediately after computingALL_BRANCHESand fail fast if any entry is invalid.
# Merge with extra_branches input
ALL_BRANCHES=$(printf "%s\n%s" "$DISCOVERED" "$INPUT_EXTRA_BRANCHES" \
| tr ' ' '\n' | grep -v '^$' | sort -u)
echo "Active branches: $(echo "$ALL_BRANCHES" | tr '\n' ' ')"
jeqo
added a commit
that referenced
this pull request
Jul 22, 2026
…otes The finalize-release job now runs gen-changelog.py --summary against the freshly created inkless-release-<N> tag and appends the curated feat/fix/config summary to the Release body (best-effort: falls back to boilerplate notes if generation fails). Requires fetch-depth: 0 so the generator can diff the previous tag. Also documents the changelog/release-notes flow in RELEASES.md. Depends on the inkless-changelog generator added in the previous commit; stacks on the release workflow (#714) which owns inkless-publish.yml.
…cy.sh The release workflow's validate job invokes branch-consistency.sh --check to gate on actionable missing commits (by PR presence). Add the flag: it turns the actionable-missing count into a process exit code so CI can gate without parsing human-readable output. Old below-window commits are not actionable and do not fail the check.
…partial release Replace the validate job's exact-SHA ancestry check (git merge-base --is-ancestor MAIN_COMMIT) with branch-consistency.sh --check: release branches are built by cherry-picking, so commits exist under different SHAs and the SHA check could never pass. --check matches by PR number, the correct measure. Add resume=true: when a run created the tags but never published the Release, re-run with the same inkless_version to skip tagging and re-run build+publish (discovers branches/Kafka versions from the existing tags).
…dentation The release notes were built as a YAML block-scalar heredoc, so the leading indentation leaked into the markdown and rendered headings and bullets as an indented code block. Build the notes in a temp file with printf and pass --notes-file instead. The curated-changelog injection is split out to land with the inkless-changelog skill (the generator it calls lives there).
Clarify the prep->release seams in RELEASES.md: push branches is the prep gate; tags are created by the workflow (never by hand); resume=true finishes a partially-completed release; and a corrected break-glass build/publish procedure using the make targets with the right image tag format (<kafka>-<increment>-<arch>). The changelog-generation docs are split out to land with the inkless-changelog skill (the generator they reference lives there).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Makes the Inkless release workflow usable and resumable. Self-contained: everything the workflow calls at runtime is included, so it is safe to merge alone.
Changes
validatenow runsbranch-consistency.sh --check(matches inkless commits by PR number, correct for cherry-picked branches) instead of a SHA ancestry check that could never pass.--checkflag added tobranch-consistency.sh: turns the actionable-missing count into an exit code for CI. Skips the upstream (apache) fetch so it works in an origin-only CI checkout.resume=truefinishes an already-tagged release that was never published. It skips tagging and validation (the tags were valid at cut time) and re-runs publish.--notes-file, so YAML block-scalar indentation no longer leaks into the markdown. A malformed matrix now fails loudly instead of aborting silently.Not included
Curated-changelog injection is deferred; its generator lives with the
inkless-changelogskill (separate PR) and is not onmainyet. Until then the Release publishes with boilerplate notes.