Skip to content

Commit

Permalink
Add build metadata for diagnostics, update checks
Browse files Browse the repository at this point in the history
is this actually gonna work? uhhhh maybe idk
  • Loading branch information
pizzaboxer committed Jun 27, 2023
1 parent 17c36cc commit 2258000
Show file tree
Hide file tree
Showing 12 changed files with 136 additions and 16 deletions.
15 changes: 11 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,33 @@ jobs:
strategy:
matrix:
configuration: [Debug, Release]
platform: [x64]

runs-on: windows-latest

steps:
- uses: actions/checkout@v3
with:
submodules: true

- uses: actions/setup-dotnet@v3
with:
dotnet-version: '6.x'

- name: Restore dependencies
run: dotnet restore

- name: Build
run: dotnet build --no-restore

- name: Publish
run: dotnet publish -p:PublishSingleFile=true -r win-${{ matrix.platform }} -c ${{ matrix.configuration }} --self-contained false .\Bloxstrap\Bloxstrap.csproj
run: dotnet publish -p:PublishSingleFile=true -p:CommitHash=${{ github.sha }} -p:CommitRef=${{ github.ref_type }}/${{ github.ref_name }} -r win-x64 -c ${{ matrix.configuration }} --self-contained false .\Bloxstrap\Bloxstrap.csproj

- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: Bloxstrap (${{ matrix.configuration }}, ${{ matrix.platform }})
name: Bloxstrap (${{ matrix.configuration }}, x64)
path: |
.\Bloxstrap\bin\${{ matrix.configuration }}\net6.0-windows\win-${{ matrix.platform }}\publish\*
.\Bloxstrap\bin\${{ matrix.configuration }}\net6.0-windows\win-x64\publish\*
release:
needs: build
Expand All @@ -40,9 +45,11 @@ jobs:
with:
name: Bloxstrap (Release, x64)
path: x64

- name: Rename binaries
run: |
mv x64/Bloxstrap.exe Bloxstrap-${{ github.ref_name }}-x64.exe
- name: Release
uses: softprops/action-gh-release@v1
with:
Expand Down
7 changes: 7 additions & 0 deletions Bloxstrap/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

using Bloxstrap.Extensions;
using Bloxstrap.Models;
using Bloxstrap.Models.Attributes;
using Bloxstrap.UI.BootstrapperDialogs;
using Bloxstrap.UI.Menu.Views;
using Bloxstrap.Utility;
Expand Down Expand Up @@ -44,6 +45,7 @@ public partial class App : Application
public static bool IsMenuLaunch { get; private set; } = false;
public static string[] LaunchArgs { get; private set; } = null!;

public static BuildMetadataAttribute BuildMetadata => Assembly.GetExecutingAssembly().GetCustomAttribute<BuildMetadataAttribute>()!;
public static string Version = Assembly.GetExecutingAssembly().GetName().Version!.ToString()[..^2];

// singletons
Expand Down Expand Up @@ -118,6 +120,11 @@ protected override void OnStartup(StartupEventArgs e)

Logger.WriteLine($"[App::OnStartup] Starting {ProjectName} v{Version}");

if (String.IsNullOrEmpty(BuildMetadata.CommitHash))
Logger.WriteLine($"[App::OnStartup] Compiled {BuildMetadata.Timestamp.ToFriendlyString()} from {BuildMetadata.Machine}");
else
Logger.WriteLine($"[App::OnStartup] Compiled {BuildMetadata.Timestamp.ToFriendlyString()} from commit {BuildMetadata.CommitHash} ({BuildMetadata.CommitRef})");

// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Expand Down
9 changes: 9 additions & 0 deletions Bloxstrap/Bloxstrap.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,13 @@
<ProjectReference Include="..\wpfui\src\Wpf.Ui\Wpf.Ui.csproj" />
</ItemGroup>

<ItemGroup>
<AssemblyAttribute Include="Bloxstrap.Models.Attributes.BuildMetadataAttribute">
<_Parameter1>$([System.DateTime]::UtcNow.ToString("s"))Z</_Parameter1>
<_Parameter2>$(COMPUTERNAME)\$(USERNAME)</_Parameter2>
<_Parameter3>$(CommitHash)</_Parameter3>
<_Parameter4>$(CommitRef)</_Parameter4>
</AssemblyAttribute>
</ItemGroup>

</Project>
19 changes: 14 additions & 5 deletions Bloxstrap/Bootstrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -576,25 +576,34 @@ private async Task CheckForUpdates()
return;
}

string currentVersion = $"{App.ProjectName} v{App.Version}";

App.Logger.WriteLine($"[Bootstrapper::CheckForUpdates] Checking for {App.ProjectName} updates...");

var releaseInfo = await Utilities.GetJson<GithubRelease>($"https://api.github.com/repos/{App.ProjectRepository}/releases/latest");

