metropolis/node: add version to status

This implements submitting the Node's version to its' Status report to
the control plane.

This version is then displayed to the user in metroctl.

Change-Id: I70eadb9a7001b6e50931245e8a6274da2fbdc5bc
Reviewed-on: https://review.monogon.dev/c/monogon/+/2334
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/proto/common/BUILD.bazel b/metropolis/proto/common/BUILD.bazel
index 5ddb3f7..05c4995 100644
--- a/metropolis/proto/common/BUILD.bazel
+++ b/metropolis/proto/common/BUILD.bazel
@@ -7,6 +7,7 @@
     srcs = ["common.proto"],
     visibility = ["//metropolis:__subpackages__"],
     deps = [
+        "//version/spec:spec_proto",
         "@com_google_protobuf//:timestamp_proto",
     ],
 )
@@ -16,6 +17,7 @@
     importpath = "source.monogon.dev/metropolis/proto/common",
     proto = ":common_proto",
     visibility = ["//metropolis:__subpackages__"],
+    deps = ["//version/spec"],
 )
 
 go_library(
diff --git a/metropolis/proto/common/common.proto b/metropolis/proto/common/common.proto
index d2b307e..fc461ab 100644
--- a/metropolis/proto/common/common.proto
+++ b/metropolis/proto/common/common.proto
@@ -19,6 +19,7 @@
 option go_package = "source.monogon.dev/metropolis/proto/common";
 
 import "google/protobuf/timestamp.proto";
+import "version/spec/spec.proto";
 
 // NodeRoles are the possible roles that a Metropolis Node should run within the
 // cluster. These are configured by the cluster and can be retrieved through the
@@ -149,6 +150,8 @@
     // timestamp is an epoch number associated with the last status update.
     // It's set with a nanosecond granularity.
     google.protobuf.Timestamp timestamp = 2;
+    // version is the Metropolis version that this node is running.
+    version.spec.Version version = 4;
 }
 
 // The Cluster Directory is information about the network addressing of nodes