Bluesky app fork with some witchin' additions 馃挮
witchsky.app
bluesky
fork
client
1FROM golang:1.26-bookworm AS build-env
2
3WORKDIR /usr/src/social-app
4
5ENV DEBIAN_FRONTEND=noninteractive
6
7#
8# Node
9#
10ENV NODE_VERSION=20
11ENV NVM_DIR=/usr/share/nvm
12
13#
14# Go
15#
16ENV GODEBUG="netdns=go"
17ENV GOOS="linux"
18ENV GOARCH="amd64"
19ENV CGO_ENABLED=1
20ENV GOEXPERIMENT="loopvar"
21
22# The latest git hash of the preview branch on render.com
23# https://render.com/docs/docker-secrets#environment-variables-in-docker-builds
24ARG RENDER_GIT_COMMIT
25
26#
27# Expo
28#
29ARG EXPO_PUBLIC_ENV
30ENV EXPO_PUBLIC_ENV=${EXPO_PUBLIC_ENV:-development}
31ARG EXPO_PUBLIC_RELEASE_VERSION
32ENV EXPO_PUBLIC_RELEASE_VERSION=$EXPO_PUBLIC_RELEASE_VERSION
33ARG EXPO_PUBLIC_BUNDLE_IDENTIFIER
34# If not set by GitHub workflows, we're probably in Render
35ENV EXPO_PUBLIC_BUNDLE_IDENTIFIER=${EXPO_PUBLIC_BUNDLE_IDENTIFIER:-$RENDER_GIT_COMMIT}
36
37#
38# Sentry
39#
40ARG SENTRY_AUTH_TOKEN
41ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN:-unknown}
42ARG EXPO_PUBLIC_SENTRY_DSN
43ENV EXPO_PUBLIC_SENTRY_DSN=$EXPO_PUBLIC_SENTRY_DSN
44
45#
46# OAuth
47#
48ARG EXPO_PUBLIC_OAUTH_BASE_URL
49ENV EXPO_PUBLIC_OAUTH_BASE_URL=${EXPO_PUBLIC_OAUTH_BASE_URL:-https://witchsky.app}
50ARG EXPO_PUBLIC_OAUTH_CLIENT_NAME
51ENV EXPO_PUBLIC_OAUTH_CLIENT_NAME=${EXPO_PUBLIC_OAUTH_CLIENT_NAME:-Witchsky}
52
53#
54# Copy everything into the container
55#
56COPY . .
57
58#
59# Generate the JavaScript webpack.
60#
61RUN mkdir --parents $NVM_DIR && \
62 wget \
63 --output-document=/tmp/nvm-install.sh \
64 https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh && \
65 bash /tmp/nvm-install.sh
66
67RUN \. "$NVM_DIR/nvm.sh" && \
68 nvm install $NODE_VERSION && \
69 nvm use $NODE_VERSION && \
70 echo "Using bundle identifier: $EXPO_PUBLIC_BUNDLE_IDENTIFIER" && \
71 echo "EXPO_PUBLIC_ENV=$EXPO_PUBLIC_ENV" >> .env && \
72 echo "EXPO_PUBLIC_RELEASE_VERSION=$EXPO_PUBLIC_RELEASE_VERSION" >> .env && \
73 echo "EXPO_PUBLIC_BUNDLE_IDENTIFIER=$EXPO_PUBLIC_BUNDLE_IDENTIFIER" >> .env && \
74 echo "EXPO_PUBLIC_BUNDLE_DATE=$(date -u +"%y%m%d%H")" >> .env && \
75 echo "EXPO_PUBLIC_SENTRY_DSN=$EXPO_PUBLIC_SENTRY_DSN" >> .env && \
76 echo "EXPO_PUBLIC_OAUTH_BASE_URL=$EXPO_PUBLIC_OAUTH_BASE_URL" >> .env && \
77 echo "EXPO_PUBLIC_OAUTH_CLIENT_NAME=$EXPO_PUBLIC_OAUTH_CLIENT_NAME" >> .env && \
78 npm install --global pnpm@10.33.0 && \
79 pnpm install && \
80 pnpm intl:build 2>&1 | tee i18n.log && \
81 if grep -q "invalid syntax" "i18n.log"; then echo "\n\nFound compilation errors!\n\n" && exit 1; else echo "\n\nNo compile errors!\n\n"; fi && \
82 SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN SENTRY_RELEASE=$EXPO_PUBLIC_RELEASE_VERSION SENTRY_DIST=$EXPO_PUBLIC_BUNDLE_IDENTIFIER pnpm build-web
83
84# DEBUG
85RUN find ./bskyweb/static && find ./web-build/static
86
87#
88# Generate the bskyweb Go binary.
89#
90RUN cd bskyweb/ && \
91 go mod download && \
92 go mod verify
93
94RUN cd bskyweb/ && \
95 go build \
96 -v \
97 -trimpath \
98 -tags timetzdata \
99 -o /bskyweb \
100 ./cmd/bskyweb
101
102FROM debian:bookworm-slim
103
104ENV GODEBUG=netdns=go
105ENV TZ=Etc/UTC
106ENV DEBIAN_FRONTEND=noninteractive
107
108RUN apt-get update && apt-get install --yes \
109 dumb-init \
110 ca-certificates
111
112ENTRYPOINT ["dumb-init", "--"]
113
114WORKDIR /bskyweb
115COPY --from=build-env /bskyweb /usr/bin/bskyweb
116
117CMD ["/usr/bin/bskyweb"]
118
119LABEL org.opencontainers.image.source=https://github.com/bluesky-social/social-app
120LABEL org.opencontainers.image.description="bsky.app Web App"
121LABEL org.opencontainers.image.licenses=MIT
122
123# NOOP