diff --git a/boot/Dockerfile b/boot/Dockerfile index 744f39c8..9c6b6114 100644 --- a/boot/Dockerfile +++ b/boot/Dockerfile @@ -1,8 +1,11 @@ +ARG VERSION="1.0.0" + FROM eclipse-temurin:17-jre + LABEL authors="ReaJason" WORKDIR /app -COPY build/libs/boot.jar app.jar +COPY build/libs/boot-${ARG}.jar app.jar ENV JAVA_OPTS="" \ INTER_JAVA_OPTS="--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED --add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED" diff --git a/boot/src/main/java/com/reajason/javaweb/boot/controller/VersionController.java b/boot/src/main/java/com/reajason/javaweb/boot/controller/VersionController.java new file mode 100644 index 00000000..e3b6214b --- /dev/null +++ b/boot/src/main/java/com/reajason/javaweb/boot/controller/VersionController.java @@ -0,0 +1,25 @@ +package com.reajason.javaweb.boot.controller; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author ReaJason + * @since 2025/2/2 + */ +@RestController +@CrossOrigin("*") +@RequestMapping("/version") +public class VersionController { + + @Value("${spring.application.version}") + String version; + + @GetMapping + public String version() { + return version; + } +} diff --git a/web/src/components/version-badge.tsx b/web/src/components/version-badge.tsx new file mode 100644 index 00000000..d6e6bd40 --- /dev/null +++ b/web/src/components/version-badge.tsx @@ -0,0 +1,30 @@ +import { env } from "@/config"; +import { useQuery } from "@tanstack/react-query"; +import { LoaderCircle } from "lucide-react"; +import type React from "react"; +import { Button } from "./ui/button"; + +const VersionBadge: React.FC = () => { + const { isPending, data } = useQuery({ + queryKey: ["version"], + queryFn: async () => { + const response = await fetch(`${env.API_URL}/version`); + await new Promise((resolve) => setTimeout(resolve, 100)); + return await response.text(); + }, + }); + + return ( +
+ +
+ ); +}; + +export default VersionBadge; diff --git a/web/src/routes/__root.tsx b/web/src/routes/__root.tsx index 9f7abae0..bc75eacb 100644 --- a/web/src/routes/__root.tsx +++ b/web/src/routes/__root.tsx @@ -2,6 +2,7 @@ import { LanguageSwitcher } from "@/components/language-switcher"; import { ModeToggle } from "@/components/mode-toggle.tsx"; import { ThemeProvider } from "@/components/theme-provider.tsx"; import { Button } from "@/components/ui/button.tsx"; +import VersionBadge from "@/components/version-badge"; import { Outlet, createRootRoute } from "@tanstack/react-router"; export const Route = createRootRoute({ @@ -18,6 +19,7 @@ function RootComponent() {

MemShellParty - JavaWeb

+