FROM golang:1.25.6 as builder ARG COMMIT_SHA RUN echo "commit sha: ${COMMIT_SHA}" # Set the working directory WORKDIR $GOPATH/src/github.com/diggerhq/digger # Copy go.mod/go.sum first for better layer caching COPY go.mod go.sum ./ RUN go mod download # Copy all required source, blacklist files that are not required through `.dockerignore` COPY . . # Get the vendor library RUN go version # RUN vgo install # https://github.com/ethereum/go-ethereum/issues/2738 # Build static binary "-getmode=vendor" does not work with go-ethereum RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ go build -ldflags="-X 'main.Version=${COMMIT_SHA}'" -o backend_exe ./backend/ # Build the projects refresh service binary and ship it in the image. # This is required for "project cache local exec" mode, which expects to exec # the refresh service locally within the container. RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ go build -ldflags="-X 'main.Version=${COMMIT_SHA}'" -o /tmp/projects_refesh_main ./background/projects-refresh-service # Multi-stage build will just copy the binary to an alpine image. FROM ubuntu:24.04 as runner ENV ATLAS_VERSION v0.38.0 ARG COMMIT_SHA WORKDIR /app RUN apt-get update && apt-get install -y ca-certificates curl && apt-get install -y git && apt-get clean all RUN update-ca-certificates RUN echo "commit sha: ${COMMIT_SHA}" # install atlas RUN curl -sSf https://atlasgo.sh | sh # Set gin to production #ENV GIN_MODE=release # Expose the running port EXPOSE 3000 # Copy the binary to the corresponding folder COPY --from=builder /go/src/github.com/diggerhq/digger/backend_exe /app/backend COPY --from=builder /tmp/projects_refesh_main /app/projects_refesh_main COPY --from=builder /go/src/github.com/diggerhq/digger/backend/scripts/entrypoint.sh /app/entrypoint.sh COPY --from=builder /go/src/github.com/diggerhq/digger/backend/migrations /app/migrations ADD backend/templates ./templates # Run the binary ENTRYPOINT ["/bin/bash", "/app/entrypoint.sh"]