Files
datadunia cbacfea7f2
NexusGuard CI / server-core-test (push) Failing after 3m6s
NexusGuard CI / server-core-build (push) Has been skipped
NexusGuard CI / device-agent-test (push) Failing after 4s
NexusGuard CI / device-agent-cross-build (amd64, linux) (push) Has been skipped
NexusGuard CI / device-agent-cross-build (amd64, windows) (push) Has been skipped
NexusGuard CI / device-agent-cross-build (arm64, linux) (push) Has been skipped
NexusGuard CI / dashboard-test (push) Failing after 4s
NexusGuard CI / dashboard-dist (push) Has been skipped
chore: update submodule refs, clean up plans/evidence, update .gitignore
2026-06-07 23:53:15 +07:00

147 lines
5.1 KiB
Markdown

# Docker Build Fix — Swagger docs.go Not Found
## TL;DR
> **Quick Summary**: The Swagger-generated file `docs/docs.go` is `.gitignore`-d, so Docker build fails with `no required module provides package .../docs`. Fix: add `swag init` step in the Dockerfile builder stage so docs are generated during build before compilation.
>
> **Deliverables**:
> - Dockerfile updated with `swag init` before `go build`
> - Docker build succeeds without error
>
> **Estimated Effort**: Trivial (single-line addition)
> **Parallel Execution**: N/A (single task)
---
## Context
### Original Request
Docker build fails with:
```
main.go:17:2: no required module provides package git.datadunia.com/nexusguard/nexus-server-core/docs
```
Root cause: `apps/server-core/.gitignore` (lines 40-43) ignores `docs/docs.go`, `docs/swagger.json`, `docs/swagger.yaml`. These files were generated locally by `swag init` but are gitignored. When `docker build` runs `COPY . .`, these files are not included, so the Go compilation fails because `main.go` has `_ "git.datadunia.com/nexusguard/nexus-server-core/docs"`.
### Metis Analysis
- Must pin swag CLI version to match `go.mod`: `v1.16.6`
- Must keep `.gitignore` as-is (generated files should not be tracked)
- No other files cause similar issues — audit confirmed
- Build tag approach is unnecessary complexity
---
## Work Objectives
### Core Objective
Make Docker build succeed with Swagger docs generated during build process.
### Must Have
- [x] `apps/server-core/Dockerfile` runs `swag init` before `go build`
- [x] `swag init` uses pinned CLI version matching `go.mod` (`v1.16.6`) ✅
- [x] `docker compose build server-core` passes (verified on remote Docker host) ✅
### Must NOT Have
- Do NOT remove swagger files from `.gitignore`
- Do NOT restructure `main.go` with build tags
- Do NOT modify Makefile or any other files
---
## Execution Strategy
Single task, no waves needed.
---
## TODOs
- [x] 1. Fix Dockerfile — Add `swag init` in builder stage (ALREADY APPLIED — Dockerfile line 7 sudah ada `swag init`)
**What to do**:
- Edit `apps/server-core/Dockerfile`
- Between `COPY . .` and `RUN CGO_ENABLED=0 go build -o /app/server-core .`, add:
```dockerfile
RUN go install github.com/swaggo/swag/cmd/swag@v1.16.6 && swag init -g main.go --parseDependency --parseInternal
```
- This runs `swag` CLI pinned to v1.16.6 (matching `go.mod`), generates `docs/docs.go`, then Go compliation finds the package.
**Final Dockerfile should look like:**
```dockerfile
# Stage 1: Builder
FROM golang:1.25-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go install github.com/swaggo/swag/cmd/swag@v1.16.6 && swag init -g main.go --parseDependency --parseInternal
RUN CGO_ENABLED=0 go build -o /app/server-core .
```
**Recommended Agent Profile**:
- **Category**: `quick`
- **Skills**: `[]`
**Parallelization**: Single task
**References**:
- `apps/server-core/Dockerfile` — Current Dockerfile (multi-stage, golang:1.25-alpine)
- `apps/server-core/.gitignore:40-43` — Lines that gitignore swagger output
- `apps/server-core/main.go:17` — Import of `_ "docs"` package
**Acceptance Criteria**:
- [x] `docker build -f apps/server-core/Dockerfile -t nexusguard-server-core apps/server-core` succeeds (exit 0) ✅
- [x] Swagger route `/swagger/index.html` works when container runs (HTTP 200) ✅
**QA Scenarios**:
```
Scenario: Docker build succeeds with swagger docs generated
Tool: Bash
Preconditions: Docker is installed, at project root
Steps:
1. docker build -f apps/server-core/Dockerfile -t nexusguard-server-core apps/server-core
2. echo "Exit: $?"
Expected Result: Build completes without errors (exit 0)
Failure Indicators: Error about missing docs package
Evidence: .sisyphus/evidence/task-1-docker-build-success.txt
Scenario: Make not installed — fallback works
Tool: Bash
Preconditions: make is NOT installed (simulate with `which make || true`)
Steps:
1. docker compose build server-core
2. docker compose up -d
Expected Result: Services start without requiring `make`
Failure Indicators: `make: command not found` blocks deployment
Evidence: .sisyphus/evidence/task-1-direct-docker-compose.txt
```
---
## Final Verification
- [x] F1. **Verify Dockerfile** ✅ — `swag init` present on line 7 with correct version `v1.16.6`
- [x] F2. **Verify Docker Build** ✅ — `docker build` exit 0, `swag init` generated `docs.go`, `swagger.json`, `swagger.yaml` during build
- [x] F3. **Verify Swagger** ✅ — Container running on port 8080, `curl /swagger/index.html` → HTTP 200, valid Swagger HTML + JSON API spec returned
---
## Commit Strategy
- **1**: `fix(server-core): generate swagger docs in Docker build step`
---
## Success Criteria
```bash
# Fix: Docker build
docker build -f apps/server-core/Dockerfile -t nexusguard-server-core apps/server-core
# Expected: Build successful, exit 0
# Verify no more make dependency
docker compose build server-core && docker compose up -d
# Expected: Services start
```