Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ jobs:
MDBASE_TS_DIR: .sources/mdbase

- name: Type and content checks
run: pnpm test:deploy:dev && pnpm check
run: pnpm test:deploy:dev && pnpm check:release && pnpm check
env:
GH_TOKEN: ${{ github.token }}

- name: Build website
run: pnpm build
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,9 @@ jobs:
MDBASE_TS_DIR: .sources/mdbase

- name: Check and build website
run: pnpm check && pnpm build
run: pnpm check:release && pnpm check && pnpm build
env:
GH_TOKEN: ${{ github.token }}

- name: Import specification
run: pnpm import:spec
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@
"sync:contracts": "node scripts/sync-contracts.mjs",
"import:spec": "node scripts/import-spec.mjs",
"check:links": "node scripts/check-links.mjs",
"check:release": "node scripts/check-connect-release.mjs",
"test:deploy:dev": "node --test scripts/deploy-pages-dev.test.mjs",
"test": "pnpm test:deploy:dev && pnpm check && pnpm build && pnpm import:spec && pnpm check:links"
"test": "pnpm test:deploy:dev && pnpm check:release && pnpm check && pnpm build && pnpm import:spec && pnpm check:links"
},
"dependencies": {
"@astrojs/sitemap": "^3.7.3",
Expand Down
75 changes: 75 additions & 0 deletions scripts/check-connect-release.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import assert from "node:assert/strict";
import { execFileSync } from "node:child_process";
import { readFile } from "node:fs/promises";

const release = JSON.parse(await readFile(new URL("../src/data/connect-release.json", import.meta.url)));
const sources = JSON.parse(await readFile(new URL("../site-sources.json", import.meta.url)));

assert.equal(release.tag, `v${release.version}`, "release tag must match version");
assert.equal(release.sdkVersion, release.version, "public SDK and Connect release versions must match");
assert.equal(sources.connect.ref, release.sourceRevision, "published docs must use the released Connect source");
assert.match(release.releaseUrl, new RegExp(`/releases/tag/${release.tag}$`));
assert.match(release.channelManifestUrl, new RegExp(`/releases/download/${release.tag}/mdbase-connect-channel-v1\\.json$`));

const artifacts = [...release.desktop, ...release.cli];
assert.equal(new Set(artifacts.map(({ file }) => file)).size, artifacts.length, "artifact names must be unique");
for (const artifact of artifacts) {
assert.ok(artifact.file.includes(release.version), `${artifact.file} must contain the selected version`);
assert.ok(Number.isSafeInteger(artifact.size) && artifact.size > 0, `${artifact.file} must have a bounded size`);
}
assert.deepEqual(
release.desktop.map(({ platform, detail }) => `${platform}:${detail}`),
[
"macOS:Apple Silicon",
"macOS:Intel",
"Windows:64-bit",
"Linux:64-bit Debian or Ubuntu",
"Linux:64-bit Fedora, RHEL, or compatible"
],
"desktop platform matrix changed without updating the release record"
);

const github = JSON.parse(execFileSync("gh", [
"api",
`repos/mdbase-dev/mdbase-connect/releases?per_page=100`,
"--jq",
`.[] | select(.tag_name == "${release.tag}")`
], { encoding: "utf8" }));
assert.ok(github, "selected GitHub release must exist");
assert.equal(github.draft, false, "selected GitHub release must be published");
const channelAsset = github.assets.find((asset) => asset.name === "mdbase-connect-channel-v1.json");
assert.ok(channelAsset, "selected signed channel manifest must exist");
const channel = JSON.parse(execFileSync("gh", [
"api",
"-H",
"Accept: application/octet-stream",
`repos/mdbase-dev/mdbase-connect/releases/assets/${channelAsset.id}`
], { encoding: "utf8" }));
const sdkResponse = await fetch(`https://registry.npmjs.org/@mdbase-dev%2fconnect/${release.sdkVersion}`, {
headers: { accept: "application/json" }
});
assert.equal(sdkResponse.status, 200, "selected SDK package must exist");
assert.equal(channel.version, release.version, "channel manifest version differs from website");
assert.equal(channel.tag, release.tag, "channel manifest tag differs from website");
assert.equal(channel.release_url, release.releaseUrl, "channel manifest release link differs from website");

const publishedAssets = new Map(github.assets.map((asset) => [asset.name, asset.size]));
for (const artifact of artifacts) {
assert.equal(publishedAssets.get(artifact.file), artifact.size, `${artifact.file} differs from the published release`);
}

const sdk = await sdkResponse.json();
assert.equal(sdk.version, release.sdkVersion, "registry returned a different SDK version");
const tagRef = JSON.parse(execFileSync("gh", [
"api",
`repos/mdbase-dev/mdbase-connect/git/ref/tags/${release.tag}`
], { encoding: "utf8" }));
const tagTarget = tagRef.object.type === "tag"
? JSON.parse(execFileSync("gh", [
"api",
`repos/mdbase-dev/mdbase-connect/git/tags/${tagRef.object.sha}`
], { encoding: "utf8" })).object
: tagRef.object;
assert.equal(tagTarget.type, "commit", "release tag must resolve to a commit");
assert.equal(tagTarget.sha, release.sourceRevision, "released documentation source differs from the tag");
console.log(`Connect release record verified: ${release.version}, ${artifacts.length} artifacts, SDK ${release.sdkVersion}.`);
2 changes: 1 addition & 1 deletion site-sources.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
},
"connect": {
"repository": "mdbase-dev/mdbase-connect",
"ref": "673e9e1ddab2a2a50a7cdb1506fd2a15ac4b61ef"
"ref": "23a52aeeaa4ddb199c28d2cd1cf3d4fe51720188"
},
"contracts": {
"repository": "mdbase-dev/mdbase-contracts",
Expand Down
3 changes: 2 additions & 1 deletion src/components/DocsLayout.astro
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
import BaseLayout from "../layouts/BaseLayout.astro";
import release from "../data/connect-release.json";

interface Props {
title: string;
Expand Down Expand Up @@ -66,7 +67,7 @@ const docGroups = [
</details>
<div class="docs-nav__meta">
<span>@mdbase-dev/connect</span>
<strong>0.1.0-beta.55</strong>
<strong>{release.sdkVersion}</strong>
</div>
</aside>
<article class="docs-article">
Expand Down
24 changes: 24 additions & 0 deletions src/data/connect-release.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"schemaVersion": 1,
"channel": "beta",
"version": "0.1.0-beta.83",
"sdkVersion": "0.1.0-beta.83",
"tag": "v0.1.0-beta.83",
"sourceRevision": "23a52aeeaa4ddb199c28d2cd1cf3d4fe51720188",
"publishedAt": "2026-08-22T07:10:49Z",
"releaseUrl": "https://github.com/mdbase-dev/mdbase-connect/releases/tag/v0.1.0-beta.83",
"channelManifestUrl": "https://github.com/mdbase-dev/mdbase-connect/releases/download/v0.1.0-beta.83/mdbase-connect-channel-v1.json",
"desktop": [
{ "platform": "macOS", "detail": "Apple Silicon", "trust": "Beta preview · not notarized", "file": "mdbase-connect-0.1.0-beta.83-macos-arm64.dmg", "size": 138297866, "label": "Download for Apple Silicon" },
{ "platform": "macOS", "detail": "Intel", "trust": "Beta preview · not notarized", "file": "mdbase-connect-0.1.0-beta.83-macos-x64.dmg", "size": 142932362, "label": "Download for Intel" },
{ "platform": "Windows", "detail": "64-bit", "trust": "Unsigned beta preview", "file": "mdbase-connect-0.1.0-beta.83-windows-x64-UNSIGNED-Setup.exe", "size": 157127168, "label": "Download for Windows" },
{ "platform": "Linux", "detail": "64-bit Debian or Ubuntu", "trust": "DEB package", "file": "mdbase-connect-0.1.0-beta.83-linux-x64.deb", "size": 108358596, "label": "Download DEB" },
{ "platform": "Linux", "detail": "64-bit Fedora, RHEL, or compatible", "trust": "RPM package", "file": "mdbase-connect-0.1.0-beta.83-linux-x64.rpm", "size": 114180081, "label": "Download RPM" }
],
"cli": [
{ "platform": "macOS", "detail": "Apple Silicon", "trust": "Beta preview", "file": "mdbase-cli-0.1.0-beta.83-macos-arm64.tar.gz", "size": 14054317, "label": "Download CLI for Apple Silicon" },
{ "platform": "macOS", "detail": "Intel", "trust": "Beta preview", "file": "mdbase-cli-0.1.0-beta.83-macos-x64.tar.gz", "size": 15227170, "label": "Download CLI for Intel" },
{ "platform": "Windows", "detail": "64-bit", "trust": "Unsigned beta preview", "file": "mdbase-cli-0.1.0-beta.83-windows-x64-UNSIGNED.tar.gz", "size": 13608434, "label": "Download CLI for Windows" },
{ "platform": "Linux", "detail": "64-bit", "trust": "tar.gz", "file": "mdbase-cli-0.1.0-beta.83-linux-x64.tar.gz", "size": 15931643, "label": "Download CLI for Linux" }
]
}
85 changes: 10 additions & 75 deletions src/pages/downloads/index.astro
Original file line number Diff line number Diff line change
@@ -1,79 +1,13 @@
---
import BaseLayout from "../../layouts/BaseLayout.astro";
import release from "../../data/connect-release.json";

const version = "0.1.0-beta.54";
const tag = `v${version}`;
const { version, tag, releaseUrl: releasePage } = release;
const releaseBase = `https://github.com/mdbase-dev/mdbase-connect/releases/download/${tag}`;
const releasePage = `https://github.com/mdbase-dev/mdbase-connect/releases/tag/${tag}`;

const desktopDownloads = [
{
platform: "macOS",
detail: "Apple Silicon",
note: "Beta preview · DMG · 131 MB",
file: `mdbase-connect-${version}-macos-arm64.dmg`,
label: "Download for Apple Silicon"
},
{
platform: "macOS",
detail: "Intel",
note: "Beta preview · DMG · 135 MB",
file: `mdbase-connect-${version}-macos-x64.dmg`,
label: "Download for Intel"
},
{
platform: "Windows",
detail: "64-bit",
note: "Unsigned beta preview · installer · 149 MB",
file: `mdbase-connect-${version}-windows-x64-UNSIGNED-Setup.exe`,
label: "Download for Windows"
},
{
platform: "Linux",
detail: "64-bit Debian or Ubuntu",
note: "DEB package · 103 MB",
file: `mdbase-connect-${version}-linux-x64.deb`,
label: "Download DEB"
},
{
platform: "Linux",
detail: "64-bit Fedora, RHEL, or compatible",
note: "RPM package · 108 MB",
file: `mdbase-connect-${version}-linux-x64.rpm`,
label: "Download RPM"
}
];

const cliDownloads = [
{
platform: "macOS",
detail: "Apple Silicon",
note: "Beta preview · tar.gz · 12 MB",
file: `mdbase-cli-${version}-macos-arm64.tar.gz`,
label: "Download CLI for Apple Silicon"
},
{
platform: "macOS",
detail: "Intel",
note: "Beta preview · tar.gz · 13 MB",
file: `mdbase-cli-${version}-macos-x64.tar.gz`,
label: "Download CLI for Intel"
},
{
platform: "Windows",
detail: "64-bit",
note: "Unsigned beta preview · tar.gz · 12 MB",
file: `mdbase-cli-${version}-windows-x64-UNSIGNED.tar.gz`,
label: "Download CLI for Windows"
},
{
platform: "Linux",
detail: "64-bit",
note: "tar.gz · 14 MB",
file: `mdbase-cli-${version}-linux-x64.tar.gz`,
label: "Download CLI for Linux"
}
];
const desktopDownloads = release.desktop;
const cliDownloads = release.cli;
const published = new Date(release.publishedAt);
const releaseSize = (bytes: number) => `${Math.round(bytes / 1_000_000)} MB`;
---

<BaseLayout
Expand All @@ -95,7 +29,7 @@ const cliDownloads = [
</p>
<div class="download-summary" aria-label="Release details">
<span>Version <strong>{version}</strong></span>
<span>Published <strong><time datetime="2026-08-10">10 August 2026</time></strong></span>
<span>Published <strong><time datetime={release.publishedAt}>{published.toLocaleDateString("en-AU", { day: "numeric", month: "long", year: "numeric", timeZone: "UTC" })}</time></strong></span>
</div>
</div>
</div>
Expand Down Expand Up @@ -124,7 +58,7 @@ const cliDownloads = [
<h3>{download.platform}</h3>
<div class="download-option__detail">
<p>{download.detail}</p>
<code>{download.note}</code>
<code>{download.trust} · {releaseSize(download.size)}</code>
</div>
<div class="download-option__actions">
<a class="button button--primary" href={`${releaseBase}/${download.file}`}>
Expand Down Expand Up @@ -154,7 +88,7 @@ const cliDownloads = [
<h3>{download.platform}</h3>
<div class="download-option__detail">
<p>{download.detail}</p>
<code>{download.note}</code>
<code>{download.trust} · {releaseSize(download.size)}</code>
</div>
<div class="download-option__actions">
<a class="button button--primary" href={`${releaseBase}/${download.file}`}>
Expand All @@ -179,6 +113,7 @@ const cliDownloads = [
</p>
<div class="button-row download-release-actions">
<a class="button button--primary" href={releasePage}>Open release {tag}</a>
<a class="button" href={release.channelManifestUrl}>Signed channel manifest</a>
<a class="button" href="https://github.com/mdbase-dev/mdbase-connect/releases">All releases</a>
</div>
</section>
Expand Down
6 changes: 3 additions & 3 deletions src/pages/sdk/portable-apps/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ const manifest = `{
}`;

const browserBundle = `<script
src="https://cdn.jsdelivr.net/npm/@mdbase-dev/connect@0.1.0-beta.55/dist/browser/mdbase-connect.min.js"
integrity="sha384-6M+exMhOm+JESB8xqgBNPFnykP6bx043yY1RbfIP4UidAlareN3dFvCVZDSd1/aj"
src="https://cdn.jsdelivr.net/npm/@mdbase-dev/connect@0.1.0-beta.78/dist/browser/mdbase-connect.min.js"
integrity="sha384-2NXwGD96iZvxt5iZ6vfV4ZTuoY3PG7RMPOn+wmXEq+K+i06SN/u0vdHtOUb+Mj2p"
crossorigin="anonymous"></script>`;

const application = `<button id="connect">Connect a collection</button>
Expand Down Expand Up @@ -72,7 +72,7 @@ const application = `<button id="connect">Connect a collection</button>
<strong>Available in the production Connect SDK.</strong>
<p>
The production service accepts the portable manifest and device flow.
The version-pinned CDN URL below uses the beta.55 package, matching the
The version-pinned CDN URL below uses the beta.78 package, matching the
production service release.
</p>
</div>
Expand Down