treewide: dynamically generate copyright line

A copyright line with hardcoded year was shown in various places of the
UI. Instead, take the year from the commit date.

Change-Id: I424d6c5b3aff34fe4479c37f30f9ea280b7eb4af
Reviewed-on: https://review.monogon.dev/c/monogon/+/4168
Tested-by: Jenkins CI
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
diff --git a/metropolis/node/core/tconsole/BUILD.bazel b/metropolis/node/core/tconsole/BUILD.bazel
index e16eb41..2cae5df 100644
--- a/metropolis/node/core/tconsole/BUILD.bazel
+++ b/metropolis/node/core/tconsole/BUILD.bazel
@@ -11,7 +11,11 @@
         "tconsole.go",
     ],
     importpath = "source.monogon.dev/metropolis/node/core/tconsole",
+    stampsrcs = ["//build:stabler_status"],
     visibility = ["//visibility:public"],
+    x_defs = {
+        "copyrightLine": "{STABLER_MONOGON_copyright}",
+    },
     deps = [
         "//metropolis/node/core/network",
         "//metropolis/node/core/roleserve",
diff --git a/metropolis/node/core/tconsole/page_status.go b/metropolis/node/core/tconsole/page_status.go
index 2843ddf..8b08b23 100644
--- a/metropolis/node/core/tconsole/page_status.go
+++ b/metropolis/node/core/tconsole/page_status.go
@@ -13,6 +13,9 @@
 	"source.monogon.dev/version"
 )
 
+// Filled at linking time.
+var copyrightLine string
+
 // pageStatusData encompasses all data to be shown within the status page.
 type pageStatusData struct {
 	netAddr     string
@@ -39,7 +42,7 @@
 
 	// Draw the top part.
 	c.drawTextCentered(c.width/2, splitV/2, "Monogon Cluster Operating System", sty1)
-	c.drawTextCentered(c.width/2, splitV/2+1, "Copyright 2022-2024 The Monogon Project Authors", sty1)
+	c.drawTextCentered(c.width/2, splitV/2+1, copyrightLine, sty1)
 
 	// Horizontal split between left logo and right status lines, a la 'fetch'.
 	splitH := split(c.width, logoWidth, 60)