From d293738bf4d0bd11bc334302e18de64ba2bbd303 Mon Sep 17 00:00:00 2001 From: Nico <47644445+nicotsx@users.noreply.github.com> Date: Sun, 4 Jan 2026 21:43:39 +0100 Subject: [PATCH] feat: show components versions (#297) On hover on the Zerobyte version in the sidebar A card will appear to show the versions of the binaries (restic, rclone, shoutrrr) --- Dockerfile | 28 +++++++------ app/client/components/app-sidebar.tsx | 39 ++++++++++++----- app/client/components/ui/hover-card.tsx | 42 +++++++++++++++++++ app/client/lib/version.ts | 3 ++ .../notification-forms/custom-form.tsx | 2 +- bun.lock | 3 ++ docker-compose.yml | 2 + package.json | 1 + 8 files changed, 96 insertions(+), 24 deletions(-) create mode 100644 app/client/components/ui/hover-card.tsx diff --git a/Dockerfile b/Dockerfile index 806415d..c2134e6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,14 @@ ARG BUN_VERSION="1.3.5" FROM oven/bun:${BUN_VERSION}-alpine AS base +ARG RESTIC_VERSION="0.18.1" +ARG RCLONE_VERSION="1.72.1" +ARG SHOUTRRR_VERSION="0.13.1" + +ENV VITE_RESTIC_VERSION=${RESTIC_VERSION} \ + VITE_RCLONE_VERSION=${RCLONE_VERSION} \ + VITE_SHOUTRRR_VERSION=${SHOUTRRR_VERSION} + RUN apk upgrade --no-cache && \ apk add --no-cache davfs2=1.6.1-r2 openssh-client fuse3 sshfs tini @@ -16,22 +24,19 @@ FROM base AS deps WORKDIR /deps ARG TARGETARCH -ARG RESTIC_VERSION="0.18.1" -ARG RCLONE_VERSION="1.72.1" -ARG SHOUTRRR_VERSION="0.13.1" ENV TARGETARCH=${TARGETARCH} RUN apk add --no-cache curl bzip2 unzip tar RUN echo "Building for ${TARGETARCH}" RUN if [ "${TARGETARCH}" = "arm64" ]; then \ - curl -L -o restic.bz2 "https://github.com/restic/restic/releases/download/v$RESTIC_VERSION/restic_$RESTIC_VERSION"_linux_arm64.bz2; \ - curl -L -o rclone.zip "https://github.com/rclone/rclone/releases/download/v$RCLONE_VERSION/rclone-v$RCLONE_VERSION-linux-arm64.zip"; \ + curl -L -o restic.bz2 "https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_linux_arm64.bz2"; \ + curl -L -o rclone.zip "https://github.com/rclone/rclone/releases/download/v${RCLONE_VERSION}/rclone-v${RCLONE_VERSION}-linux-arm64.zip"; \ unzip rclone.zip; \ - curl -L -o shoutrrr.tar.gz "https://github.com/nicholas-fedor/shoutrrr/releases/download/v$SHOUTRRR_VERSION/shoutrrr_linux_arm64v8_${SHOUTRRR_VERSION}.tar.gz"; \ + curl -L -o shoutrrr.tar.gz "https://github.com/nicholas-fedor/shoutrrr/releases/download/v${SHOUTRRR_VERSION}/shoutrrr_linux_arm64v8_${SHOUTRRR_VERSION}.tar.gz"; \ elif [ "${TARGETARCH}" = "amd64" ]; then \ - curl -L -o restic.bz2 "https://github.com/restic/restic/releases/download/v$RESTIC_VERSION/restic_$RESTIC_VERSION"_linux_amd64.bz2; \ - curl -L -o rclone.zip "https://github.com/rclone/rclone/releases/download/v$RCLONE_VERSION/rclone-v$RCLONE_VERSION-linux-amd64.zip"; \ + curl -L -o restic.bz2 "https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_linux_amd64.bz2"; \ + curl -L -o rclone.zip "https://github.com/rclone/rclone/releases/download/v${RCLONE_VERSION}/rclone-v${RCLONE_VERSION}-linux-amd64.zip"; \ unzip rclone.zip; \ curl -L -o shoutrrr.tar.gz "https://github.com/nicholas-fedor/shoutrrr/releases/download/v$SHOUTRRR_VERSION/shoutrrr_linux_amd64_${SHOUTRRR_VERSION}.tar.gz"; \ fi @@ -47,6 +52,7 @@ FROM base AS development ARG APP_VERSION=dev ENV APP_VERSION=${APP_VERSION} +ENV VITE_APP_VERSION=${APP_VERSION} ENV NODE_ENV="development" WORKDIR /app @@ -68,9 +74,10 @@ CMD ["bun", "run", "dev"] # ------------------------------ # PRODUCTION # ------------------------------ -FROM oven/bun:${BUN_VERSION}-alpine AS builder +FROM base AS builder ARG APP_VERSION=dev +ENV VITE_APP_VERSION=${APP_VERSION} WORKDIR /app @@ -79,9 +86,6 @@ RUN bun install --frozen-lockfile COPY . . -RUN touch .env -RUN echo "VITE_APP_VERSION=${APP_VERSION}" >> .env - RUN bun run build FROM base AS production diff --git a/app/client/components/app-sidebar.tsx b/app/client/components/app-sidebar.tsx index c42ed4f..2ed0cd5 100644 --- a/app/client/components/app-sidebar.tsx +++ b/app/client/components/app-sidebar.tsx @@ -14,8 +14,9 @@ import { useSidebar, } from "~/client/components/ui/sidebar"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "~/client/components/ui/tooltip"; +import { HoverCard, HoverCardContent, HoverCardTrigger } from "~/client/components/ui/hover-card"; import { cn } from "~/client/lib/utils"; -import { APP_VERSION } from "~/client/lib/version"; +import { APP_VERSION, RCLONE_VERSION, RESTIC_VERSION, SHOUTRRR_VERSION } from "~/client/lib/version"; import { useUpdates } from "~/client/hooks/use-updates"; import { ReleaseNotesDialog } from "./release-notes-dialog"; @@ -105,16 +106,32 @@ export function AppSidebar() {
- - {displayVersion} - + + + + {displayVersion} + + + +
+
+ Restic: + {RESTIC_VERSION} + Rclone: + {RCLONE_VERSION} + Shoutrrr: + {SHOUTRRR_VERSION} +
+
+
+
{hasUpdate && state !== "collapsed" && (