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..7ffa6c5f --- /dev/null +++ b/scripts/verify-server-json-version.ts @@ -0,0 +1,36 @@ +/** + * @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]}"`, + )}`, + ); +}