# Define argument for linker flags ARG LDFLAGS=-s -w # Use Bun container for building the React UI FROM oven/bun:1 as ui-builder # Set the working directory for the React UI WORKDIR /app # Copy package.json and bun.lockb (if exists) COPY webui/react-ui/package.json webui/react-ui/bun.lockb* ./ # Install dependencies RUN bun install --frozen-lockfile # Copy the rest of the React UI source code COPY webui/react-ui/ ./ # Build the React UI RUN bun run build # Use a temporary build image based on Golang 1.22-alpine FROM golang:1.22-alpine as builder # Set environment variables: linker flags and disable CGO ENV LDFLAGS=$LDFLAGS CGO_ENABLED=0 # Install git RUN apk add --no-cache git RUN rm -rf /tmp/* /var/cache/apk/* # Set the working directory WORKDIR /work # Copy go.mod and go.sum files first to leverage Docker cache COPY go.mod go.sum ./ # Download dependencies - this layer will be cached as long as go.mod and go.sum don't change RUN go mod download # Now copy the rest of the source code COPY . . # Copy the built React UI from the ui-builder stage COPY --from=ui-builder /app/dist /work/webui/react-ui/dist # Build the application RUN go build -ldflags="$LDFLAGS" -o localagi ./ FROM scratch # Copy the webui binary from the builder stage to the final image COPY --from=builder /work/localagi /localagi COPY --from=builder /etc/ssl/ /etc/ssl/ COPY --from=builder /tmp /tmp # Define the command that will be run when the container is started ENTRYPOINT ["/localagi"]