From 386513a5e95e5d80551e2ebffb9233a81405fe79 Mon Sep 17 00:00:00 2001 From: callumalpass Date: Sat, 22 Aug 2026 08:54:58 +1000 Subject: [PATCH 1/3] Use one published Connect release record --- .github/workflows/ci.yml | 2 +- .github/workflows/deploy.yml | 2 +- package.json | 3 +- scripts/check-connect-release.mjs | 75 ++++++++++++++++++++++ site-sources.json | 2 +- src/components/DocsLayout.astro | 3 +- src/data/connect-release.json | 24 +++++++ src/pages/downloads/index.astro | 85 +++---------------------- src/pages/sdk/portable-apps/index.astro | 6 +- 9 files changed, 119 insertions(+), 83 deletions(-) create mode 100644 scripts/check-connect-release.mjs create mode 100644 src/data/connect-release.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f7cd1c..2463828 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,7 +93,7 @@ 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 - name: Build website run: pnpm build diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 66cf7b7..00ea98c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -100,7 +100,7 @@ jobs: MDBASE_TS_DIR: .sources/mdbase - name: Check and build website - run: pnpm check && pnpm build + run: pnpm check:release && pnpm check && pnpm build - name: Import specification run: pnpm import:spec diff --git a/package.json b/package.json index 71d3082..108e4f8 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/scripts/check-connect-release.mjs b/scripts/check-connect-release.mjs new file mode 100644 index 0000000..511a872 --- /dev/null +++ b/scripts/check-connect-release.mjs @@ -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}.`); diff --git a/site-sources.json b/site-sources.json index 9ea8832..e3309e8 100644 --- a/site-sources.json +++ b/site-sources.json @@ -5,7 +5,7 @@ }, "connect": { "repository": "mdbase-dev/mdbase-connect", - "ref": "673e9e1ddab2a2a50a7cdb1506fd2a15ac4b61ef" + "ref": "1207e7c98707c07ea70be341f8b64b2f5bc28b2c" }, "contracts": { "repository": "mdbase-dev/mdbase-contracts", diff --git a/src/components/DocsLayout.astro b/src/components/DocsLayout.astro index b334452..feb99a4 100644 --- a/src/components/DocsLayout.astro +++ b/src/components/DocsLayout.astro @@ -1,5 +1,6 @@ --- import BaseLayout from "../layouts/BaseLayout.astro"; +import release from "../data/connect-release.json"; interface Props { title: string; @@ -66,7 +67,7 @@ const docGroups = [
@mdbase-dev/connect - 0.1.0-beta.55 + {release.sdkVersion}
diff --git a/src/data/connect-release.json b/src/data/connect-release.json new file mode 100644 index 0000000..64df517 --- /dev/null +++ b/src/data/connect-release.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "channel": "beta", + "version": "0.1.0-beta.78", + "sdkVersion": "0.1.0-beta.78", + "tag": "v0.1.0-beta.78", + "sourceRevision": "1207e7c98707c07ea70be341f8b64b2f5bc28b2c", + "publishedAt": "2026-08-19T14:09:22.723Z", + "releaseUrl": "https://github.com/mdbase-dev/mdbase-connect/releases/tag/v0.1.0-beta.78", + "channelManifestUrl": "https://github.com/mdbase-dev/mdbase-connect/releases/download/v0.1.0-beta.78/mdbase-connect-channel-v1.json", + "desktop": [ + { "platform": "macOS", "detail": "Apple Silicon", "trust": "Beta preview · not notarized", "file": "mdbase-connect-0.1.0-beta.78-macos-arm64.dmg", "size": 138293932, "label": "Download for Apple Silicon" }, + { "platform": "macOS", "detail": "Intel", "trust": "Beta preview · not notarized", "file": "mdbase-connect-0.1.0-beta.78-macos-x64.dmg", "size": 142939542, "label": "Download for Intel" }, + { "platform": "Windows", "detail": "64-bit", "trust": "Unsigned beta preview", "file": "mdbase-connect-0.1.0-beta.78-windows-x64-UNSIGNED-Setup.exe", "size": 157109760, "label": "Download for Windows" }, + { "platform": "Linux", "detail": "64-bit Debian or Ubuntu", "trust": "DEB package", "file": "mdbase-connect-0.1.0-beta.78-linux-x64.deb", "size": 108323988, "label": "Download DEB" }, + { "platform": "Linux", "detail": "64-bit Fedora, RHEL, or compatible", "trust": "RPM package", "file": "mdbase-connect-0.1.0-beta.78-linux-x64.rpm", "size": 114157205, "label": "Download RPM" } + ], + "cli": [ + { "platform": "macOS", "detail": "Apple Silicon", "trust": "Beta preview", "file": "mdbase-cli-0.1.0-beta.78-macos-arm64.tar.gz", "size": 14049788, "label": "Download CLI for Apple Silicon" }, + { "platform": "macOS", "detail": "Intel", "trust": "Beta preview", "file": "mdbase-cli-0.1.0-beta.78-macos-x64.tar.gz", "size": 15238726, "label": "Download CLI for Intel" }, + { "platform": "Windows", "detail": "64-bit", "trust": "Unsigned beta preview", "file": "mdbase-cli-0.1.0-beta.78-windows-x64-UNSIGNED.tar.gz", "size": 13599257, "label": "Download CLI for Windows" }, + { "platform": "Linux", "detail": "64-bit", "trust": "tar.gz", "file": "mdbase-cli-0.1.0-beta.78-linux-x64.tar.gz", "size": 15943769, "label": "Download CLI for Linux" } + ] +} diff --git a/src/pages/downloads/index.astro b/src/pages/downloads/index.astro index 4935dd7..c018e83 100644 --- a/src/pages/downloads/index.astro +++ b/src/pages/downloads/index.astro @@ -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`; ---
Version {version} - Published + Published
@@ -124,7 +58,7 @@ const cliDownloads = [

{download.platform}

{download.detail}

- {download.note} + {download.trust} · {releaseSize(download.size)}
@@ -154,7 +88,7 @@ const cliDownloads = [

{download.platform}

{download.detail}

- {download.note} + {download.trust} · {releaseSize(download.size)}
@@ -179,6 +113,7 @@ const cliDownloads = [

diff --git a/src/pages/sdk/portable-apps/index.astro b/src/pages/sdk/portable-apps/index.astro index ab62a03..71a2dfd 100644 --- a/src/pages/sdk/portable-apps/index.astro +++ b/src/pages/sdk/portable-apps/index.astro @@ -15,8 +15,8 @@ const manifest = `{ }`; const browserBundle = ``; const application = ` @@ -72,7 +72,7 @@ const application = ` Available in the production Connect SDK.

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.

From 5bac827c3ccbcf8c96943729cc3c17355d0f2269 Mon Sep 17 00:00:00 2001 From: callumalpass Date: Sat, 22 Aug 2026 09:01:33 +1000 Subject: [PATCH 2/3] Authenticate release checks in CI --- .github/workflows/ci.yml | 2 ++ .github/workflows/deploy.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2463828..eb8ee8a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -94,6 +94,8 @@ jobs: - name: Type and content checks run: pnpm test:deploy:dev && pnpm check:release && pnpm check + env: + GH_TOKEN: ${{ github.token }} - name: Build website run: pnpm build diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 00ea98c..bb486bb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -101,6 +101,8 @@ jobs: - name: Check and build website run: pnpm check:release && pnpm check && pnpm build + env: + GH_TOKEN: ${{ github.token }} - name: Import specification run: pnpm import:spec From 98b2e682662ccd80b84e58ffa1c82930448e804d Mon Sep 17 00:00:00 2001 From: callumalpass Date: Sat, 22 Aug 2026 17:12:08 +1000 Subject: [PATCH 3/3] Pin website to Connect beta.83 --- site-sources.json | 2 +- src/data/connect-release.json | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/site-sources.json b/site-sources.json index e3309e8..05e2ec8 100644 --- a/site-sources.json +++ b/site-sources.json @@ -5,7 +5,7 @@ }, "connect": { "repository": "mdbase-dev/mdbase-connect", - "ref": "1207e7c98707c07ea70be341f8b64b2f5bc28b2c" + "ref": "23a52aeeaa4ddb199c28d2cd1cf3d4fe51720188" }, "contracts": { "repository": "mdbase-dev/mdbase-contracts", diff --git a/src/data/connect-release.json b/src/data/connect-release.json index 64df517..48142f5 100644 --- a/src/data/connect-release.json +++ b/src/data/connect-release.json @@ -1,24 +1,24 @@ { "schemaVersion": 1, "channel": "beta", - "version": "0.1.0-beta.78", - "sdkVersion": "0.1.0-beta.78", - "tag": "v0.1.0-beta.78", - "sourceRevision": "1207e7c98707c07ea70be341f8b64b2f5bc28b2c", - "publishedAt": "2026-08-19T14:09:22.723Z", - "releaseUrl": "https://github.com/mdbase-dev/mdbase-connect/releases/tag/v0.1.0-beta.78", - "channelManifestUrl": "https://github.com/mdbase-dev/mdbase-connect/releases/download/v0.1.0-beta.78/mdbase-connect-channel-v1.json", + "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.78-macos-arm64.dmg", "size": 138293932, "label": "Download for Apple Silicon" }, - { "platform": "macOS", "detail": "Intel", "trust": "Beta preview · not notarized", "file": "mdbase-connect-0.1.0-beta.78-macos-x64.dmg", "size": 142939542, "label": "Download for Intel" }, - { "platform": "Windows", "detail": "64-bit", "trust": "Unsigned beta preview", "file": "mdbase-connect-0.1.0-beta.78-windows-x64-UNSIGNED-Setup.exe", "size": 157109760, "label": "Download for Windows" }, - { "platform": "Linux", "detail": "64-bit Debian or Ubuntu", "trust": "DEB package", "file": "mdbase-connect-0.1.0-beta.78-linux-x64.deb", "size": 108323988, "label": "Download DEB" }, - { "platform": "Linux", "detail": "64-bit Fedora, RHEL, or compatible", "trust": "RPM package", "file": "mdbase-connect-0.1.0-beta.78-linux-x64.rpm", "size": 114157205, "label": "Download RPM" } + { "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.78-macos-arm64.tar.gz", "size": 14049788, "label": "Download CLI for Apple Silicon" }, - { "platform": "macOS", "detail": "Intel", "trust": "Beta preview", "file": "mdbase-cli-0.1.0-beta.78-macos-x64.tar.gz", "size": 15238726, "label": "Download CLI for Intel" }, - { "platform": "Windows", "detail": "64-bit", "trust": "Unsigned beta preview", "file": "mdbase-cli-0.1.0-beta.78-windows-x64-UNSIGNED.tar.gz", "size": 13599257, "label": "Download CLI for Windows" }, - { "platform": "Linux", "detail": "64-bit", "trust": "tar.gz", "file": "mdbase-cli-0.1.0-beta.78-linux-x64.tar.gz", "size": 15943769, "label": "Download CLI for Linux" } + { "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" } ] }