From b7fe3129e4db13bb1b2d1d7725fae6895525251a Mon Sep 17 00:00:00 2001 From: Nikolay Vitkov Date: Wed, 8 Oct 2025 14:59:07 +0200 Subject: [PATCH 1/2] ci: verify schema is correct --- .github/workflows/pre-release.yml | 27 ++++++++++++++ .github/workflows/publish-to-npm-on-tag.yml | 5 ++- package.json | 3 +- scripts/verify-server-json-version.ts | 41 +++++++++++++++++++++ 4 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/pre-release.yml create mode 100644 scripts/verify-server-json-version.ts diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml new file mode 100644 index 00000000..8bf19142 --- /dev/null +++ b/.github/workflows/pre-release.yml @@ -0,0 +1,27 @@ +name: Pre-release + +permissions: read-all + +on: + push: + branches: + - release-please-* + +jobs: + pre-release: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + fetch-depth: 2 + + - name: Install MCP Publisher + run: | + export TAG=$(curl -sL https://api.github.com/repos/modelcontextprotocol/registry/releases/latest | jq -r ".tag_name") + export VERSION="${TAG#v}" + export OS=$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') + curl -L "https://github.com/modelcontextprotocol/registry/releases/download/${TAG}/mcp-publisher_${VERSION}_${OS}.tar.gz" | tar xz mcp-publisher + + - name: Verify server.json + run: npm run verify-server-json-version diff --git a/.github/workflows/publish-to-npm-on-tag.yml b/.github/workflows/publish-to-npm-on-tag.yml index d50cdd97..1c0fe61d 100644 --- a/.github/workflows/publish-to-npm-on-tag.yml +++ b/.github/workflows/publish-to-npm-on-tag.yml @@ -79,9 +79,10 @@ jobs: - name: Install MCP Publisher run: | - export VERSION="1.2.1" + export TAG=$(curl -sL https://api.github.com/repos/modelcontextprotocol/registry/releases/latest | jq -r ".tag_name") + export VERSION="${TAG#v}" export OS=$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') - curl -L "https://github.com/modelcontextprotocol/registry/releases/download/v${VERSION}/mcp-publisher_${VERSION}_${OS}.tar.gz" | tar xz mcp-publisher + curl -L "https://github.com/modelcontextprotocol/registry/releases/download/${TAG}/mcp-publisher_${VERSION}_${OS}.tar.gz" | tar xz mcp-publisher - name: Login to MCP Registry run: ./mcp-publisher login github-oidc diff --git a/package.json b/package.json index 57feb412..a278db9f 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "test:only": "npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"", "test:only:no-build": "node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"", "test:update-snapshots": "npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"", - "prepare": "node --experimental-strip-types scripts/prepare.ts" + "prepare": "node --experimental-strip-types scripts/prepare.ts", + "verify-server-json-version": "node --experimental-strip-types scripts/verify-server-json-version.ts" }, "files": [ "build/src", diff --git a/scripts/verify-server-json-version.ts b/scripts/verify-server-json-version.ts new file mode 100644 index 00000000..6f5bc669 --- /dev/null +++ b/scripts/verify-server-json-version.ts @@ -0,0 +1,41 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +import {execSync} from 'node:child_process'; +import fs from 'node:fs'; + +const serverJsonFilePath = './server.json'; +const serverJson = JSON.parse(fs.readFileSync(serverJsonFilePath, 'utf-8')); +fs.unlinkSync(serverJsonFilePath); + +// Create the new server.json +execSync('./mcp-publisher init'); + +const newServerJson = JSON.parse(fs.readFileSync(serverJsonFilePath, 'utf-8')); + +const propertyToVerify = ['$schema']; +const diffProps = []; + +for (const prop of propertyToVerify) { + if (serverJson[prop] !== newServerJson[prop]) { + diffProps.push(prop); + } +} + +fs.writeFileSync('./server.json', JSON.stringify(serverJson, null, 2)); + +if (diffProps.length) { + throw new Error( + `The following props did not match the latest init value:\n${diffProps.map( + prop => `- "${prop}": "${newServerJson[prop]}"`, + )}`, + ); +} From fc6472f2559a4a4c2f12aacbb946e44fcb6ea48c Mon Sep 17 00:00:00 2001 From: Nikolay Vitkov Date: Mon, 13 Oct 2025 11:36:13 +0200 Subject: [PATCH 2/2] fix --- scripts/verify-server-json-version.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/scripts/verify-server-json-version.ts b/scripts/verify-server-json-version.ts index 6f5bc669..7ffa6c5f 100644 --- a/scripts/verify-server-json-version.ts +++ b/scripts/verify-server-json-version.ts @@ -4,11 +4,6 @@ * SPDX-License-Identifier: Apache-2.0 */ -/** - * @license - * Copyright 2025 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ import {execSync} from 'node:child_process'; import fs from 'node:fs';