| 1 | # syntax=docker/dockerfile:1 |
| 2 | |
| 3 | FROM golang:1.27.1-bookworm AS build |
| 4 | WORKDIR /src |
| 5 | COPY go.mod go.sum ./ |
| 6 | RUN go mod download |
| 7 | COPY . . |
| 8 | |
| 9 | ARG TEST_PACKAGES=./... |
| 10 | FROM build AS test |
| 11 | RUN go test -mod=readonly -race ${TEST_PACKAGES} |
| 12 | |
| 13 | ARG BENCH_PACKAGES=./internal/storage ./internal/relay |
| 14 | ARG BENCHTIME=5s |
| 15 | FROM build AS bench |
| 16 | ARG BENCH_PACKAGES |
| 17 | ARG BENCHTIME |
| 18 | RUN go test -mod=readonly -run '^$' -bench . -benchmem -benchtime=${BENCHTIME} ${BENCH_PACKAGES} |
| 19 | |
| 20 | FROM build AS binary |
| 21 | RUN CGO_ENABLED=0 go build -mod=readonly -trimpath -ldflags="-s -w" -o /out/tiny ./cmd/tiny |
| 22 | |
| 23 | FROM debian:bookworm-slim AS runtime |
| 24 | RUN apt-get update \ |
| 25 | && apt-get install --no-install-recommends -y ca-certificates git \ |
| 26 | && rm -rf /var/lib/apt/lists/* \ |
| 27 | && useradd --system --create-home --home-dir /home/relay --uid 10001 relay \ |
| 28 | && mkdir -p /data \ |
| 29 | && chown relay:relay /data |
| 30 | COPY --from=binary /out/tiny /usr/local/bin/tiny |
| 31 | COPY LICENSE THIRD_PARTY_NOTICES tinyclient/signer.js.license tinyclient/nostr-name.js.license /usr/share/doc/tiny/ |
| 32 | USER relay |
| 33 | WORKDIR /home/relay |
| 34 | VOLUME ["/data"] |
| 35 | ENV TINY_DATA_DIR=/data |
| 36 | ENTRYPOINT ["/usr/local/bin/tiny"] |
| 37 | CMD ["serve"] |