Skip to content

ci: date the nightly release, so a downstream can pin one - #70

Merged
lens0021 merged 1 commit into
mainfrom
claude/dated-nightly-releases
Aug 17, 2026
Merged

ci: date the nightly release, so a downstream can pin one#70
lens0021 merged 1 commit into
mainfrom
claude/dated-nightly-releases

Conversation

@lens0021

Copy link
Copy Markdown
Contributor

The problem

The nightly says what it is for:

Build the per-platform tarballs from the latest main into a rolling "nightly" prerelease, so downstreams (e.g. wikven) can track SifterSearch without a formal release.

It then published to a single rolling nightly tag, deleted and recreated at main's tip each night — which is the one shape that downstream cannot use.

wikven pins SifterSearch by release tag in its Dockerfile, and says of the pin sitting directly beneath it:

Commits, not the branch tip: REL1_46 takes translatewiki updates weekly, so a branch pin builds a different Translate from the same wikven commit a week later.

It also now asserts in CI that two bakes of the same source are byte-identical. A tag whose contents change nightly is a branch pin wearing a tag's clothes, so the nightly could not be pinned by the very project it was built for — only a formal release could, which is what the nightly was meant to spare them.

The change

nightly-<date> names one build forever. A downstream can pin it, stay reproducible, and updatecli has something to bump.

Nothing references the rolling tag — not this repository, not wikven — so it goes rather than staying on as an alias whose whole behaviour is the problem.

Two smaller faults went with the old shape, both from publishing before the assets existed:

  • delete-then-recreate left a window where the tag resolved to nothing and a downstream fetch would 404;
  • the release was created published, then packaged, so it was visible carrying no tarballs for the length of a five-platform build.

Creating the release as a draft, attaching every platform, then un-drafting closes both — and is what GitHub's immutable releases require in any case, since assets lock the moment a release is published and only a draft can still be written to.

A feat/fix gate comes with it, so a day of chores or CI-only commits does not mint a release identical to yesterday's.

This is wikven's own nightly.yml, structure and reasoning alike; the two repositories were solving the same problem two different ways, and only one of them had written down why.

What a downstream does with it

wikven's Dockerfile takes a tag directly, so tracking a nightly needs no change there:

ARG SIFTERSEARCH_VERSION=nightly-2026-08-18

and reproducibility survives, because that tag will hold the same tarballs next month.

Notes

  • No change to what is built or packaged — package.yaml is untouched apart from its header comment, and still receives a tag and uploads the same assets to it.
  • The existing nightly release and tag are left in place by this PR; they can be deleted whenever you like, since nothing consumes them.
  • The gate looks for the last nightly-* tag, and the current tag is nightly with no dash, so the first run after this merges is unconditional — which is what you want for the first dated build.
  • Independent of fix: index each page in its own language, not the wiki's #69; branched from main, no overlap.

Generated by Claude Code

The nightly exists so downstreams can track SifterSearch without waiting for
a formal release -- wikven is the one named in the comment. It published to a
single rolling "nightly" tag, deleted and recreated at main's tip each night,
which is the one shape that downstream cannot use.

wikven pins SifterSearch by release tag in its Dockerfile, and says of the
pin beside it: "Commits, not the branch tip: a branch pin builds a different
Translate from the same wikven commit a week later." It now also asserts in
CI that two bakes of the same source are byte-identical. A tag whose contents
change nightly is a branch pin wearing a tag's clothes, so the nightly could
not be pinned by the project it was built for; only a formal release could.

Dated tags fix that: nightly-<date> names one build forever, a downstream can
pin it and stay reproducible, and updatecli has something to bump. Nothing
references the rolling tag -- not this repository, not wikven -- so it goes
rather than staying on as an alias whose whole behaviour is the problem.

Two smaller faults go with it, both from publishing before the assets exist:

- delete-then-recreate leaves a window where the tag resolves to nothing and
  a downstream fetch 404s;
- the release was created published, then packaged, so it was visible with no
  tarballs on it for the length of a five-platform build.

Creating the release as a draft, attaching every platform, then un-drafting
closes both, and is what GitHub's immutable releases require in any case:
assets lock the moment a release is published, and only a draft can still be
written to. This is wikven's own nightly, structure and reasoning alike.

The feat/fix gate comes with it, so a day of chores or CI-only commits does
not mint a release identical to yesterday's.

---
_Generated by [Claude Code](https://claude.ai/code/session_01NiyBN88bnGhcXVUXkpD7Mc)_

Co-authored-by: Claude <noreply@anthropic.com>
@lens0021
lens0021 marked this pull request as ready for review August 17, 2026 09:53
@lens0021
lens0021 merged commit 3723def into main Aug 17, 2026
10 checks passed
@lens0021
lens0021 deleted the claude/dated-nightly-releases branch August 17, 2026 09:53
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