# Fetch stage
FROM golang:latest AS fetch-stage

COPY . /app

WORKDIR /app

RUN go mod tidy
RUN go mod download

# Generate stage
FROM ghcr.io/a-h/templ:latest AS generate-stage

COPY --chown=65532:65532 . /app

WORKDIR /app

RUN ["templ", "generate"]

# Generate stage two

FROM node:lts-alpine AS tailwind-build-stage

COPY --from=generate-stage /app /app

WORKDIR /app

RUN npm install tailwindcss @tailwindcss/cli && npx @tailwindcss/cli -i ./web/static/css/main.css -o ./web/static/css/tailwind.css --minify -c ./tailwind.config.js


# Build stage
FROM golang:1.24 AS build-stage

COPY --from=tailwind-build-stage /app /app

WORKDIR /app

RUN go mod tidy
RUN go mod download

RUN CGO_ENABLED=0 GOOS=linux go build -o /entrypoint /app/cmd/web/main.go

# Deploy.
FROM gcr.io/distroless/static-debian11 AS release-stage

WORKDIR /

COPY --from=build-stage /entrypoint /entrypoint

COPY --from=build-stage /app/web/static /web/static


EXPOSE 3000

USER nonroot:nonroot

ENTRYPOINT ["/entrypoint"]
