FROM flyio/flyctl:latest as flyio FROM node:20-alpine AS dependencies-env # Set production environment ARG SENTRY_AUTH_TOKEN ARG TURSO_DATABASE_URL ARG TURSO_AUTH_TOKEN ENV SENTRY_AUTH_TOKEN $SENTRY_AUTH_TOKEN ENV TURSO_DATABASE_URL $TURSO_DATABASE_URL ENV TURSO_AUTH_TOKEN $TURSO_AUTH_TOKEN RUN npm i -g pnpm RUN --mount=type=secret,id=ALL_SECRETS \ eval "$(base64 -d /run/secrets/ALL_SECRETS)" && \ echo "Using secrets during build! ==>" && \ echo "Mounted secrets: $ALL_SECRETS" COPY . /app FROM dependencies-env AS development-dependencies-env COPY ./package.json pnpm-lock.yaml /app/ WORKDIR /app RUN pnpm i --frozen-lockfile FROM dependencies-env AS production-dependencies-env COPY ./package.json pnpm-lock.yaml /app/ WORKDIR /app RUN pnpm i --prod --frozen-lockfile FROM dependencies-env AS build-env # Mount the secrets and set them as environment variables # RUN --mount=type=secret,id=SENTRY_AUTH_TOKEN \ # --mount=type=secret,id=SENTRY_DSN \ # --mount=type=secret,id=TURSO_DATABASE_URL \ # --mount=type=secret,id=TURSO_AUTH_TOKEN \ # export TURSO_DATABASE_URL=$(cat /run/secrets/TURSO_DATABASE_URL) && \ # export TURSO_AUTH_TOKEN=$(cat /run/secrets/TURSO_AUTH_TOKEN) && \ # export SENTRY_AUTH_TOKEN=$(cat /run/secrets/SENTRY_AUTH_TOKEN) && \ # export SENTRY_DSN=$(cat /run/secrets/SENTRY_DSN) && \ # echo "SENTRY_DSN=$SENTRY_DSN" && \ # echo "TURSO_DATABASE_URL=$TURSO_DATABASE_URL" && \ # echo "TURSO_AUTH_TOKEN=$TURSO_AUTH_TOKEN" && \ # echo "SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN" # WORKDIR /app # Build stage COPY ./package.json pnpm-lock.yaml /app/ COPY --from=development-dependencies-env /app/node_modules /app/node_modules WORKDIR /app RUN pnpm build FROM dependencies-env COPY ./package.json pnpm-lock.yaml /app/ COPY --from=production-dependencies-env /app/node_modules /app/node_modules COPY --from=build-env /app/build /app/build WORKDIR /app CMD ["pnpm", "start"]