release: zddc-server v0.0.8-alpha.2 + binary publish step

Adds binary mirroring to release-image.sh: cross-compiled binaries from
zddc/dist/ are now copied to website/releases/zddc-server-<os>-<arch>-<channel>
for every channel in the cascade, so https://zddc.varasys.io/releases/
serves binaries alongside the HTML tools. Channel pointers are mutable;
no immutable per-version files are written (the container registry
provides per-version pinning via image tags).

Plain `sh build.sh` does NOT mirror binaries — only `release-image.sh`
does, deliberately, to avoid 40MB git churn per dev iteration.

This commit also picks up the routine alpha-mirror refresh from the
v0.0.8-alpha.2 image cut.
This commit is contained in:
ZDDC 2026-04-29 18:07:36 -05:00
parent 43c370ab3c
commit 566070ca80
11 changed files with 50 additions and 5 deletions

View file

@ -321,6 +321,18 @@ Pre-release semver ordering (`0.0.8-alpha.1 < 0.0.8-alpha.2 <
tag sorting, `git tag --sort=-v:refname`, `sort -V`, npm, cargo — tag sorting, `git tag --sort=-v:refname`, `sort -V`, npm, cargo —
so consumers can pin or compare versions without surprises. so consumers can pin or compare versions without surprises.
**Binary publishing** — `release-image.sh` also mirrors the
cross-compiled binaries from `zddc/dist/zddc-server-<os>-<arch>` into
`website/releases/zddc-server-<os>-<arch>-<channel>` for every channel
in the cascade. These are mutable channel pointers (no immutable
per-version files — those live in the container registry to keep the
git tree from growing 40MB per release). Plain `sh build.sh` does
NOT mirror the binaries; only `release-image.sh` does, deliberately,
so the website's binaries always match a published image.
The mirrored files at `https://zddc.varasys.io/releases/zddc-server-…`
are what the dev shell's `zddc-use` helper fetches by default.
Prerequisite: `podman login codeberg.org` (one-time, with a Codeberg Prerequisite: `podman login codeberg.org` (one-time, with a Codeberg
personal token scoped `package:write`). personal token scoped `package:write`).

View file

@ -133,6 +133,39 @@ echo
# --- Refresh HTML dist (Containerfile COPYs from dist/web) ------------------ # --- Refresh HTML dist (Containerfile COPYs from dist/web) ------------------
sh "$SCRIPT_DIR/build.sh" sh "$SCRIPT_DIR/build.sh"
# --- Mirror cross-compiled binaries to website/releases/ -------------------
# Channel pointers, mutable: cascade rules mirror this image's binaries to
# every channel in the cascade so a `zddc-use :stable` curl pulls bytes that
# match the just-published stable image. Per-version pinning is provided by
# the container registry's :vX.Y.Z-alpha.N tag, not by an immutable file
# here — keeps the repo from growing 40MB per release. Plain `sh build.sh`
# does NOT mirror binaries, deliberately: it would dirty 40MB of files on
# every dev iteration. Use release-image.sh as the publish trigger.
publish_binary() {
_src="$1" # path under zddc/dist/, e.g. zddc-server-linux-amd64
_basename=$(basename "$_src")
if [ ! -f "$SCRIPT_DIR/zddc/dist/$_src" ]; then
echo "warn: $_src not found in zddc/dist/; skipping mirror" >&2
return 0
fi
# The version-style tag (e.g. 0.0.8-alpha.1) is in $TAGS too — skip it;
# only iterate the channel-name tags.
for _tag in $TAGS; do
case "$_tag" in
alpha | beta | stable)
_dest="$SCRIPT_DIR/website/releases/${_basename%.exe}-${_tag}"
case "$_basename" in *.exe) _dest="${_dest}.exe" ;; esac
cp -f "$SCRIPT_DIR/zddc/dist/$_src" "$_dest"
echo "mirrored $_src → website/releases/$(basename "$_dest")"
;;
esac
done
}
publish_binary zddc-server-linux-amd64
publish_binary zddc-server-darwin-amd64
publish_binary zddc-server-darwin-arm64
publish_binary zddc-server-windows-amd64.exe
# --- Tag the commit (idempotent: skip if the tag already points here) ------- # --- Tag the commit (idempotent: skip if the tag already points here) -------
if git -C "$SCRIPT_DIR" rev-parse -q --verify "refs/tags/$GIT_TAG" >/dev/null; then if git -C "$SCRIPT_DIR" rev-parse -q --verify "refs/tags/$GIT_TAG" >/dev/null; then
_existing=$(git -C "$SCRIPT_DIR" rev-list -n 1 "$GIT_TAG") _existing=$(git -C "$SCRIPT_DIR" rev-list -n 1 "$GIT_TAG")

