# portfolio-next: polls the content repo, builds the static site with Astro, serves it.
FROM oven/bun:1.3.14-slim

RUN apt-get update \
 && apt-get install -y --no-install-recommends git openssh-client ca-certificates \
 && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --chown=bun:bun package.json bun.lock ./
RUN bun install --frozen-lockfile --production && chown -R bun:bun /app
COPY --chown=bun:bun astro.config.mjs tsconfig.json ./
COPY --chown=bun:bun public ./public
COPY --chown=bun:bun src ./src

RUN printf '#!/bin/sh\nexec bun /app/src/cli.ts "$@"\n' > /usr/local/bin/site \
 && chmod +x /usr/local/bin/site \
 && mkdir /data && chown bun:bun /data

ARG APP_VERSION=dev
ENV APP_VERSION=$APP_VERSION \
    DATA_DIR=/data \
    PORT=8080 \
    POLL_INTERVAL=1h \
    SOURCES_INTERVAL=6h \
    CONTENT_BRANCH=main \
    SITE_URL=https://lucaswinther.info

USER bun
VOLUME /data
EXPOSE 8080
ENTRYPOINT ["site"]
CMD ["serve"]
