Skip to content

Publish release archives to GitHub Releases with SHA-512 siblings#5233

Merged
SeanTAllen merged 1 commit into
mainfrom
publish-releases-to-github
Apr 15, 2026
Merged

Publish release archives to GitHub Releases with SHA-512 siblings#5233
SeanTAllen merged 1 commit into
mainfrom
publish-releases-to-github

Conversation

@SeanTAllen
Copy link
Copy Markdown
Member

@SeanTAllen SeanTAllen commented Apr 15, 2026

Mirrors the release flow corral and ponyup recently adopted: each platform job now attaches its archive plus a .sha512 sibling to the tag's GitHub Release, in addition to pushing to Cloudsmith. Consumers get an integrity artifact without an extra API round-trip.

The empty Release is created in pre-artefact-creation so the 13 platform jobs upload into a pre-existing Release in parallel. publish-release-notes-to-github later fills the body without replacing the assets. release-bot-action is bumped from 0.6.5 to 0.6.6 repo-wide (to pick up the new create-empty-github-release entrypoint).

Divergences from the plan

  • github_release.py docstring says "ponyc" instead of the verbatim "corral" from the source file. One-word accuracy delta.
  • write_sha512_sibling writes in binary mode, diverging from corral/ponyup. On Windows, text mode translates \n to \r\n and would produce Windows archives with CRLF-terminated siblings while Linux/macOS produce LF. No current consumer byte-parses the sibling, so nothing is visibly broken today — but ponyup discussion Ponyc can build with VS2015 #405's migration will rely on these files, so fix now rather than on first failure. Follow-up: upstream the fix to corral and ponyup.

Validation

  • actionlint passes on all four modified workflow files.
  • Smoke-tested write_sha512_sibling locally: byte-identical to hashlib.sha512 hex + LF.
  • Verified /usr/bin/python3 is present in all 9 Linux builder images (5 x86-64 natively, 4 arm64 via qemu-user): ubuntu22.04, ubuntu24.04 (both archs), alpine 3.21/3.22/3.23 (both archs).

Known operational caveats

  • If a platform job's GitHub upload fails after its Cloudsmith push succeeds, re-pushing the X.Y.Z tag re-runs every platform job. Whether Cloudsmith accepts a duplicate --version push idempotently is unverified. If it rejects duplicates, the replay path is to run github_release.py upload locally for the affected archive.
  • create-empty-github-release, publish-release-notes-to-github asset preservation, and Cloudsmith's duplicate-push semantics are first truly exercised by the next real release.

Mirrors the flow corral and ponyup recently adopted: in addition to
pushing archives to Cloudsmith, each platform job now attaches its
archive and a `.sha512` sibling to the tag's GitHub Release. Consumers
get an integrity artifact without an extra API round-trip.

The empty Release is created in pre-artefact-creation so the 13
platform jobs run in parallel against a pre-existing Release. The
announce workflow's publish-release-notes-to-github step later fills
in the body without replacing the assets.

release-bot-action bumps from 0.6.5 to 0.6.6 repo-wide for the new
create-empty-github-release entrypoint.
@ponylang-main ponylang-main added the discuss during sync Should be discussed during an upcoming sync label Apr 15, 2026
SeanTAllen added a commit to ponylang/changelog-tool that referenced this pull request Apr 15, 2026
Text mode on Windows translates '\n' to '\r\n', which would produce
CRLF-terminated siblings for Windows-built archives while Linux/macOS
produce LF. Future consumers (ponyup discussion #405) byte-compare the
file, so the asymmetry is a latent portability bug.

changelog-tool has no Windows release jobs today, so this is defensive;
applied for consistency with the same script duplicated across corral,
ponyup, and ponyc (ponylang/ponyc#5233) pending centralization.
SeanTAllen added a commit to ponylang/corral that referenced this pull request Apr 15, 2026
…l output

Python text mode on Windows translates '\n' to '\r\n' on write, which
would yield CRLF-terminated siblings for Windows archives while
Linux/macOS produce LF. Consumers byte-compare the file, so the
asymmetry is a latent portability bug. Mirrors ponylang/ponyc#5233.
SeanTAllen added a commit to ponylang/changelog-tool that referenced this pull request Apr 15, 2026
Text mode on Windows translates '\n' to '\r\n', which would produce
CRLF-terminated siblings for Windows-built archives while Linux/macOS
produce LF. Future consumers (ponyup discussion #405) byte-compare the
file, so the asymmetry is a latent portability bug.

changelog-tool has no Windows release jobs today, so this is defensive;
applied for consistency with the same script duplicated across corral,
ponyup, and ponyc (ponylang/ponyc#5233) pending centralization.
SeanTAllen added a commit to ponylang/corral that referenced this pull request Apr 15, 2026
…l output (#317)

Python text mode on Windows translates '\n' to '\r\n' on write, which
would yield CRLF-terminated siblings for Windows archives while
Linux/macOS produce LF. Consumers byte-compare the file, so the
asymmetry is a latent portability bug. Mirrors ponylang/ponyc#5233.
@SeanTAllen SeanTAllen merged commit 9aa6701 into main Apr 15, 2026
18 checks passed
@SeanTAllen SeanTAllen deleted the publish-releases-to-github branch April 15, 2026 02:48
@ponylang-main ponylang-main removed the discuss during sync Should be discussed during an upcoming sync label Apr 15, 2026
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