The 'latest' label for the current-stable channel was inconsistent
with the channel set we use elsewhere (alpha / beta / stable). Rename
to 'stable' so URLs, file names, zip names, and image tags all line
up with the channel terminology used in the bootstrap, AGENTS.md
discipline rules, and chart consumers.
File / artifact renames
- website/releases/<tool>_latest.html → <tool>_stable.html (5 files)
- website/track-latest.zip → track-stable.zip
- shared/build-lib.sh: promote_release writes/refreshes _stable.html
- bootstrap/level{1,2}.html.tmpl: channels map drops 'latest', keeps
'stable' as the canonical name. ?v=stable is now the explicit way
to switch to current-stable for one request (alongside ?v=alpha,
?v=beta, and ?v=X.Y.Z).
- build.sh: install.zip sources from <tool>_stable.html; emits
track-stable.zip instead of track-latest.zip.
Container image (.woodpecker.yml rewritten)
- Tag publishing now cascades:
zddc-server-vX.Y.Z → :X.Y.Z, :stable, :beta, :alpha, :latest
zddc-server-vX.Y.Z-beta.N → :X.Y.Z-beta.N, :beta, :alpha
zddc-server-vX.Y.Z-alpha.N → :X.Y.Z-alpha.N, :alpha
- :stable, :beta, :alpha are now first-class channel pointers; chart
consumers (e.g. tnd-zddc-chart) can FROM :beta for dev and FROM
:stable for prod.
- :latest kept as an alias for :stable per Docker convention.
Documentation sweep
- AGENTS.md, ARCHITECTURE.md, CLAUDE.md, README.md
- bootstrap/README.md, zddc/README.md
- website/index.html, website/zddc-server.html
- transmittal/template.html, transmittal/README.md
all updated to reference _stable.html / track-stable.zip / the
'stable' channel name. ARCHITECTURE.md's manual freshen example
points at ./freshen-channel instead of the old git-checkout snippet.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50 lines
1.8 KiB
Cheetah
50 lines
1.8 KiB
Cheetah
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Loading {{TOOL_TITLE}}…</title>
|
|
<style>html,body{margin:0;font:14px system-ui,sans-serif;color:#666;padding:1rem}</style>
|
|
</head>
|
|
<body>
|
|
Loading…
|
|
<script>
|
|
// Level-2 bootstrap. Fetches {{TOOL}} from zddc.varasys.io and
|
|
// document.write()s it in place. The default upstream is the
|
|
// {{CHANNEL}} channel; the URL parameter ?v= overrides it:
|
|
//
|
|
// ?v=alpha|beta|stable switches to that channel
|
|
// ?v=0.0.4 (or v0.0.4) pins to that exact stable version
|
|
// (none) uses the {{CHANNEL}} default
|
|
//
|
|
// Requires zddc.varasys.io to serve Access-Control-Allow-Origin: *.
|
|
(async function () {
|
|
const params = new URLSearchParams(location.search);
|
|
const v = params.get('v');
|
|
const tool = '{{TOOL}}';
|
|
const defaultChannel = '{{CHANNEL}}';
|
|
const channels = { alpha: '_alpha', beta: '_beta', stable: '_stable' };
|
|
|
|
function suffixFor(value) {
|
|
if (!value) return '_' + defaultChannel;
|
|
if (value in channels) return channels[value];
|
|
const ver = value.startsWith('v') ? value.slice(1) : value;
|
|
return '_v' + ver;
|
|
}
|
|
|
|
const upstream = 'https://zddc.varasys.io/releases/' + tool + suffixFor(v) + '.html';
|
|
|
|
try {
|
|
const resp = await fetch(upstream, { cache: 'no-cache', credentials: 'omit' });
|
|
if (!resp.ok) throw new Error(resp.status + ' ' + resp.statusText);
|
|
const html = await resp.text();
|
|
document.open();
|
|
document.write(html);
|
|
document.close();
|
|
} catch (err) {
|
|
document.body.textContent = 'Failed to load from ' + upstream + ': ' + err.message;
|
|
}
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|