Something went wrong. Try again.
Bluesky app fork with some witchin' additions 💫 witchsky.app
bluesky fork client
Something went wrong. Try again.
witchsky.app Dockerfile
3.8 kB · 135 lines
Dockerfile
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136## Stage 1: build the web bundle with pnpm.## Uses the official pnpm image. Node is auto-downloaded by pnpm using the# `devEngines.runtime` field in package.json (onFail: "download").#FROM ghcr.io/pnpm/pnpm:11 AS web-build
WORKDIR /app
ENV DEBIAN_FRONTEND=noninteractive
## pnpm config#ENV CI=1# use the pnpm version specified in package.jsonENV pnpm_config_pm_on_fail=download
# Metro's web export needs far more heap than Node's default (~1GB in the# container), which crashes the bundle step with a V8 OOM.ENV NODE_OPTIONS="--max-old-space-size=8192"
# The latest git hash of the preview branch on render.com# https://render.com/docs/docker-secrets#environment-variables-in-docker-buildsARG RENDER_GIT_COMMIT
## Expo#ARG EXPO_PUBLIC_ENVENV EXPO_PUBLIC_ENV=${EXPO_PUBLIC_ENV:-development}ARG EXPO_PUBLIC_RELEASE_VERSIONENV EXPO_PUBLIC_RELEASE_VERSION=$EXPO_PUBLIC_RELEASE_VERSIONARG EXPO_PUBLIC_BUNDLE_IDENTIFIER# If not set by GitHub workflows, we're probably in RenderENV EXPO_PUBLIC_BUNDLE_IDENTIFIER=${EXPO_PUBLIC_BUNDLE_IDENTIFIER:-$RENDER_GIT_COMMIT}
## Sentry#ARG SENTRY_AUTH_TOKENENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN:-unknown}ARG EXPO_PUBLIC_SENTRY_DSNENV EXPO_PUBLIC_SENTRY_DSN=$EXPO_PUBLIC_SENTRY_DSN
## OAuth#ARG EXPO_PUBLIC_OAUTH_BASE_URLENV EXPO_PUBLIC_OAUTH_BASE_URL=${EXPO_PUBLIC_OAUTH_BASE_URL:-https://witchsky.app}ARG EXPO_PUBLIC_OAUTH_CLIENT_NAMEENV EXPO_PUBLIC_OAUTH_CLIENT_NAME=${EXPO_PUBLIC_OAUTH_CLIENT_NAME:-Witchsky}
COPY . .
RUN echo "Using bundle identifier: $EXPO_PUBLIC_BUNDLE_IDENTIFIER" && \ echo "EXPO_PUBLIC_ENV=$EXPO_PUBLIC_ENV" >> .env && \ echo "EXPO_PUBLIC_RELEASE_VERSION=$EXPO_PUBLIC_RELEASE_VERSION" >> .env && \ echo "EXPO_PUBLIC_BUNDLE_IDENTIFIER=$EXPO_PUBLIC_BUNDLE_IDENTIFIER" >> .env && \ echo "EXPO_PUBLIC_BUNDLE_DATE=$(date -u +"%y%m%d%H")" >> .env && \ echo "EXPO_PUBLIC_SENTRY_DSN=$EXPO_PUBLIC_SENTRY_DSN" >> .env && \ echo "EXPO_PUBLIC_OAUTH_BASE_URL=$EXPO_PUBLIC_OAUTH_BASE_URL" >> .env && \ echo "EXPO_PUBLIC_OAUTH_CLIENT_NAME=$EXPO_PUBLIC_OAUTH_CLIENT_NAME" >> .env
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
RUN pnpm intl:build 2>&1 | tee i18n.log && \ 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
RUN SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN \ SENTRY_RELEASE="xyz.blueskyweb.app@${EXPO_PUBLIC_RELEASE_VERSION:-unset}" \ SENTRY_DIST=$EXPO_PUBLIC_BUNDLE_IDENTIFIER \ pnpm build-web
## Stage 2: build the bskyweb Go binary, embedding the assets from stage 1.## post-web-build.js (run by `pnpm build-web`) writes the bundled JS/CSS/media# into bskyweb/static/* and regenerates bskyweb/templates/scripts.html, so# copying the bskyweb/ tree from stage 1 is enough for go:embed to find# everything.#FROM golang:1.26.10-bookworm AS go-build
WORKDIR /usr/src/social-app
ENV GODEBUG="netdns=go"ENV GOOS="linux"ENV GOARCH="amd64"ENV CGO_ENABLED=1ENV GOEXPERIMENT="loopvar"
COPY --from=web-build /app/bskyweb ./bskyweb
# DEBUGRUN find ./bskyweb/static
RUN cd bskyweb/ && \ go mod download && \ go mod verify
RUN cd bskyweb/ && \ go build \ -v \ -trimpath \ -tags timetzdata \ -o /bskyweb \ ./cmd/bskyweb
## Stage 3: runtime image.#FROM debian:bookworm-slim
ENV GODEBUG=netdns=goENV TZ=Etc/UTCENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install --yes \ dumb-init \ ca-certificates
ENTRYPOINT ["dumb-init", "--"]
WORKDIR /bskywebCOPY --from=go-build /bskyweb /usr/bin/bskyweb
CMD ["/usr/bin/bskyweb"]
LABEL org.opencontainers.image.source=https://github.com/bluesky-social/social-appLABEL org.opencontainers.image.description="bsky.app Web App"LABEL org.opencontainers.image.licenses=MIT
# NOOP