diff --git a/Dockerfile.runner b/Dockerfile.runner new file mode 100644 index 0000000..306b1fd --- /dev/null +++ b/Dockerfile.runner @@ -0,0 +1,26 @@ +FROM node:18-slim + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + git \ + curl \ + unzip \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Install Bun globally +RUN curl -fsSL https://bun.sh/install | bash && \ + ln -s /root/.bun/bin/bun /usr/local/bin/bun + +# Pre-install Claude Code and dependencies +WORKDIR /opt/claude-action +COPY package.json bun.lockb* ./ +RUN bun install --frozen-lockfile + +# Install claude-code globally +RUN bun add -g @anthropic-ai/claude-code@1.0.62 + +# Set up environment +ENV PATH="/root/.bun/bin:${PATH}" + +WORKDIR /workspace \ No newline at end of file diff --git a/action.yml b/action.yml index e8c8e78..8b215cb 100644 --- a/action.yml +++ b/action.yml @@ -84,6 +84,7 @@ runs: uses: oven-sh/setup-bun@735343b667d3e6f658f44d0eca948eb6282f2b76 # https://github.com/oven-sh/setup-bun/releases/tag/v2.0.2 with: bun-version: 1.2.11 + cache: false - name: Install Dependencies shell: bash diff --git a/src/mcp/gitea-mcp-server.ts b/src/mcp/gitea-mcp-server.ts index a9d4042..bcc2f8c 100644 --- a/src/mcp/gitea-mcp-server.ts +++ b/src/mcp/gitea-mcp-server.ts @@ -1267,21 +1267,38 @@ async function runServer() { console.log(`[GITEA-MCP] Connecting to transport...`); await server.connect(transport); console.log(`[GITEA-MCP] Gitea MCP server connected and ready!`); + + // Handle server shutdown + const shutdown = async () => { + console.log(`[GITEA-MCP ${new Date().toISOString()}] Shutting down server...`); + try { + await server.close(); + transport.close(); + } catch (error) { + console.error(`[GITEA-MCP] Error during shutdown:`, error); + } + process.exit(0); + }; + process.on("exit", () => { - console.log(`[GITEA-MCP ${new Date().toISOString()}] Server shutting down...`); - server.close(); + console.log(`[GITEA-MCP ${new Date().toISOString()}] Server exiting...`); }); - // Add more signal handlers for debugging - process.on("SIGTERM", () => { - console.log(`[GITEA-MCP ${new Date().toISOString()}] Received SIGTERM signal`); - process.exit(0); + process.on("SIGTERM", shutdown); + process.on("SIGINT", shutdown); + process.on("SIGHUP", shutdown); + + // Also listen for stdin close (EOF) + process.stdin.on("end", () => { + console.log(`[GITEA-MCP ${new Date().toISOString()}] Stdin closed, shutting down...`); + shutdown(); }); - process.on("SIGINT", () => { - console.log(`[GITEA-MCP ${new Date().toISOString()}] Received SIGINT signal`); - process.exit(0); - }); + // Add timeout safety net (5 minutes) + setTimeout(() => { + console.log(`[GITEA-MCP ${new Date().toISOString()}] Timeout reached, forcing shutdown...`); + shutdown(); + }, 5 * 60 * 1000); } console.log(`[GITEA-MCP] Calling runServer()...`); diff --git a/src/mcp/local-git-ops-server.ts b/src/mcp/local-git-ops-server.ts index bc5a5d4..ab3c825 100644 --- a/src/mcp/local-git-ops-server.ts +++ b/src/mcp/local-git-ops-server.ts @@ -496,21 +496,38 @@ async function runServer() { console.log(`[LOCAL-GIT-MCP] Connecting to transport...`); await server.connect(transport); console.log(`[LOCAL-GIT-MCP] MCP server connected and ready!`); + + // Handle server shutdown + const shutdown = async () => { + console.log(`[LOCAL-GIT-MCP ${new Date().toISOString()}] Shutting down server...`); + try { + await server.close(); + transport.close(); + } catch (error) { + console.error(`[LOCAL-GIT-MCP] Error during shutdown:`, error); + } + process.exit(0); + }; + process.on("exit", () => { - console.log(`[LOCAL-GIT-MCP ${new Date().toISOString()}] Server shutting down...`); - server.close(); + console.log(`[LOCAL-GIT-MCP ${new Date().toISOString()}] Server exiting...`); }); - // Add more signal handlers for debugging - process.on("SIGTERM", () => { - console.log(`[LOCAL-GIT-MCP ${new Date().toISOString()}] Received SIGTERM signal`); - process.exit(0); + process.on("SIGTERM", shutdown); + process.on("SIGINT", shutdown); + process.on("SIGHUP", shutdown); + + // Also listen for stdin close (EOF) + process.stdin.on("end", () => { + console.log(`[LOCAL-GIT-MCP ${new Date().toISOString()}] Stdin closed, shutting down...`); + shutdown(); }); - process.on("SIGINT", () => { - console.log(`[LOCAL-GIT-MCP ${new Date().toISOString()}] Received SIGINT signal`); - process.exit(0); - }); + // Add timeout safety net (5 minutes) + setTimeout(() => { + console.log(`[LOCAL-GIT-MCP ${new Date().toISOString()}] Timeout reached, forcing shutdown...`); + shutdown(); + }, 5 * 60 * 1000); } console.log(`[LOCAL-GIT-MCP] Calling runServer()...`);