Fix linting errors in publisher CLI tool
Co-authored-by: toby <83556+toby@users.noreply.github.com>
This commit is contained in:
parent
e10d3f2b62
commit
68b55735cb
1 changed files with 36 additions and 28 deletions
|
|
@ -77,18 +77,18 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func printUsage() {
|
func printUsage() {
|
||||||
fmt.Println("MCP Registry Publisher Tool")
|
log.Println("MCP Registry Publisher Tool")
|
||||||
fmt.Println()
|
log.Println()
|
||||||
fmt.Println("Usage:")
|
log.Println("Usage:")
|
||||||
fmt.Println(" mcp-publisher publish [flags] Publish a server.json file to the registry")
|
log.Println(" mcp-publisher publish [flags] Publish a server.json file to the registry")
|
||||||
fmt.Println(" mcp-publisher create [flags] Create a new server.json file")
|
log.Println(" mcp-publisher create [flags] Create a new server.json file")
|
||||||
fmt.Println()
|
log.Println()
|
||||||
fmt.Println("Use 'mcp-publisher <command> --help' for more information about a command.")
|
log.Println("Use 'mcp-publisher <command> --help' for more information about a command.")
|
||||||
}
|
}
|
||||||
|
|
||||||
func publishCommand() {
|
func publishCommand() {
|
||||||
publishFlags := flag.NewFlagSet("publish", flag.ExitOnError)
|
publishFlags := flag.NewFlagSet("publish", flag.ExitOnError)
|
||||||
|
|
||||||
var registryURL string
|
var registryURL string
|
||||||
var mcpFilePath string
|
var mcpFilePath string
|
||||||
var forceLogin bool
|
var forceLogin bool
|
||||||
|
|
@ -100,7 +100,9 @@ func publishCommand() {
|
||||||
publishFlags.BoolVar(&forceLogin, "login", false, "force a new login even if a token exists")
|
publishFlags.BoolVar(&forceLogin, "login", false, "force a new login even if a token exists")
|
||||||
publishFlags.StringVar(&authMethod, "auth-method", "github-oauth", "authentication method to use (default: github-oauth)")
|
publishFlags.StringVar(&authMethod, "auth-method", "github-oauth", "authentication method to use (default: github-oauth)")
|
||||||
|
|
||||||
publishFlags.Parse(os.Args[2:])
|
if err := publishFlags.Parse(os.Args[2:]); err != nil {
|
||||||
|
log.Fatalf("Error parsing flags: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
if registryURL == "" || mcpFilePath == "" {
|
if registryURL == "" || mcpFilePath == "" {
|
||||||
publishFlags.Usage()
|
publishFlags.Usage()
|
||||||
|
|
@ -153,7 +155,7 @@ func publishCommand() {
|
||||||
|
|
||||||
func createCommand() {
|
func createCommand() {
|
||||||
createFlags := flag.NewFlagSet("create", flag.ExitOnError)
|
createFlags := flag.NewFlagSet("create", flag.ExitOnError)
|
||||||
|
|
||||||
// Basic server information flags
|
// Basic server information flags
|
||||||
var name string
|
var name string
|
||||||
var description string
|
var description string
|
||||||
|
|
@ -161,14 +163,14 @@ func createCommand() {
|
||||||
var repoURL string
|
var repoURL string
|
||||||
var repoSource string
|
var repoSource string
|
||||||
var output string
|
var output string
|
||||||
|
|
||||||
// Package information flags
|
// Package information flags
|
||||||
var registryName string
|
var registryName string
|
||||||
var packageName string
|
var packageName string
|
||||||
var packageVersion string
|
var packageVersion string
|
||||||
var runtimeHint string
|
var runtimeHint string
|
||||||
var execute string
|
var execute string
|
||||||
|
|
||||||
// Repeatable flags
|
// Repeatable flags
|
||||||
var envVars []string
|
var envVars []string
|
||||||
var packageArgs []string
|
var packageArgs []string
|
||||||
|
|
@ -183,27 +185,29 @@ func createCommand() {
|
||||||
createFlags.StringVar(&repoSource, "repo-source", "github", "Repository source")
|
createFlags.StringVar(&repoSource, "repo-source", "github", "Repository source")
|
||||||
createFlags.StringVar(&output, "output", "server.json", "Output file path")
|
createFlags.StringVar(&output, "output", "server.json", "Output file path")
|
||||||
createFlags.StringVar(&output, "o", "server.json", "Output file path (shorthand)")
|
createFlags.StringVar(&output, "o", "server.json", "Output file path (shorthand)")
|
||||||
|
|
||||||
createFlags.StringVar(®istryName, "registry", "npm", "Package registry name")
|
createFlags.StringVar(®istryName, "registry", "npm", "Package registry name")
|
||||||
createFlags.StringVar(&packageName, "package-name", "", "Package name (defaults to server name)")
|
createFlags.StringVar(&packageName, "package-name", "", "Package name (defaults to server name)")
|
||||||
createFlags.StringVar(&packageVersion, "package-version", "", "Package version (defaults to server version)")
|
createFlags.StringVar(&packageVersion, "package-version", "", "Package version (defaults to server version)")
|
||||||
createFlags.StringVar(&runtimeHint, "runtime-hint", "", "Runtime hint (e.g., docker)")
|
createFlags.StringVar(&runtimeHint, "runtime-hint", "", "Runtime hint (e.g., docker)")
|
||||||
createFlags.StringVar(&execute, "execute", "", "Command to execute the server")
|
createFlags.StringVar(&execute, "execute", "", "Command to execute the server")
|
||||||
createFlags.StringVar(&execute, "e", "", "Command to execute the server (shorthand)")
|
createFlags.StringVar(&execute, "e", "", "Command to execute the server (shorthand)")
|
||||||
|
|
||||||
// Custom flag for environment variables
|
// Custom flag for environment variables
|
||||||
createFlags.Func("env-var", "Environment variable in format NAME:DESCRIPTION (can be repeated)", func(value string) error {
|
createFlags.Func("env-var", "Environment variable in format NAME:DESCRIPTION (can be repeated)", func(value string) error {
|
||||||
envVars = append(envVars, value)
|
envVars = append(envVars, value)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
// Custom flag for package arguments
|
// Custom flag for package arguments
|
||||||
createFlags.Func("package-arg", "Package argument in format VALUE:DESCRIPTION (can be repeated)", func(value string) error {
|
createFlags.Func("package-arg", "Package argument in format VALUE:DESCRIPTION (can be repeated)", func(value string) error {
|
||||||
packageArgs = append(packageArgs, value)
|
packageArgs = append(packageArgs, value)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
createFlags.Parse(os.Args[2:])
|
if err := createFlags.Parse(os.Args[2:]); err != nil {
|
||||||
|
log.Fatalf("Error parsing flags: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Validate required flags
|
// Validate required flags
|
||||||
if name == "" {
|
if name == "" {
|
||||||
|
|
@ -225,7 +229,8 @@ func createCommand() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create server structure
|
// Create server structure
|
||||||
server := createServerStructure(name, description, version, repoURL, repoSource, registryName, packageName, packageVersion, runtimeHint, execute, envVars, packageArgs)
|
server := createServerStructure(name, description, version, repoURL, repoSource,
|
||||||
|
registryName, packageName, packageVersion, runtimeHint, execute, envVars, packageArgs)
|
||||||
|
|
||||||
// Convert to JSON
|
// Convert to JSON
|
||||||
jsonData, err := json.MarshalIndent(server, "", " ")
|
jsonData, err := json.MarshalIndent(server, "", " ")
|
||||||
|
|
@ -234,7 +239,7 @@ func createCommand() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write to file
|
// Write to file
|
||||||
err = os.WriteFile(output, jsonData, 0644)
|
err = os.WriteFile(output, jsonData, 0600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error writing file: %v", err)
|
log.Fatalf("Error writing file: %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -300,7 +305,8 @@ func publishToRegistry(registryURL string, mcpData []byte, token string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createServerStructure(name, description, version, repoURL, repoSource, registryName, packageName, packageVersion, runtimeHint, execute string, envVars []string, packageArgs []string) ServerJSON {
|
func createServerStructure(name, description, version, repoURL, repoSource, registryName,
|
||||||
|
packageName, packageVersion, runtimeHint, execute string, envVars []string, packageArgs []string) ServerJSON {
|
||||||
// Parse environment variables
|
// Parse environment variables
|
||||||
var environmentVariables []EnvironmentVariable
|
var environmentVariables []EnvironmentVariable
|
||||||
for _, envVar := range envVars {
|
for _, envVar := range envVars {
|
||||||
|
|
@ -328,7 +334,7 @@ func createServerStructure(name, description, version, repoURL, repoSource, regi
|
||||||
if len(parts) == 2 {
|
if len(parts) == 2 {
|
||||||
description = parts[1]
|
description = parts[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
packageArguments = append(packageArguments, RuntimeArgument{
|
packageArguments = append(packageArguments, RuntimeArgument{
|
||||||
Description: description,
|
Description: description,
|
||||||
IsRequired: true, // Package arguments are typically required
|
IsRequired: true, // Package arguments are typically required
|
||||||
|
|
@ -349,15 +355,16 @@ func createServerStructure(name, description, version, repoURL, repoSource, regi
|
||||||
// Skip the first part (command) and add each argument as a runtime argument
|
// Skip the first part (command) and add each argument as a runtime argument
|
||||||
for i, arg := range parts[1:] {
|
for i, arg := range parts[1:] {
|
||||||
description := fmt.Sprintf("Runtime argument %d", i+1)
|
description := fmt.Sprintf("Runtime argument %d", i+1)
|
||||||
|
|
||||||
// Try to provide better descriptions based on common patterns
|
// Try to provide better descriptions based on common patterns
|
||||||
if strings.HasPrefix(arg, "--") {
|
switch {
|
||||||
|
case strings.HasPrefix(arg, "--"):
|
||||||
description = fmt.Sprintf("Command line flag: %s", arg)
|
description = fmt.Sprintf("Command line flag: %s", arg)
|
||||||
} else if strings.HasPrefix(arg, "-") && len(arg) == 2 {
|
case strings.HasPrefix(arg, "-") && len(arg) == 2:
|
||||||
description = fmt.Sprintf("Command line option: %s", arg)
|
description = fmt.Sprintf("Command line option: %s", arg)
|
||||||
} else if strings.Contains(arg, "=") {
|
case strings.Contains(arg, "="):
|
||||||
description = fmt.Sprintf("Configuration parameter: %s", arg)
|
description = fmt.Sprintf("Configuration parameter: %s", arg)
|
||||||
} else if i > 0 && strings.HasPrefix(parts[i], "-") {
|
case i > 0 && strings.HasPrefix(parts[i], "-"):
|
||||||
description = fmt.Sprintf("Value for %s", parts[i])
|
description = fmt.Sprintf("Value for %s", parts[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -410,13 +417,14 @@ func smartSplit(command string) []string {
|
||||||
for _, char := range command {
|
for _, char := range command {
|
||||||
switch {
|
switch {
|
||||||
case char == '"' || char == '\'':
|
case char == '"' || char == '\'':
|
||||||
if !inQuotes {
|
switch {
|
||||||
|
case !inQuotes:
|
||||||
inQuotes = true
|
inQuotes = true
|
||||||
quoteChar = char
|
quoteChar = char
|
||||||
} else if char == quoteChar {
|
case char == quoteChar:
|
||||||
inQuotes = false
|
inQuotes = false
|
||||||
quoteChar = 0
|
quoteChar = 0
|
||||||
} else {
|
default:
|
||||||
current.WriteRune(char)
|
current.WriteRune(char)
|
||||||
}
|
}
|
||||||
case char == ' ' && !inQuotes:
|
case char == ' ' && !inQuotes:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue