ARG FLUTTER_VERSION=3.38.9

FROM --platform=amd64 ghcr.io/instrumentisto/flutter:${FLUTTER_VERSION} AS build-env

ARG SENTRY_AUTH_TOKEN
ARG SENTRY_ORG
ARG SENTRY_PROJECT
ARG SENTRY_URL
ARG SENTRY_RELEASE
ARG VCS_REF
ARG GITHUB_SHA

WORKDIR /app
COPY . .

ENV GITHUB_SHA=$GITHUB_SHA \
    SENTRY_ORG=$SENTRY_ORG \
    SENTRY_PROJECT=$SENTRY_PROJECT \
    SENTRY_URL=$SENTRY_URL \
    SENTRY_RELEASE=$SENTRY_RELEASE

RUN ./scripts/prebuild.sh && \
    if [ -z "$GITHUB_SHA" ]; then echo "GITHUB_SHA is required for SENTRY_DIST"; exit 1; fi && \
    flutter build web --release --source-maps  \
    --dart-define=SENTRY_RELEASE=$SENTRY_RELEASE \
    --dart-define=SENTRY_DIST=$GITHUB_SHA && \
    if [ -n "$SENTRY_AUTH_TOKEN" ] && [ -n "$SENTRY_ORG" ] && [ -n "$SENTRY_PROJECT" ] && [ -n "$SENTRY_RELEASE" ] && [ -n "$GITHUB_SHA" ]; then \
        echo "Sentry configuration detected, uploading sourcemaps..." && \
        curl -sL https://sentry.io/get-cli/ | SENTRY_CLI_VERSION=2.20.7 bash && \
        sentry-cli releases new "$SENTRY_RELEASE" && \
        sentry-cli sourcemaps upload build/web \
            --org "$SENTRY_ORG" \
            --project "$SENTRY_PROJECT" \
            --auth-token "$SENTRY_AUTH_TOKEN" \
            --release "$SENTRY_RELEASE" \
            --dist "$GITHUB_SHA" \
            --url-prefix "~/" \
            --validate \
            --wait && \
        sentry-cli releases finalize "$SENTRY_RELEASE" && \
        echo "Sentry sourcemaps uploaded successfully"; \
    else \
        echo "Sentry configuration not complete, skipping sourcemap upload"; \
    fi

FROM nginx:alpine
RUN apk add gzip
COPY --from=build-env /app/server/nginx.conf /etc/nginx
COPY --from=build-env /app/build/web /usr/share/nginx/html
EXPOSE 80
CMD gzip -k -r -f /usr/share/nginx/html/ && nginx -g 'daemon off;'