From 5ac607fd0a9b7bad98bde34da9038947c69fbd79 Mon Sep 17 00:00:00 2001 From: sam Date: Thu, 31 Oct 2024 01:26:50 +0100 Subject: [PATCH] feat: show bot version on startup and in /catalogger ping --- .gitignore | 1 + .../Bot/Commands/MetaCommands.cs | 5 +- Catalogger.Backend/BuildInfo.cs | 46 +++++++++++++++++++ Catalogger.Backend/Catalogger.Backend.csproj | 6 +++ .../Extensions/StartupExtensions.cs | 8 +++- build_info.sh | 4 ++ 6 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 Catalogger.Backend/BuildInfo.cs create mode 100755 build_info.sh 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