diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3da5efd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +# Build stage +FROM golang:1.22-alpine AS builder + +WORKDIR /app + +# Copy go.mod and go.sum first for caching +COPY go.mod go.sum ./ +RUN go mod download + +# Copy source code +COPY . . + +# Build the binary with static linking +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static" -X main.APP_VERSION=${APP_VERSION:-latest} -X main.COMMIT_ID=${COMMIT_ID:-undefined}' -o gocv . + +# Runtime stage +FROM alpine:latest + +RUN apk --no-cache add ca-certificates tzdata + +WORKDIR /app + +# Copy the binary from builder +COPY --from=builder /app/gocv . + +# Copy config file +COPY config.yaml . + +# Create directories for content and output +RUN mkdir -p /app/content /app/output /app/themes + +# Copy themes +COPY --from=builder /app/themes ./themes + +# Expose default port +EXPOSE 80 + +# Default command runs serve mode +ENTRYPOINT ["./gocv"] +CMD ["serve"] \ No newline at end of file diff --git a/PLAN.md b/PLAN.md index fd7eeab..2b4275d 100644 --- a/PLAN.md +++ b/PLAN.md @@ -15,7 +15,8 @@ - [x] CLI Mode (`gocv`) generates static files to `./output` and exits. - [x] Serve Mode (`gocv serve`) hosts HTML and serves PDF on demand. - [x] File Watcher implemented for live reload in Serve Mode (using fsnotify). -- [x] Dockerfile created for multi-stage build. +- [x] Dockerfile created for multi-stage build (re-created: was missing from repo). +- [x] go.mod dependencies corrected (marked direct deps properly). ## Active Task - [x] Analyze existing backbone code and integrate Markdown parsing. diff --git a/go.mod b/go.mod index bf27ab4..0526fe0 100644 --- a/go.mod +++ b/go.mod @@ -3,13 +3,11 @@ module git.bjphoster.com/source/go-cv go 1.22.2 require ( + github.com/fsnotify/fsnotify v1.9.0 + github.com/go-pdf/fpdf v0.9.0 github.com/gorilla/mux v1.8.1 + github.com/yuin/goldmark v1.7.16 gopkg.in/yaml.v2 v2.4.0 ) -require ( - github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/go-pdf/fpdf v0.9.0 // indirect - github.com/yuin/goldmark v1.7.16 // indirect - golang.org/x/sys v0.13.0 // indirect -) +require golang.org/x/sys v0.13.0 // indirect diff --git a/type_webserver.go b/type_webserver.go index 9128b63..bac5796 100644 --- a/type_webserver.go +++ b/type_webserver.go @@ -29,7 +29,6 @@ func (s *WebServer) Initialize() { } s.AppName = "Go Template Container Web Server" s.Theme = "default" - s.Theme = "default" // Attempt to read the config file (try both config.yml and config.yaml) var configFile []byte