mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-27 07:16:19 +09:00
feat: Atomic update mcp image
This commit is contained in:
+5
-3
@@ -10,6 +10,8 @@ ARG COMMIT_HASH=unknown
|
||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH:-amd64} \
|
||||
go build -trimpath -ldflags "-s -w -X github.com/memohai/memoh/internal/version.CommitHash=${COMMIT_HASH}" -o /out/mcp ./cmd/mcp
|
||||
|
||||
FROM busybox:latest
|
||||
COPY --from=build /out/mcp /mcp
|
||||
ENTRYPOINT ["/mcp"]
|
||||
FROM alpine:latest
|
||||
RUN apk add --no-cache grep
|
||||
WORKDIR /app
|
||||
COPY --from=build /out/mcp /app/mcp
|
||||
ENTRYPOINT ["/app/mcp"]
|
||||
|
||||
+22
-3
@@ -2,8 +2,12 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"io"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/memohai/memoh/internal/logger"
|
||||
"github.com/memohai/memoh/internal/mcp"
|
||||
@@ -12,13 +16,28 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
||||
defer stop()
|
||||
|
||||
server := gomcp.NewServer(
|
||||
&gomcp.Implementation{Name: "memoh-mcp", Version: version.GetInfo()},
|
||||
nil,
|
||||
)
|
||||
mcp.RegisterTools(server)
|
||||
if err := server.Run(context.Background(), &gomcp.StdioTransport{}); err != nil {
|
||||
logger.Error("mcp server failed", slog.Any("error", err))
|
||||
os.Exit(1)
|
||||
err := server.Run(ctx, &gomcp.StdioTransport{})
|
||||
if ctx.Err() != nil {
|
||||
return
|
||||
}
|
||||
if err == nil {
|
||||
logger.Warn("mcp server exited without error; waiting for shutdown signal")
|
||||
<-ctx.Done()
|
||||
return
|
||||
}
|
||||
if errors.Is(err, io.EOF) {
|
||||
logger.Warn("mcp stdio closed; waiting for shutdown signal")
|
||||
<-ctx.Done()
|
||||
return
|
||||
}
|
||||
logger.Error("mcp server failed", slog.Any("error", err))
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user