diff --git a/.gitignore b/.gitignore
index 7d908b7..383eadd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ riderModule.iml
/_ReSharper.Caches/
config.ini
*.DotSettings.user
+.version
diff --git a/Catalogger.Backend/Bot/Commands/MetaCommands.cs b/Catalogger.Backend/Bot/Commands/MetaCommands.cs
index 8f516f1..1887507 100644
--- a/Catalogger.Backend/Bot/Commands/MetaCommands.cs
+++ b/Catalogger.Backend/Bot/Commands/MetaCommands.cs
@@ -176,7 +176,7 @@ public class MetaCommands(
var embed = new EmbedBuilder()
.WithColour(DiscordUtils.Purple)
.WithFooter(
- $"{RuntimeInformation.FrameworkDescription} on {RuntimeInformation.RuntimeIdentifier}"
+ $"{BuildInfo.Version}, {RuntimeInformation.FrameworkDescription} on {RuntimeInformation.RuntimeIdentifier}"
)
.WithCurrentTimestamp();
embed.AddField(
@@ -209,8 +209,7 @@ public class MetaCommands(
"Numbers",
$"{CataloggerMetrics.MessagesStored.Value:N0} messages "
+ $"from {guildCache.Size:N0} servers\n"
- + $"Cached {channelCache.Size:N0} channels, {roleCache.Size:N0} roles, {emojiCache.Size:N0} emojis",
- false
+ + $"Cached {channelCache.Size:N0} channels, {roleCache.Size:N0} roles, {emojiCache.Size:N0} emojis"
);
IEmbed[] embeds = [embed.Build().GetOrThrow()];
diff --git a/Catalogger.Backend/BuildInfo.cs b/Catalogger.Backend/BuildInfo.cs
new file mode 100644
index 0000000..95ca05f
--- /dev/null
+++ b/Catalogger.Backend/BuildInfo.cs
@@ -0,0 +1,46 @@
+// Copyright (C) 2021-present sam (starshines.gay)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published
+// by the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+namespace Catalogger.Backend;
+
+public static class BuildInfo
+{
+ public static string Hash { get; private set; } = "(unknown)";
+ public static string Version { get; private set; } = "(unknown)";
+
+ public static async Task ReadBuildInfo()
+ {
+ await using var stream = typeof(BuildInfo).Assembly.GetManifestResourceStream("version");
+ if (stream == null)
+ return;
+
+ using var reader = new StreamReader(stream);
+ var data = (await reader.ReadToEndAsync()).Trim().Split("\n");
+ if (data.Length < 3)
+ return;
+
+ Hash = data[0];
+ var dirty = data[2] == "dirty";
+
+ var versionData = data[1].Split("-");
+ if (versionData.Length < 3)
+ return;
+ Version = versionData[0];
+ if (versionData[1] != "0" || dirty)
+ Version += $"+{versionData[2]}";
+ if (dirty)
+ Version += ".dirty";
+ }
+}
diff --git a/Catalogger.Backend/Catalogger.Backend.csproj b/Catalogger.Backend/Catalogger.Backend.csproj
index b6fd02c..1e06c3d 100644
--- a/Catalogger.Backend/Catalogger.Backend.csproj
+++ b/Catalogger.Backend/Catalogger.Backend.csproj
@@ -7,8 +7,14 @@
true
+
+
+
+
+
+
diff --git a/Catalogger.Backend/Extensions/StartupExtensions.cs b/Catalogger.Backend/Extensions/StartupExtensions.cs
index 9776395..a84e232 100644
--- a/Catalogger.Backend/Extensions/StartupExtensions.cs
+++ b/Catalogger.Backend/Extensions/StartupExtensions.cs
@@ -186,9 +186,15 @@ public static class StartupExtensions
public static async Task Initialize(this WebApplication app)
{
+ await BuildInfo.ReadBuildInfo();
+
await using var scope = app.Services.CreateAsyncScope();
var logger = scope.ServiceProvider.GetRequiredService().ForContext();
- logger.Information("Starting Catalogger.NET");
+ logger.Information(
+ "Starting Catalogger.NET {Version} ({Hash})",
+ BuildInfo.Version,
+ BuildInfo.Hash
+ );
CataloggerMetrics.Startup = scope
.ServiceProvider.GetRequiredService()
diff --git a/build_info.sh b/build_info.sh
new file mode 100755
index 0000000..c644a3c
--- /dev/null
+++ b/build_info.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+(git rev-parse HEAD &&
+ git describe --tags --always --long &&
+ if test -z "$(git ls-files --exclude-standard --modified --deleted --others)"; then echo clean; else echo dirty; fi) > ../.version