Inicialización del módulo Go y cambio de version de go a la 1.26

This commit is contained in:
Carlos Sandoval
2026-09-02 18:59:01 +00:00
parent 3b75a6c5f4
commit c1a060312f
9 changed files with 542 additions and 14 deletions
@@ -28,7 +28,7 @@ El repositorio está vacío: el proyecto `outline-mcp` se construye desde cero.
### D1: SDK de MCP — `github.com/mark3labs/mcp-go`
- **Elección**: usar `mcp-go` (paquetes `mcp` y `server`) con su `server.NewMCPServer` y transporte `ServeStdio`.
- **Elección**: usar `mcp-go` v1.0.0 (paquetes `mcp` y `server`) con su `server.NewMCPServer` y transporte `ServeStdio`.
- **Alternativa**: implementar el protocolo JSON-RPC manualmente. Se descarta por coste y riesgo; el SDK ya resuelve handshake, esquemas de herramientas y serialización.
- **Nota**: `mcp-go` permite declarar esquemas de entrada tipados (`mcp.WithString(...)`, `mcp.Required()`) que se traducen a JSON Schema para el cliente.
@@ -58,12 +58,12 @@ El repositorio está vacío: el proyecto `outline-mcp` se construye desde cero.
### D6: Pipeline de release
- **Elección**: workflow en `.gitea/workflows/release.yml` con `on: push: tags: ['v*']`, runner `ubuntu-latest`, setup de Go 1.22 (action `actions/setup-go@v5`, compatible con Gitea Actions), bucle de build sobre las 3 plataformas con `CGO_ENABLED=0` y `ldflags` inyectando `main.Version` (desde `github.ref_name`), `main.GiteaURL`, `main.RepoOwner`, `main.RepoName` (desde `github.server_url` y el contexto del repo). Publicación con la acción `akkuman/gitea-release-action` o el CLI `tea release create` como fallback.
- **Elección**: workflow en `.gitea/workflows/release.yml` con `on: push: tags: ['v*']`, runner `ubuntu-latest`, setup de Go 1.26 (action `actions/setup-go@v5`, compatible con Gitea Actions), bucle de build sobre las 3 plataformas con `CGO_ENABLED=0` y `ldflags` inyectando `main.Version` (desde `github.ref_name`), `main.GiteaURL`, `main.RepoOwner`, `main.RepoName` (desde `github.server_url` y el contexto del repo). Publicación con la acción `akkuman/gitea-release-action` o el CLI `tea release create` como fallback.
- **Alternativa**: generar los binarios en Docker dentro del pipeline. Se descarta: el runner de Gitea ya provee el toolchain vía setup-go y es más rápido.
### D7: Devcontainer
- **Elección**: imagen `mcr.microsoft.com/devcontainers/go:1-1.22-bookworm` con:
- **Elección**: imagen `mcr.microsoft.com/devcontainers/go:1-trixie` (Go 1.26) con:
- Features: `ghcr.io/devcontainers/features/golang:1` no es necesaria (la imagen ya incluye Go); se añade la feature `docker-in-docker` opcional no requerida — se omite para minimizar superficie.
- `postCreateCommand`: instalación de `golangci-lint` vía script oficial y `go mod download` si existe `go.mod`.
- Extensiones: `golang.go` (Go oficial, incluye gopls), `eamodio.gitlens`.
@@ -2,12 +2,12 @@
## ADDED Requirements
### Requirement: Contenedor de desarrollo con Go 1.22
El sistema SHALL incluir un devcontainer basado en la imagen oficial `mcr.microsoft.com/devcontainers/go:1-1.22-bookworm` que permita desarrollar el proyecto sin Go instalado localmente.
### Requirement: Contenedor de desarrollo con Go 1.26
El sistema SHALL incluir un devcontainer basado en la imagen oficial `mcr.microsoft.com/devcontainers/go:1-trixie` que permita desarrollar el proyecto sin Go instalado localmente.
#### Scenario: Apertura del proyecto en el contenedor
- **WHEN** el usuario abre el proyecto en DevPod o Dev Containers
- **THEN** el contenedor se construye a partir de la imagen oficial de Go 1.22 y dispone del toolchain necesario para compilar y ejecutar el proyecto
- **THEN** el contenedor se construye a partir de la imagen oficial de Go 1.26 y dispone del toolchain necesario para compilar y ejecutar el proyecto
### Requirement: Tooling del editor preconfigurado
El devcontainer SHALL preconfigurar el soporte de `gopls` (language server de Go) e instalar `golangci-lint`, además de las extensiones básicas de Go para el editor.
@@ -14,11 +14,11 @@ El pipeline de release SHALL ejecutarse cuando se realice push de tags cuyo nomb
- **THEN** el workflow de release no se ejecuta
### Requirement: Entorno de compilación
El pipeline SHALL utilizar una imagen de Ubuntu y SHALL configurar Go 1.22 como versión del toolchain antes de compilar.
El pipeline SHALL utilizar una imagen de Ubuntu y SHALL configurar Go 1.26 como versión del toolchain antes de compilar.
#### Scenario: Job de build
- **WHEN** el pipeline se ejecuta
- **THEN** el entorno de build dispone de Go 1.22 instalado sobre una imagen Ubuntu
- **THEN** el entorno de build dispone de Go 1.26 instalado sobre una imagen Ubuntu
### Requirement: Inyección de variables en la compilación
El pipeline SHALL inyectar en tiempo de compilación las variables `Version`, `GiteaURL`, `RepoOwner` y `RepoName` mediante `-ldflags`, derivadas del tag y del repositorio.
@@ -2,17 +2,17 @@
## 1. Entorno de desarrollo (devcontainer)
- [x] 1.1 Crear `.devcontainer/devcontainer.json` con la imagen `mcr.microsoft.com/devcontainers/go:1-1.22-bookworm`
- [x] 1.1 Crear `.devcontainer/devcontainer.json` con la imagen `mcr.microsoft.com/devcontainers/go:1-trixie`
- [x] 1.2 Configurar extensiones del editor (`golang.go` con gopls) y settings (`go.useLanguageServer: true`)
- [x] 1.3 Añadir `postCreateCommand` que instale `golangci-lint` y ejecute `go mod download` cuando exista `go.mod`
- [x] 1.4 Verificar: Given el proyecto abierto en DevPod/Dev Containers, When el contenedor se construye, Then dispone de Go 1.22, gopls y golangci-lint operativos
## 2. Inicialización del módulo Go
- [ ] 2.1 Ejecutar `go mod init outline-mcp` dentro del contenedor
- [ ] 2.2 Instalar dependencias: `go get github.com/mark3labs/mcp-go/mcp github.com/mark3labs/mcp-go/server`
- [ ] 2.3 Instalar la librería de auto-update: `go get github.com/minio/selfupdate`
- [ ] 2.4 Verificar: Given `go.mod` creado, When se ejecuta `go mod tidy`, Then no hay errores y `go.sum` queda generado
- [x] 2.1 Ejecutar `go mod init outline-mcp` dentro del contenedor
- [x] 2.2 Instalar dependencias: `go get github.com/mark3labs/mcp-go/mcp github.com/mark3labs/mcp-go/server`
- [x] 2.3 Instalar la librería de auto-update: `go get github.com/minio/selfupdate`
- [x] 2.4 Verificar: Given `go.mod` creado, When se ejecuta `go mod tidy`, Then no hay errores y `go.sum` queda generado
## 3. CLI y esqueleto del servidor MCP