mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-07-21 10:15:47 +00:00
* feat(frontend): show real project version on About page The About page heading was hardcoded "About DeerFlow 2.0" while the real version is 2.1.0, kept in lockstep across backend/pyproject.toml, frontend/package.json, and Chart.yaml by scripts/verify_versions.sh. With the nightly workflow shipping unreleased main daily, a hardcoded version drifts further from reality every day. Wire the heading to the real version, nightly-aware: - src/version.ts reads NEXT_PUBLIC_APP_VERSION (nightly override) with a package.json fallback for release/local builds. - about-content.ts interpolates APP_VERSION into the heading; the "DeerFlow 1.0 and 2.0" milestone copy in acknowledgments is left as-is. - Dockerfile adds ARG APP_VERSION / ENV NEXT_PUBLIC_APP_VERSION in the builder stage so nightly CI can stamp the version. - nightly.yaml computes the nightly string once in prepare (<base>-nightly.<date>-<sha>, mirroring the chart scheme) and feeds it to both the frontend image build-arg and the chart publish (refactored to consume the shared output, so the displayed version and chart version can't drift). Release builds (container.yaml) are untouched and fall back to package.json. Tests cover the version branches and the heading interpolation; RELEASING.md notes the About page as a derived version consumer. * test(frontend): assert positive About-page version value Address review feedback on #4126: the unset-env assertion was negative-only (checked the stale "2.0" literal was gone), so it would still pass if APP_VERSION interpolated to "" or undefined. Mirror version.test.ts by asserting the heading carries the real resolved APP_VERSION. * ci(nightly): fail loudly on empty base version Address review feedback on #4126: the prepare step's BASE (parsed from Chart.yaml) had no empty-guard. A malformed/missing version would yield `-nightly.<date>-<sha>` (invalid semver) that now flows into both the chart publish and the frontend About-page version. Add `set -euo pipefail` plus a `test -n "$BASE"` guard mirroring publish-chart. `pipefail` matters - without it the pipeline's exit code is awk's, so `set -e` alone wouldn't catch a grep miss.
56 lines
2.6 KiB
Docker
56 lines
2.6 KiB
Docker
# Frontend Dockerfile
|
|
# Supports two targets:
|
|
# --target dev — install deps only, run `pnpm dev` at container start
|
|
# --target prod — full build baked in, run `pnpm start` at container start (default if no --target is specified)
|
|
|
|
ARG PNPM_STORE_PATH=/root/.local/share/pnpm/store
|
|
ARG NPM_REGISTRY
|
|
|
|
# ── Base: shared setup ────────────────────────────────────────────────────────
|
|
FROM node:22-alpine AS base
|
|
ARG PNPM_STORE_PATH
|
|
ARG NPM_REGISTRY
|
|
# Configure corepack registry before installing pnpm so the download itself
|
|
# succeeds in restricted networks (COREPACK_NPM_REGISTRY controls where
|
|
# corepack fetches package managers from).
|
|
RUN if [ -n "${NPM_REGISTRY}" ]; then \
|
|
export COREPACK_NPM_REGISTRY="${NPM_REGISTRY}"; \
|
|
fi && \
|
|
corepack enable && corepack install -g pnpm@10.26.2
|
|
RUN pnpm config set store-dir ${PNPM_STORE_PATH}
|
|
# Optionally override npm registry for restricted networks (e.g. NPM_REGISTRY=https://registry.npmmirror.com)
|
|
RUN if [ -n "${NPM_REGISTRY}" ]; then pnpm config set registry "${NPM_REGISTRY}"; fi
|
|
WORKDIR /app
|
|
COPY frontend ./frontend
|
|
|
|
# ── Dev: install only, CMD is overridden by docker-compose ───────────────────
|
|
FROM base AS dev
|
|
RUN cd /app/frontend && pnpm install --frozen-lockfile
|
|
EXPOSE 3000
|
|
|
|
# ── Builder: install + compile Next.js ───────────────────────────────────────
|
|
FROM base AS builder
|
|
RUN cd /app/frontend && pnpm install --frozen-lockfile
|
|
# Skip env validation — runtime vars are injected by nginx/container
|
|
# App version stamp for the About page. Nightly CI passes
|
|
# APP_VERSION=<base>-nightly.<date>-<sha>; release/local builds leave it empty
|
|
# and the frontend falls back to package.json's version.
|
|
ARG APP_VERSION=""
|
|
ENV NEXT_PUBLIC_APP_VERSION=$APP_VERSION
|
|
RUN cd /app/frontend && SKIP_ENV_VALIDATION=1 pnpm build
|
|
|
|
# ── Prod: minimal runtime with pre-built output ───────────────────────────────
|
|
FROM node:22-alpine AS prod
|
|
ARG PNPM_STORE_PATH
|
|
ARG NPM_REGISTRY
|
|
RUN if [ -n "${NPM_REGISTRY}" ]; then \
|
|
export COREPACK_NPM_REGISTRY="${NPM_REGISTRY}"; \
|
|
fi && \
|
|
corepack enable && corepack install -g pnpm@10.26.2
|
|
RUN pnpm config set store-dir ${PNPM_STORE_PATH}
|
|
RUN if [ -n "${NPM_REGISTRY}" ]; then pnpm config set registry "${NPM_REGISTRY}"; fi
|
|
WORKDIR /app
|
|
COPY --from=builder /app/frontend ./frontend
|
|
EXPOSE 3000
|
|
CMD ["sh", "-c", "cd /app/frontend && pnpm start"]
|