From e370008d759e30e2c2485f594f3dc7670d11e971 Mon Sep 17 00:00:00 2001 From: Xevion Date: Sat, 13 Sep 2025 22:02:41 -0500 Subject: [PATCH] fix: pass RAILWAY_GIT_COMMIT_SHA through Docker, provide Cargo.toml for frontend (version retrieval) --- Dockerfile | 7 +++++++ web/src/routes/index.tsx | 19 ++++++------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index f8924b3..4e2d321 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,6 @@ # Build arguments ARG RUST_VERSION=1.89.0 +ARG RAILWAY_GIT_COMMIT_SHA # Frontend Build Stage FROM node:22-bookworm-slim AS frontend-builder @@ -9,6 +10,9 @@ RUN npm install -g pnpm WORKDIR /app +# Copy backend Cargo.toml for build-time version retrieval +COPY ./Cargo.toml ./ + # Copy frontend package files COPY ./web/package.json ./web/pnpm-lock.yaml ./ @@ -24,6 +28,9 @@ RUN pnpm run build # Rust Build Stage FROM rust:${RUST_VERSION}-bookworm AS builder +# Set build-time environment variable for Railway Git commit SHA +ENV RAILWAY_GIT_COMMIT_SHA=${RAILWAY_GIT_COMMIT_SHA} + # Install build dependencies RUN apt-get update && apt-get install -y \ pkg-config \ diff --git a/web/src/routes/index.tsx b/web/src/routes/index.tsx index 4c302a8..a1b4ef8 100644 --- a/web/src/routes/index.tsx +++ b/web/src/routes/index.tsx @@ -18,13 +18,9 @@ import TimeAgo from "react-timeago"; import { ThemeToggle } from "../components/ThemeToggle"; import "../App.css"; -export const Route = createFileRoute("/")({ - component: App, -}); - -// Constants const REFRESH_INTERVAL = import.meta.env.DEV ? 3000 : 30000; const REQUEST_TIMEOUT = 10000; // 10 seconds + const CARD_STYLES = { padding: "24px", maxWidth: "400px", @@ -37,14 +33,12 @@ const BORDER_STYLES = { borderTop: "1px solid var(--gray-7)", } as const; -// Service icon mapping const SERVICE_ICONS: Record = { bot: Bot, banner: Globe, discord: MessageCircle, }; -// Types interface ResponseTiming { health: number | null; status: number | null; @@ -80,7 +74,6 @@ type StatusState = lastFetch: Date; }; -// Helper functions const formatNumber = (num: number): string => { return num.toLocaleString(); }; @@ -117,7 +110,6 @@ const getServices = (state: StatusState): Service[] => { ); }; -// Status Component const StatusDisplay = ({ status }: { status: Status | "Unreachable" }) => { const { icon: Icon, color } = getStatusIcon(status); @@ -137,7 +129,6 @@ const StatusDisplay = ({ status }: { status: Status | "Unreachable" }) => { ); }; -// Service Status Component const ServiceStatus = ({ service }: { service: Service }) => { return ( @@ -150,7 +141,6 @@ const ServiceStatus = ({ service }: { service: Service }) => { ); }; -// Skeleton Service Component const SkeletonService = () => { return ( @@ -166,7 +156,6 @@ const SkeletonService = () => { ); }; -// Timing Row Component const TimingRow = ({ icon: Icon, name, @@ -190,7 +179,7 @@ const TimingRow = ({ function App() { const [state, setState] = useState({ mode: "loading" }); - // Helper variables for state checking + // State helpers const isLoading = state.mode === "loading"; const hasError = state.mode === "error"; const hasTimeout = state.mode === "timeout"; @@ -428,3 +417,7 @@ function App() { ); } + +export const Route = createFileRoute("/")({ + component: App, +});