Skip to content

fix(inkless:release): unblock the release workflow#714

Open
jeqo wants to merge 4 commits into
mainfrom
jeqo/fix-releases
Open

fix(inkless:release): unblock the release workflow#714
jeqo wants to merge 4 commits into
mainfrom
jeqo/fix-releases

Conversation

@jeqo

@jeqo jeqo commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

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

  • Validate by PR-presence: validate now runs branch-consistency.sh --check (matches inkless commits by PR number, correct for cherry-picked branches) instead of a SHA ancestry check that could never pass.
  • --check flag added to branch-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 support: resume=true finishes an already-tagged release that was never published. It skips tagging and validation (the tags were valid at cut time) and re-runs publish.
  • Release-notes rendering: notes are written to a file and passed via --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-changelog skill (separate PR) and is not on main yet. Until then the Release publishes with boilerplate notes.

@jeqo jeqo changed the title fix(inkless:release): unblock the release workflow (validate-by-PR, resume, notes rendering) fix(inkless:release): unblock the release workflow Jul 22, 2026
@jeqo
jeqo requested a review from Copilot July 22, 2026 15:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 --check mode to inkless-sync/branch-consistency.sh so CI can fail fast when a release branch is missing actionable Inkless commits (without requiring an upstream remote).
  • Extend inkless-release.yml with resume=true to skip validation/tagging when tags already exist, and adjust validation to use branch-consistency.sh --check rather 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.

Comment thread .github/workflows/inkless-release.yml
Comment thread .github/workflows/inkless-release.yml

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_branches is merged into ALL_BRANCHES without validating branch name format. Since the branch names are later interpolated into a git fetch refspec (+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 computing ALL_BRANCHES and 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' ' ')"

Comment thread .github/workflows/inkless-publish.yml

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comment thread inkless-sync/branch-consistency.sh
Comment thread .github/workflows/inkless-release.yml
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.
jeqo added 3 commits July 22, 2026 21:42
…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).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment thread docs/inkless/RELEASES.md Outdated
Comment thread docs/inkless/RELEASES.md Outdated
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).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

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