View file

@ -2095,7 +2095,7 @@ td[data-field="trackingNumber"] {
<div class="header-left"> <div class="header-left">
<div class="header-title-group"> <div class="header-title-group">
<span class="app-header__title">ZDDC Archive</span> <span class="app-header__title">ZDDC Archive</span>
<span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 22:41:21 · 9459139-dirty</span></span> <span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 23:06:28 · 43c370a-dirty</span></span>
</div> </div>
<button id="addDirectoryBtn" class="btn btn-primary">Add Local Directory</button> <button id="addDirectoryBtn" class="btn btn-primary">Add Local Directory</button>
<button id="refreshHeaderBtn" class="btn btn-secondary hidden" title="Refresh Data" style="font-size:1.1rem;"></button> <button id="refreshHeaderBtn" class="btn btn-secondary hidden" title="Refresh Data" style="font-size:1.1rem;"></button>

View file

@ -1358,7 +1358,7 @@ body.help-open .app-header {
<div class="header-left"> <div class="header-left">
<div class="header-title-group"> <div class="header-title-group">
<span class="app-header__title">ZDDC Classifier</span> <span class="app-header__title">ZDDC Classifier</span>
<span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 22:41:21 · 9459139-dirty</span></span> <span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 23:06:28 · 43c370a-dirty</span></span>
</div> </div>
<button id="selectDirectoryBtn" class="btn btn-primary">Select Directory</button> <button id="selectDirectoryBtn" class="btn btn-primary">Select Directory</button>
<button id="refreshBtn" class="btn btn-secondary hidden" title="Refresh and rescan directory">Refresh</button> <button id="refreshBtn" class="btn btn-secondary hidden" title="Refresh and rescan directory">Refresh</button>

View file

@ -884,7 +884,7 @@ body {
<header class="app-header"> <header class="app-header">
<div class="header-left"> <div class="header-left">
<span class="app-header__title">ZDDC Archive</span> <span class="app-header__title">ZDDC Archive</span>
<span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 22:41:21 · 9459139-dirty</span></span> <span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 23:06:28 · 43c370a-dirty</span></span>
</div> </div>
<div class="header-right"> <div class="header-right">
<button id="theme-btn" class="btn btn-secondary" title="Theme: auto (follows OS)" aria-label="Theme: auto (follows OS)"></button> <button id="theme-btn" class="btn btn-secondary" title="Theme: auto (follows OS)" aria-label="Theme: auto (follows OS)"></button>

View file

@ -1650,7 +1650,7 @@ body.help-open .app-header {
<div class="header-left"> <div class="header-left">
<div class="header-title-group"> <div class="header-title-group">
<span class="app-header__title">ZDDC Markdown</span> <span class="app-header__title">ZDDC Markdown</span>
<span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 22:41:21 · 9459139-dirty</span></span> <span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 23:06:28 · 43c370a-dirty</span></span>
</div> </div>
<button id="select-directory" class="btn btn-primary" title="Select a Directory">Select Directory</button> <button id="select-directory" class="btn btn-primary" title="Select a Directory">Select Directory</button>
</div> </div>

View file

@ -2192,7 +2192,7 @@ dialog.modal--narrow {
<span id="no-js-notice" class="text-gray-400 text-xs italic">JavaScript not available</span> <span id="no-js-notice" class="text-gray-400 text-xs italic">JavaScript not available</span>
<div class="header-title-group"> <div class="header-title-group">
<span class="app-header__title">ZDDC Transmittal</span> <span class="app-header__title">ZDDC Transmittal</span>
<span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 22:41:21 · 9459139</span></span> <span class="build-timestamp"><span style="color:red;font-weight:bold">v0.0.3-alpha · 2026-04-29 23:06:28 · 43c370a-dirty</span></span>
</div> </div>
<div class="app-header__spacer"></div> <div class="app-header__spacer"></div>
<div class="app-header__icons"> <div class="app-header__icons">

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.