if (releaseInfo?.Assets is null || currentVersion == releaseInfo.Name)
if (releaseInfo is null || releaseInfo.Assets is null)
{
App.Logger.WriteLine($"[Bootstrapper::CheckForUpdates] No updates found");
return;
}

int numCurrentVersion = Utilities.VersionToNumber(App.Version);
int numLatestVersion = Utilities.VersionToNumber(releaseInfo.TagName);

// check if we aren't using a deployed build, so we can update to one if a new version comes out
if (numCurrentVersion == numLatestVersion && App.BuildMetadata.CommitRef.StartsWith("tag") || numCurrentVersion > numLatestVersion)
{
App.Logger.WriteLine($"[Bootstrapper::CheckForUpdates] No updates found");
return;
}


SetStatus($"Getting the latest {App.ProjectName}...");

// 64-bit is always the first option
GithubReleaseAsset asset = releaseInfo.Assets[0];
string downloadLocation = Path.Combine(Directories.LocalAppData, "Temp", asset.Name);

App.Logger.WriteLine($"[Bootstrapper::CheckForUpdates] Downloading {releaseInfo.Name}...");
App.Logger.WriteLine($"[Bootstrapper::CheckForUpdates] Downloading {releaseInfo.TagName}...");

if (!File.Exists(downloadLocation))
{
Expand All @@ -604,7 +613,7 @@ private async Task CheckForUpdates()
await response.Content.CopyToAsync(fileStream);
}

App.Logger.WriteLine($"[Bootstrapper::CheckForUpdates] Starting {releaseInfo.Name}...");
App.Logger.WriteLine($"[Bootstrapper::CheckForUpdates] Starting {releaseInfo.TagName}...");

