diff --git a/.gitignore b/.gitignore index 3ccf74b..ba9b7f8 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,8 @@ .npmrc kubernetes-mcp-server -kubernetes-mcp-server/README.md +npm/kubernetes-mcp-server/README.md +!npm/kubernetes-mcp-server kubernetes-mcp-server-darwin-amd64 !npm/kubernetes-mcp-server-darwin-amd64/ kubernetes-mcp-server-darwin-arm64 diff --git a/Makefile b/Makefile index 5b18da6..13137ff 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ CLEAN_TARGETS := CLEAN_TARGETS += '$(BINARY_NAME)' CLEAN_TARGETS += $(foreach os,$(OSES),$(foreach arch,$(ARCHS),$(BINARY_NAME)-$(os)-$(arch)$(if $(findstring windows,$(os)),.exe,))) CLEAN_TARGETS += $(foreach os,$(OSES),$(foreach arch,$(ARCHS),./npm/$(BINARY_NAME)-$(os)-$(arch)/bin/)) -CLEAN_TARGETS += ./npm/.npmrc ./npm/bin ./npm/README.md +CLEAN_TARGETS += ./npm/kubernetes-mcp-server/.npmrc ./npm/kubernetes-mcp-server/README.md CLEAN_TARGETS += $(foreach os,$(OSES),$(foreach arch,$(ARCHS),./npm/$(BINARY_NAME)-$(os)-$(arch)/.npmrc)) # The help will print out all targets with their descriptions organized bellow their categories. The categories are represented by `##@` and the target descriptions by `##`. @@ -58,7 +58,7 @@ build-all-platforms: clean tidy format ## Build the project for all platforms )) .PHONY: npm -npm: build-all-platforms ## Create the npm packages +npm: build-all-platforms ## Create the npm packages for each platform $(foreach os,$(OSES),$(foreach arch,$(ARCHS), \ EXECUTABLE=./$(BINARY_NAME)-$(os)-$(arch)$(if $(findstring windows,$(os)),.exe,); \ DIRNAME=$(BINARY_NAME)-$(os)-$(arch); \ @@ -76,13 +76,11 @@ npm-publish: npm ## Publish the npm packages npm publish; \ cd ../..; \ )) - cp README.md ./npm/README.md - mkdir -p ./npm/bin - cp ./npm/index.js ./npm/bin/cli - echo '//registry.npmjs.org/:_authToken=$(NPM_TOKEN)' >> ./npm/.npmrc - jq '.version = "$(NPM_VERSION)"' ./npm/package.json > tmp.json && mv tmp.json ./npm/package.json; \ - jq '.optionalDependencies |= with_entries(.value = "$(NPM_VERSION)")' ./npm/package.json > tmp.json && mv tmp.json ./npm/package.json; \ - cd npm && npm publish + cp README.md ./npm/kubernetes-mcp-server/README.md + echo '//registry.npmjs.org/:_authToken=$(NPM_TOKEN)' >> ./npm/kubernetes-mcp-server/.npmrc + jq '.version = "$(NPM_VERSION)"' ./npm/kubernetes-mcp-server/package.json > tmp.json && mv tmp.json ./npm/kubernetes-mcp-server/package.json; \ + jq '.optionalDependencies |= with_entries(.value = "$(NPM_VERSION)")' ./npm/kubernetes-mcp-server/package.json > tmp.json && mv tmp.json ./npm/kubernetes-mcp-server/package.json; \ + cd npm/kubernetes-mcp-server && npm publish .PHONY: test test: ## Run the tests diff --git a/npm/index.js b/npm/index.js deleted file mode 100755 index b920de1..0000000 --- a/npm/index.js +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env node - -const childProcess = require("child_process"); - -const BINARY_MAP = { - darwin_x86: {name: "kubernetes-mcp-server-darwin-amd64", suffix: ''}, - darwin_arm64: {name: "kubernetes-mcp-server-darwin-arm64", suffix: ''}, - linux_x86: {name: "kubernetes-mcp-server-linux-amd64", suffix: ''}, - linux_arm64: {name: "kubernetes-mcp-server-linux-arm64", suffix: ''}, - win32_x86: {name: "kubernetes-mcp-server-windows-amd64", suffix: '.exe'}, - win32_arm64: {name: "kubernetes-mcp-server-windows-arm64", suffix: '.exe'}, -}; - -const binary = BINARY_MAP[`${process.platform}_${process.arch}`]; - -module.exports.runBinary = function (...args) { - // Resolving will fail if the optionalDependency was not installed - childProcess.execFileSync(require.resolve(`${binary.name}/bin/${binary.name}+${binary.suffix}`), args, { - stdio: "inherit", - }); -}; diff --git a/npm/kubernetes-mcp-server/bin/index.js b/npm/kubernetes-mcp-server/bin/index.js new file mode 100755 index 0000000..4451b92 --- /dev/null +++ b/npm/kubernetes-mcp-server/bin/index.js @@ -0,0 +1,29 @@ +#!/usr/bin/env node + +const path = require('path') +const childProcess = require('child_process'); + +const BINARY_MAP = { + darwin_x64: {name: 'kubernetes-mcp-server-darwin-amd64', suffix: ''}, + darwin_arm64: {name: 'kubernetes-mcp-server-darwin-arm64', suffix: ''}, + linux_x64: {name: 'kubernetes-mcp-server-linux-amd64', suffix: ''}, + linux_arm64: {name: 'kubernetes-mcp-server-linux-arm64', suffix: ''}, + win32_x64: {name: 'kubernetes-mcp-server-windows-amd64', suffix: '.exe'}, + win32_arm64: {name: 'kubernetes-mcp-server-windows-arm64', suffix: '.exe'}, +}; + +const binary = BINARY_MAP[`${process.platform}_${process.arch}`]; + +const resolveBinaryPath = () => { + try { + // Resolving will fail if the optionalDependency was not installed + return require.resolve(`${binary.name}/bin/${binary.name}${binary.suffix}`) + } catch (e) { + return path.join(__dirname, '..', `${binary.name}${binary.suffix}`) + } +}; + +childProcess.execFileSync(resolveBinaryPath(), process.argv.slice(2), { + stdio: 'inherit', +}); + diff --git a/npm/package-lock.json b/npm/kubernetes-mcp-server/package-lock.json similarity index 100% rename from npm/package-lock.json rename to npm/kubernetes-mcp-server/package-lock.json diff --git a/npm/package.json b/npm/kubernetes-mcp-server/package.json similarity index 93% rename from npm/package.json rename to npm/kubernetes-mcp-server/package.json index 35173bb..bc5984f 100644 --- a/npm/package.json +++ b/npm/kubernetes-mcp-server/package.json @@ -2,9 +2,9 @@ "name": "kubernetes-mcp-server", "version": "0.0.0", "description": "Model Context Protocol (MCP) server for Kubernetes and OpenShift", - "main": "./index.js", + "main": "./bin/index.js", "bin": { - "kubernetes-mcp-server": "bin/cli" + "kubernetes-mcp-server": "bin/index.js" }, "optionalDependencies": { "kubernetes-mcp-server-darwin-amd64": "0.0.0",