diff --git a/Dockerfile b/Dockerfile
index f4060a2..169a5b1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,12 +7,14 @@ RUN corepack enable && corepack prepare pnpm@12.11.2 --activate
COPY web/package.json web/pnpm-lock.yaml web/pnpm-workspace.yaml web/.npmrc ./
RUN pnpm install --frozen-lockfile
COPY web/ ./
+COPY VERSION /src/VERSION
RUN pnpm build
# ---- Backend (frontend assets embedded in the binary) ----
FROM golang:1-alpine AS server
WORKDIR /src
COPY go.mod go.sum ./
+COPY VERSION ./
RUN go mod download
COPY cmd ./cmd
COPY internal ./internal
@@ -20,10 +22,14 @@ COPY deploy/embed.go ./deploy/
COPY deploy/data/vault ./deploy/data/vault
COPY web/embed.go web/font_storage.go ./web/
COPY --from=web /src/web/dist ./web/dist
-RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/rawmark ./cmd/rawmark && mkdir -p /out/data
+RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w -X main.releaseVersion=$(cat VERSION)" -o /out/rawmark ./cmd/rawmark && mkdir -p /out/data
# ---- Runtime ----
FROM gcr.io/distroless/static:nonroot
+COPY LICENSE /LICENSE
+COPY web/LICENSE /licenses/vue3-starter-MIT.txt
+COPY web/src/common/appearance/fonts/*-OFL.txt /licenses/
+COPY web/src/common/appearance/fonts/maple/LICENSE.txt /licenses/Maple-Mono-OFL.txt
COPY --from=server /out/rawmark /rawmark
COPY --from=server --chown=nonroot:nonroot /out/data /data
ENV RAWMARK_DATA=/data
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..6e8bf73
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.1.0
diff --git a/cmd/rawmark/main.go b/cmd/rawmark/main.go
index 4511879..d565e71 100644
--- a/cmd/rawmark/main.go
+++ b/cmd/rawmark/main.go
@@ -32,6 +32,9 @@ import (
"rawmark/web"
)
+// releaseVersion is set from VERSION by release and Docker builds.
+var releaseVersion = "dev"
+
func env(key, def string) string {
if v := os.Getenv(key); v != "" {
return v
@@ -40,6 +43,10 @@ func env(key, def string) string {
}
func main() {
+ if len(os.Args) > 1 && os.Args[1] == "--version" {
+ fmt.Println("RawMark " + releaseVersion)
+ return
+ }
addr := env("RAWMARK_ADDR", ":8080")
if len(os.Args) > 1 && os.Args[1] == "healthcheck" {
os.Exit(healthcheck(addr))
diff --git a/web/src/pages/settings/index.vue b/web/src/pages/settings/index.vue
index 79a0a1c..21a03ee 100644
--- a/web/src/pages/settings/index.vue
+++ b/web/src/pages/settings/index.vue
@@ -21,6 +21,7 @@ import { searchSettings, SETTINGS_SECTIONS } from './settings-catalog'
const props = defineProps<{ prepareMaintenance: () => Promise
{{ buildVersion }}
+ {{ releaseVersion }} ยท {{ buildVersion }}