ProcessStartInfo startInfo = new()
{
Expand Down
12 changes: 12 additions & 0 deletions Bloxstrap/Extensions/DateTimeEx.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;

namespace Bloxstrap.Extensions
{
static class DateTimeEx
{
public static string ToFriendlyString(this DateTime dateTime)
{
return dateTime.ToString("dddd, d MMMM yyyy 'at' h:mm:ss tt", App.CultureFormat);
}
}
}
4 changes: 2 additions & 2 deletions Bloxstrap/Logger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ public void Initialize(string filename)

public void WriteLine(string message)
{
string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss'Z'");
string timestamp = DateTime.UtcNow.ToString("s") + "Z";
string outcon = $"{timestamp} {message}";
string outlog = outcon.Replace(Directories.UserProfile, "<UserProfileFolder>");
string outlog = outcon.Replace(Directories.UserProfile, "%UserProfile%");

Debug.WriteLine(outcon);
WriteToLog(outlog);
Expand Down
21 changes: 21 additions & 0 deletions Bloxstrap/Models/Attributes/CompileTimeInfoAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;

namespace Bloxstrap.Models.Attributes
{
[AttributeUsage(AttributeTargets.Assembly)]
public class BuildMetadataAttribute : Attribute
{
public DateTime Timestamp { get; set; }
public string Machine { get; set; }
public string CommitHash { get; set; }
public string CommitRef { get; set; }

public BuildMetadataAttribute(string timestamp, string machine, string commitHash, string commitRef)
{
Timestamp = DateTime.Parse(timestamp).ToLocalTime();
Machine = machine;
CommitHash = commitHash;
CommitRef = commitRef;
}
}
}
16 changes: 15 additions & 1 deletion Bloxstrap/UI/Menu/ViewModels/AboutViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
namespace Bloxstrap.UI.Menu.ViewModels
using System;
using System.Windows;

using Bloxstrap.Extensions;
using Bloxstrap.Models.Attributes;

namespace Bloxstrap.UI.Menu.ViewModels
{
public class AboutViewModel
{
public string Version => $"Version {App.Version}";

public BuildMetadataAttribute BuildMetadata => App.BuildMetadata;

public string BuildTimestamp => BuildMetadata.Timestamp.ToFriendlyString();
public string BuildCommitHashUrl => $"https://github.com/{App.ProjectRepository}/commit/{BuildMetadata.CommitHash}";

public Visibility BuildInformationVisibility => BuildMetadata.CommitRef.StartsWith("tag") ? Visibility.Collapsed : Visibility.Visible;
public Visibility BuildCommitVisibility => String.IsNullOrEmpty(BuildMetadata.CommitHash) ? Visibility.Collapsed : Visibility.Visible;
}
}
3 changes: 2 additions & 1 deletion Bloxstrap/UI/Menu/ViewModels/InstallationViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using CommunityToolkit.Mvvm.Input;

using Bloxstrap.Enums;
using Bloxstrap.Extensions;
using Bloxstrap.Models;

namespace Bloxstrap.UI.Menu.ViewModels
Expand Down Expand Up @@ -50,7 +51,7 @@ private async Task LoadChannelDeployInfo(string channel)
{
Version = info.Version,
VersionGuid = info.VersionGuid,
Timestamp = info.Timestamp?.ToString("dddd, d MMMM yyyy 'at' h:mm:ss tt", App.CultureFormat)!
Timestamp = info.Timestamp?.ToFriendlyString()!
};

OnPropertyChanged(nameof(ChannelDeployInfo));
Expand Down
35 changes: 35 additions & 0 deletions Bloxstrap/UI/Menu/Views/Pages/AboutPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,41 @@
<ui:Anchor Margin="4,16,0,0" Content="Discord help server" Icon="Chat48" NavigateUri="https://discord.gg/nKjV3mGq6R" />
</StackPanel>

<StackPanel Visibility="{Binding BuildInformationVisibility, Mode=OneTime}">
<TextBlock Text="Build Information" FontWeight="Medium" FontSize="20" Margin="0,16,0,0" />
<TextBlock Text="Using an unreleased version, I see?" TextWrapping="Wrap" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />

<Grid Column="0" Margin="0,8,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

<TextBlock Grid.Row="0" Grid.Column="0" Margin="0,4,16,4" FontSize="14" FontWeight="Medium" Text="Timestamp" />
<TextBlock Grid.Row="0" Grid.Column="1" Margin="0,0,0,4" VerticalAlignment="Bottom" Text="{Binding BuildTimestamp, Mode=OneTime}" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />

<TextBlock Grid.Row="1" Grid.Column="0" Margin="0,4,16,4" FontSize="14" FontWeight="Medium" Text="Machine" />
<TextBlock Grid.Row="1" Grid.Column="1" Margin="0,0,0,4" VerticalAlignment="Bottom" Text="{Binding BuildMetadata.Machine, Mode=OneTime}" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />

<TextBlock Grid.Row="2" Grid.Column="0" Margin="0,4,16,4" FontSize="14" FontWeight="Medium" Text="Commit Hash" Visibility="{Binding BuildCommitVisibility, Mode=OneTime}" />
<TextBlock Grid.Row="2" Grid.Column="1" Margin="0,0,0,4" VerticalAlignment="Bottom" Foreground="{DynamicResource TextFillColorTertiaryBrush}" Visibility="{Binding BuildCommitVisibility, Mode=OneTime}">
<Hyperlink Foreground="{DynamicResource TextFillColorTertiaryBrush}" Command="models:GlobalViewModel.OpenWebpageCommand" CommandParameter="{Binding BuildCommitHashUrl, Mode=OneTime}">
<TextBlock Text="{Binding BuildMetadata.CommitHash, Mode=OneTime}" />
</Hyperlink>
</TextBlock>

<TextBlock Grid.Row="3" Grid.Column="0" Margin="0,4,16,4" FontSize="14" FontWeight="Medium" Text="Commit Ref" Visibility="{Binding BuildCommitVisibility, Mode=OneTime}" />
<TextBlock Grid.Row="3" Grid.Column="1" Margin="0,0,0,4" VerticalAlignment="Bottom" Text="{Binding BuildMetadata.CommitRef, Mode=OneTime}" Foreground="{DynamicResource TextFillColorTertiaryBrush}" Visibility="{Binding BuildCommitVisibility, Mode=OneTime}" />

</Grid>
</StackPanel>

<TextBlock Text="Contributors" FontWeight="Medium" FontSize="20" Margin="0,16,0,0" />
<TextBlock Text="These are the people who have made notable contributions to Bloxstrap, helping make it what it is." TextWrapping="Wrap" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
<Grid Column="0" Margin="0,8,0,0">
Expand Down
4 changes: 1 addition & 3 deletions Bloxstrap/Updater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,9 @@ public static void CheckInstalledVersion()
// 2.0.0 downloads updates to <BaseFolder>/Updates so lol
bool isAutoUpgrade = Environment.ProcessPath.StartsWith(Path.Combine(Directories.Base, "Updates")) || Environment.ProcessPath.StartsWith(Path.Combine(Directories.LocalAppData, "Temp"));

// if downloaded version doesn't match, replace installed version with downloaded version
FileVersionInfo currentVersionInfo = FileVersionInfo.GetVersionInfo(Environment.ProcessPath);
FileVersionInfo installedVersionInfo = FileVersionInfo.GetVersionInfo(Directories.Application);

if (installedVersionInfo.ProductVersion == currentVersionInfo.ProductVersion)
if (Utility.MD5Hash.FromFile(Environment.ProcessPath) == Utility.MD5Hash.FromFile(Directories.Application))
return;

MessageBoxResult result;
Expand Down
7 changes: 7 additions & 0 deletions Bloxstrap/Utilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,12 @@ public static long GetFreeDiskSpace(string path)
return default;
}
}

public static int VersionToNumber(string version)
{
// yes this is kinda stupid lol
version = version.Replace("v", "").Replace(".", "");
return Int32.Parse(version);
}
}
}

0 comments on commit 2258000

Please sign in to comment.