-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathBuildTimestamp.cs
More file actions
61 lines (56 loc) · 2.27 KB
/
Copy pathBuildTimestamp.cs
File metadata and controls
61 lines (56 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System.Reflection;
namespace SpawnDev.ILGPU.Demo;
/// <summary>
/// Build timestamp and library version info for the test page header.
/// Reads the BuildTimestamp metadata injected by MSBuild at compile time
/// and collects referenced SpawnDev library versions.
/// </summary>
internal static class BuildTimestamp
{
public static readonly string Value = GetBuildTimestamp();
public static readonly string LibraryVersions = GetLibraryVersions();
/// <summary>
/// Full build info string for copy-to-clipboard: build time + all SpawnDev library versions.
/// </summary>
public static readonly string FullBuildInfo = $"Build: {Value}\n{LibraryVersions}";
private static string GetBuildTimestamp()
{
try
{
var assembly = typeof(BuildTimestamp).Assembly;
var metadata = assembly
.GetCustomAttributes(typeof(AssemblyMetadataAttribute), false)
.OfType<AssemblyMetadataAttribute>();
foreach (var meta in metadata)
{
if (meta.Key == "BuildTimestamp")
return meta.Value ?? "unknown";
}
return assembly.GetName().Version?.ToString() ?? "unknown";
}
catch { return "unknown"; }
}
private static string GetLibraryVersions()
{
try
{
var lines = new List<string>();
var assemblies = AppDomain.CurrentDomain.GetAssemblies()
.Where(a => a.GetName().Name?.StartsWith("SpawnDev.") == true
|| a.GetName().Name?.StartsWith("ILGPU") == true)
.OrderBy(a => a.GetName().Name);
foreach (var asm in assemblies)
{
var name = asm.GetName();
var infoVer = asm.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion;
var ver = infoVer ?? name.Version?.ToString() ?? "?";
// Trim git hash suffix if present (e.g., "4.9.2-rc.4+abc123")
var plusIdx = ver.IndexOf('+');
if (plusIdx > 0) ver = ver.Substring(0, plusIdx);
lines.Add($"{name.Name} {ver}");
}
return string.Join("\n", lines);
}
catch { return "unknown"; }
}
}