diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 0e401db634..c2ecb41863 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -215,7 +215,7 @@ jobs: --secret id=DEPOT_TOKEN,env=DEPOT_TOKEN \ --build-arg BUILD_TARGET=${{ matrix.build_target }} \ --build-arg BUILD_MODE=${{ steps.mode.outputs.build_mode }} \ - --build-arg BUILD_FRONTEND=false \ + --build-arg BUILD_FRONTEND=${{ matrix.build_target == 'engine' && 'true' || 'false' }} \ -f ${{ matrix.docker }} \ -t builder-${{ matrix.build_target }}-${{ matrix.platform }} \ --load \ @@ -262,7 +262,7 @@ jobs: echo "build_frontend=true" >> $GITHUB_OUTPUT else echo "cargo_build_mode=debug" >> $GITHUB_OUTPUT - echo "build_frontend=false" >> $GITHUB_OUTPUT + echo "build_frontend=true" >> $GITHUB_OUTPUT fi - uses: ./.github/actions/docker-setup with: diff --git a/docker/build/darwin-arm64.Dockerfile b/docker/build/darwin-arm64.Dockerfile index 2e21d3e180..8f91c7b346 100644 --- a/docker/build/darwin-arm64.Dockerfile +++ b/docker/build/darwin-arm64.Dockerfile @@ -9,6 +9,7 @@ ARG BUILD_TARGET=engine ARG BUILD_MODE=release ARG BUILD_FRONTEND=false ARG VITE_APP_API_URL=__SAME__ +ARG VITE_FEATURE_FLAGS= ENV BINDGEN_EXTRA_CLANG_ARGS_aarch64_apple_darwin="--sysroot=/root/osxcross/target/SDK/MacOSX11.3.sdk -isystem /root/osxcross/target/SDK/MacOSX11.3.sdk/usr/include" \ CFLAGS_aarch64_apple_darwin="-B/root/osxcross/target/bin" \ @@ -35,11 +36,7 @@ RUN if [ "$BUILD_TARGET" = "engine" ] && [ "$BUILD_FRONTEND" = "true" ]; then \ export NODE_OPTIONS="--max-old-space-size=8192" && \ export SKIP_NAPI_BUILD=1 && \ pnpm install --ignore-scripts && \ - if [ -n "$VITE_APP_API_URL" ]; then \ - VITE_APP_API_URL="${VITE_APP_API_URL}" npx turbo build:engine -F @rivetkit/engine-frontend; \ - else \ - npx turbo build:engine -F @rivetkit/engine-frontend; \ - fi; \ + VITE_APP_API_URL="${VITE_APP_API_URL}" VITE_FEATURE_FLAGS="${VITE_FEATURE_FLAGS}" npx turbo build -F @rivetkit/engine-frontend; \ fi RUN --mount=type=cache,id=cargo-registry-darwin-arm64,target=/usr/local/cargo/registry,sharing=locked \ diff --git a/docker/build/darwin-x64.Dockerfile b/docker/build/darwin-x64.Dockerfile index 1482cb5b84..d862fa55a4 100644 --- a/docker/build/darwin-x64.Dockerfile +++ b/docker/build/darwin-x64.Dockerfile @@ -9,6 +9,7 @@ ARG BUILD_TARGET=engine ARG BUILD_MODE=release ARG BUILD_FRONTEND=false ARG VITE_APP_API_URL=__SAME__ +ARG VITE_FEATURE_FLAGS= ENV BINDGEN_EXTRA_CLANG_ARGS_x86_64_apple_darwin="--sysroot=/root/osxcross/target/SDK/MacOSX11.3.sdk -isystem /root/osxcross/target/SDK/MacOSX11.3.sdk/usr/include" \ CFLAGS_x86_64_apple_darwin="-B/root/osxcross/target/bin" \ @@ -35,11 +36,7 @@ RUN if [ "$BUILD_TARGET" = "engine" ] && [ "$BUILD_FRONTEND" = "true" ]; then \ export NODE_OPTIONS="--max-old-space-size=8192" && \ export SKIP_NAPI_BUILD=1 && \ pnpm install --ignore-scripts && \ - if [ -n "$VITE_APP_API_URL" ]; then \ - VITE_APP_API_URL="${VITE_APP_API_URL}" npx turbo build:engine -F @rivetkit/engine-frontend; \ - else \ - npx turbo build:engine -F @rivetkit/engine-frontend; \ - fi; \ + VITE_APP_API_URL="${VITE_APP_API_URL}" VITE_FEATURE_FLAGS="${VITE_FEATURE_FLAGS}" npx turbo build -F @rivetkit/engine-frontend; \ fi RUN --mount=type=cache,id=cargo-registry-darwin-x64,target=/usr/local/cargo/registry,sharing=locked \ diff --git a/docker/build/linux-arm64-gnu.Dockerfile b/docker/build/linux-arm64-gnu.Dockerfile index 4f8806ab2b..27f6ede6ad 100644 --- a/docker/build/linux-arm64-gnu.Dockerfile +++ b/docker/build/linux-arm64-gnu.Dockerfile @@ -9,6 +9,7 @@ ARG BUILD_TARGET=engine ARG BUILD_MODE=release ARG BUILD_FRONTEND=false ARG VITE_APP_API_URL=__SAME__ +ARG VITE_FEATURE_FLAGS= ENV RUSTFLAGS="--cfg tokio_unstable" ENV RUSTC_WRAPPER=sccache \ @@ -22,11 +23,7 @@ RUN if [ "$BUILD_TARGET" = "engine" ] && [ "$BUILD_FRONTEND" = "true" ]; then \ export NODE_OPTIONS="--max-old-space-size=8192" && \ export SKIP_NAPI_BUILD=1 && \ pnpm install --ignore-scripts && \ - if [ -n "$VITE_APP_API_URL" ]; then \ - VITE_APP_API_URL="${VITE_APP_API_URL}" npx turbo build:engine -F @rivetkit/engine-frontend; \ - else \ - npx turbo build:engine -F @rivetkit/engine-frontend; \ - fi; \ + VITE_APP_API_URL="${VITE_APP_API_URL}" VITE_FEATURE_FLAGS="${VITE_FEATURE_FLAGS}" npx turbo build -F @rivetkit/engine-frontend; \ fi RUN --mount=type=cache,id=cargo-registry-linux-arm64-gnu,target=/usr/local/cargo/registry,sharing=locked \ diff --git a/docker/build/linux-arm64-musl.Dockerfile b/docker/build/linux-arm64-musl.Dockerfile index 2a2988e50d..ce59e540ad 100644 --- a/docker/build/linux-arm64-musl.Dockerfile +++ b/docker/build/linux-arm64-musl.Dockerfile @@ -9,6 +9,7 @@ ARG BUILD_TARGET=engine ARG BUILD_MODE=release ARG BUILD_FRONTEND=false ARG VITE_APP_API_URL=__SAME__ +ARG VITE_FEATURE_FLAGS= ENV OPENSSL_DIR=/musl-aarch64 \ OPENSSL_INCLUDE_DIR=/musl-aarch64/include \ @@ -28,11 +29,7 @@ RUN if [ "$BUILD_TARGET" = "engine" ] && [ "$BUILD_FRONTEND" = "true" ]; then \ export NODE_OPTIONS="--max-old-space-size=8192" && \ export SKIP_NAPI_BUILD=1 && \ pnpm install --ignore-scripts && \ - if [ -n "$VITE_APP_API_URL" ]; then \ - VITE_APP_API_URL="${VITE_APP_API_URL}" npx turbo build:engine -F @rivetkit/engine-frontend; \ - else \ - npx turbo build:engine -F @rivetkit/engine-frontend; \ - fi; \ + VITE_APP_API_URL="${VITE_APP_API_URL}" VITE_FEATURE_FLAGS="${VITE_FEATURE_FLAGS}" npx turbo build -F @rivetkit/engine-frontend; \ fi RUN --mount=type=cache,id=cargo-registry-linux-arm64-musl,target=/usr/local/cargo/registry,sharing=locked \ diff --git a/docker/build/linux-x64-gnu.Dockerfile b/docker/build/linux-x64-gnu.Dockerfile index 96d7133fc8..475cce5f7d 100644 --- a/docker/build/linux-x64-gnu.Dockerfile +++ b/docker/build/linux-x64-gnu.Dockerfile @@ -6,6 +6,7 @@ # BUILD_TARGET - "engine" or "rivetkit-napi" # BUILD_MODE - "debug" (fast) or "release" (optimized) # BUILD_FRONTEND - "true" or "false" (engine only) +# VITE_FEATURE_FLAGS - comma-separated frontend features. Empty means engine UI. # # Base image: docker/builder-base/linux-gnu.Dockerfile # Rebuild base: scripts/docker-builder-base/build-push.sh linux-gnu --push @@ -15,6 +16,7 @@ ARG BUILD_TARGET=engine ARG BUILD_MODE=release ARG BUILD_FRONTEND=false ARG VITE_APP_API_URL=__SAME__ +ARG VITE_FEATURE_FLAGS= ENV RUSTFLAGS="--cfg tokio_unstable" @@ -30,11 +32,7 @@ RUN if [ "$BUILD_TARGET" = "engine" ] && [ "$BUILD_FRONTEND" = "true" ]; then \ export NODE_OPTIONS="--max-old-space-size=8192" && \ export SKIP_NAPI_BUILD=1 && \ pnpm install --ignore-scripts && \ - if [ -n "$VITE_APP_API_URL" ]; then \ - VITE_APP_API_URL="${VITE_APP_API_URL}" npx turbo build:engine -F @rivetkit/engine-frontend; \ - else \ - npx turbo build:engine -F @rivetkit/engine-frontend; \ - fi; \ + VITE_APP_API_URL="${VITE_APP_API_URL}" VITE_FEATURE_FLAGS="${VITE_FEATURE_FLAGS}" npx turbo build -F @rivetkit/engine-frontend; \ fi # Build binary. diff --git a/docker/build/linux-x64-musl.Dockerfile b/docker/build/linux-x64-musl.Dockerfile index 2c5b17a366..779efda303 100644 --- a/docker/build/linux-x64-musl.Dockerfile +++ b/docker/build/linux-x64-musl.Dockerfile @@ -9,6 +9,7 @@ ARG BUILD_TARGET=engine ARG BUILD_MODE=release ARG BUILD_FRONTEND=false ARG VITE_APP_API_URL=__SAME__ +ARG VITE_FEATURE_FLAGS= ENV OPENSSL_DIR=/musl-x86_64 \ OPENSSL_INCLUDE_DIR=/musl-x86_64/include \ @@ -27,11 +28,7 @@ RUN if [ "$BUILD_TARGET" = "engine" ] && [ "$BUILD_FRONTEND" = "true" ]; then \ export NODE_OPTIONS="--max-old-space-size=8192" && \ export SKIP_NAPI_BUILD=1 && \ pnpm install --ignore-scripts && \ - if [ -n "$VITE_APP_API_URL" ]; then \ - VITE_APP_API_URL="${VITE_APP_API_URL}" npx turbo build:engine -F @rivetkit/engine-frontend; \ - else \ - npx turbo build:engine -F @rivetkit/engine-frontend; \ - fi; \ + VITE_APP_API_URL="${VITE_APP_API_URL}" VITE_FEATURE_FLAGS="${VITE_FEATURE_FLAGS}" npx turbo build -F @rivetkit/engine-frontend; \ fi RUN --mount=type=cache,id=cargo-registry-linux-x64-musl,target=/usr/local/cargo/registry,sharing=locked \ diff --git a/docker/build/windows-x64.Dockerfile b/docker/build/windows-x64.Dockerfile index dd3faae1c5..c0017e240e 100644 --- a/docker/build/windows-x64.Dockerfile +++ b/docker/build/windows-x64.Dockerfile @@ -15,6 +15,7 @@ ARG BUILD_TARGET=engine ARG BUILD_MODE=release ARG BUILD_FRONTEND=false ARG VITE_APP_API_URL=__SAME__ +ARG VITE_FEATURE_FLAGS= # Windows-specific build flags: # - lld linker is ~5x faster than MinGW's default ld for big Rust binaries. @@ -35,11 +36,7 @@ RUN if [ "$BUILD_TARGET" = "engine" ] && [ "$BUILD_FRONTEND" = "true" ]; then \ export NODE_OPTIONS="--max-old-space-size=8192" && \ export SKIP_NAPI_BUILD=1 && \ pnpm install --ignore-scripts && \ - if [ -n "$VITE_APP_API_URL" ]; then \ - VITE_APP_API_URL="${VITE_APP_API_URL}" npx turbo build:engine -F @rivetkit/engine-frontend; \ - else \ - npx turbo build:engine -F @rivetkit/engine-frontend; \ - fi; \ + VITE_APP_API_URL="${VITE_APP_API_URL}" VITE_FEATURE_FLAGS="${VITE_FEATURE_FLAGS}" npx turbo build -F @rivetkit/engine-frontend; \ fi RUN --mount=type=cache,id=cargo-registry-windows-x64,target=/usr/local/cargo/registry,sharing=locked \ diff --git a/docker/engine/Dockerfile b/docker/engine/Dockerfile index 74c105bea4..6cbe4a83b7 100644 --- a/docker/engine/Dockerfile +++ b/docker/engine/Dockerfile @@ -7,6 +7,7 @@ FROM ghcr.io/rivet-dev/rivet/engine-base-builder:a36b881 AS builder # Docker automatically provides TARGETARCH ARG TARGETARCH +ARG BUILD_FRONTEND=false ARG VITE_FEATURE_FLAGS= ARG CARGO_BUILD_MODE=debug ARG VITE_APP_API_URL=__SAME__ @@ -21,9 +22,9 @@ COPY . . # `lefthook install`, which needs a .git directory (excluded by # .dockerignore). lefthook is a dev-only git hook manager and has no # place inside the Docker build. SKIP_NAPI_BUILD=1 tells -# @rivetkit/rivetkit-napi to skip its napi build — the frontend only +# @rivetkit/rivetkit-napi to skip its napi build. The frontend only # consumes the TypeScript surface, not the runtime .node binary. -RUN if [ -n "$VITE_FEATURE_FLAGS" ]; then \ +RUN if [ "$BUILD_FRONTEND" = "true" ]; then \ export NODE_OPTIONS="--max-old-space-size=8192" && \ export SKIP_NAPI_BUILD=1 && \ pnpm install --ignore-scripts && \