my fork of the bluesky client
1FROM golang:1.22-bullseye AS build-env
2
3WORKDIR /usr/src/social-app
4
5ENV DEBIAN_FRONTEND=noninteractive
6
7# Node
8ENV NODE_VERSION=20
9ENV NVM_DIR=/usr/share/nvm
10
11# Go
12ENV GODEBUG="netdns=go"
13ENV GOOS="linux"
14ENV GOARCH="amd64"
15ENV CGO_ENABLED=1
16ENV GOEXPERIMENT="loopvar"
17
18# Expo
19ARG EXPO_PUBLIC_BUNDLE_IDENTIFIER
20ENV EXPO_PUBLIC_BUNDLE_IDENTIFIER=${EXPO_PUBLIC_BUNDLE_IDENTIFIER:-dev}
21
22COPY . .
23
24#
25# Generate the JavaScript webpack.
26#
27RUN mkdir --parents $NVM_DIR && \
28 wget \
29 --output-document=/tmp/nvm-install.sh \
30 https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh && \
31 bash /tmp/nvm-install.sh
32
33RUN \. "$NVM_DIR/nvm.sh" && \
34 nvm install $NODE_VERSION && \
35 nvm use $NODE_VERSION && \
36 echo "Using bundle identifier: $EXPO_PUBLIC_BUNDLE_IDENTIFIER" && \
37 echo "EXPO_PUBLIC_BUNDLE_IDENTIFIER=$EXPO_PUBLIC_BUNDLE_IDENTIFIER" >> .env && \
38 echo "EXPO_PUBLIC_BUNDLE_DATE=$(date -u +"%y%m%d%H")" >> .env && \
39 npm install --global yarn && \
40 yarn && \
41 yarn intl:build && \
42 EXPO_PUBLIC_BUNDLE_IDENTIFIER=$EXPO_PUBLIC_BUNDLE_IDENTIFIER EXPO_PUBLIC_BUNDLE_DATE=$() yarn build-web
43
44# DEBUG
45RUN find ./bskyweb/static && find ./web-build/static
46
47#
48# Generate the bskyweb Go binary.
49#
50RUN cd bskyweb/ && \
51 go mod download && \
52 go mod verify
53
54RUN cd bskyweb/ && \
55 go build \
56 -v \
57 -trimpath \
58 -tags timetzdata \
59 -o /bskyweb \
60 ./cmd/bskyweb
61
62FROM debian:bullseye-slim
63
64ENV GODEBUG=netdns=go
65ENV TZ=Etc/UTC
66ENV DEBIAN_FRONTEND=noninteractive
67
68RUN apt-get update && apt-get install --yes \
69 dumb-init \
70 ca-certificates
71
72ENTRYPOINT ["dumb-init", "--"]
73
74WORKDIR /bskyweb
75COPY --from=build-env /bskyweb /usr/bin/bskyweb
76
77CMD ["/usr/bin/bskyweb"]
78
79LABEL org.opencontainers.image.source=https://github.com/bluesky-social/social-app
80LABEL org.opencontainers.image.description="bsky.app Web App"
81LABEL org.opencontainers.image.licenses=MIT
82
83# NOOP