FROM ghcr.io/railwayapp/nixpacks:ubuntu-1745885067

ENTRYPOINT ["/bin/bash", "-l", "-c"]
WORKDIR /app/


COPY .nixpacks/nixpkgs-31fb21469e34b6b5c7be77b9a35bae43d0c598e9.nix .nixpacks/nixpkgs-31fb21469e34b6b5c7be77b9a35bae43d0c598e9.nix
RUN nix-env -if .nixpacks/nixpkgs-31fb21469e34b6b5c7be77b9a35bae43d0c598e9.nix && nix-collect-garbage -d
COPY .nixpacks/nixpkgs-ba913eda2df8eb72147259189d55932012df6301.nix .nixpacks/nixpkgs-ba913eda2df8eb72147259189d55932012df6301.nix
RUN nix-env -if .nixpacks/nixpkgs-ba913eda2df8eb72147259189d55932012df6301.nix && nix-collect-garbage -d

COPY .nixpacks/assets /assets/
ARG CI NIXPACKS_METADATA NIXPACKS_SPA_OUTPUT_DIR NODE_ENV NPM_CONFIG_PRODUCTION
ENV CI=$CI NIXPACKS_METADATA=$NIXPACKS_METADATA NIXPACKS_SPA_OUTPUT_DIR=$NIXPACKS_SPA_OUTPUT_DIR NODE_ENV=$NODE_ENV NPM_CONFIG_PRODUCTION=$NPM_CONFIG_PRODUCTION

# setup phase
# noop

# caddy phase
COPY . /app/.
RUN  caddy fmt --overwrite /assets/Caddyfile

# install phase
ENV NIXPACKS_PATH=/app/node_modules/.bin:$NIXPACKS_PATH
COPY . /app/.
RUN --mount=type=cache,id=web-app-/root/npm,target=/root/.npm --mount=type=cache,id=web-app-/cache/npm,target=/cache/npm --mount=type=cache,id=web-app-/cache/pnpm,target=/cache/pnpm --mount=type=cache,id=web-app-/cache/yarn,target=/cache/yarn NODE_ENV=development bun install || npm install --legacy-peer-deps
RUN --mount=type=cache,id=web-app-/root/npm,target=/root/.npm --mount=type=cache,id=web-app-/cache/npm,target=/cache/npm --mount=type=cache,id=web-app-/cache/pnpm,target=/cache/pnpm --mount=type=cache,id=web-app-/cache/yarn,target=/cache/yarn for SUB in backend frontend server client api web shared; do if [ -f "$SUB/package.json" ] && [ ! -d "$SUB/node_modules" ]; then echo "📦 [Monorepo Sub-Package] Installing dependencies in ./$SUB ..."; (cd "$SUB" && NODE_ENV=development npm install --legacy-peer-deps --include=dev || true); fi; if [ -f "$SUB/prisma/schema.prisma" ]; then echo "💎 [Prisma] Generating Prisma client in ./$SUB ..."; (cd "$SUB" && DATABASE_URL="${DATABASE_URL:-postgresql://postgres:postgres@localhost:5432/runtide}" npx prisma generate || true); fi; done; if [ -f "prisma/schema.prisma" ]; then echo "💎 [Prisma] Generating Prisma client ..."; DATABASE_URL="${DATABASE_URL:-postgresql://postgres:postgres@localhost:5432/runtide}" npx prisma generate || true; fi

# build phase
COPY . /app/.
RUN --mount=type=cache,id=web-app-node_modules/cache,target=/app/node_modules/.cache NODE_OPTIONS='--max-old-space-size=3072' bun run build



RUN printf '\nPATH=/app/node_modules/.bin:$PATH' >> /root/.profile


# start
COPY . /app

CMD ["if [ -d dist ]; then npx --yes serve -s dist -l ${PORT:-3000}; elif [ -d build ]; then npx --yes serve -s build -l ${PORT:-3000}; elif [ -d out ]; then npx --yes serve -s out -l ${PORT:-3000}; else npx --yes serve -s . -l ${PORT:-3000}; fi"]

