Skip to content

Commit 41992c2

Browse files
authored
Merge pull request #3 from ArgusMagnus/check-for-updates
Check for updates
2 parents 64afeef + 6aabf55 commit 41992c2

5 files changed

Lines changed: 70 additions & 7 deletions

File tree

.github/workflows/main.yml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
publish:
2020

2121
runs-on: windows-latest
22-
if: contains(github.ref, 'tags/v') # works only version tagged
22+
if: startsWith(github.ref, 'refs/tags/v') # works only version tagged
2323
needs: [build]
2424

2525
steps:
@@ -40,8 +40,11 @@ jobs:
4040
prerelease: false
4141
- name: Build
4242
run: |
43-
dotnet publish -c Release -r win-x86 -o ./publish/x86
44-
dotnet publish -c Release -r win-x64 -o ./publish/x64
43+
$version = "${{ github.ref }}"
44+
$version = $version.Substring(10)
45+
echo "::set-env name=RELEASE_TAG::$version"
46+
dotnet publish -c Release -r win-x86 -o ./publish/x86 -p:ReleaseTag=$version
47+
dotnet publish -c Release -r win-x64 -o ./publish/x64 -p:ReleaseTag=$version
4548
Compress-Archive -Path ./publish/* -DestinationPath ./publish/win.zip -CompressionLevel Optimal
4649
- name: Upload Release Asset
4750
id: upload-release-asset
@@ -51,5 +54,5 @@ jobs:
5154
with:
5255
upload_url: ${{ steps.create_release.outputs.upload_url }}
5356
asset_path: ./publish/win.zip
54-
asset_name: ${{ github.ref }}-win.zip
57+
asset_name: CSharpScriptRunner-${{ env.RELEASE_TAG }}-win.zip
5558
asset_content_type: application/zip

CSharpScriptRunner.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<TargetFramework>netcoreapp3.1</TargetFramework>
66
<UseWPF>true</UseWPF>
77
<UseWindowsForms>true</UseWindowsForms>
8+
<ReleaseTag>dev</ReleaseTag>
89
</PropertyGroup>
910

1011
<ItemGroup>
@@ -33,6 +34,7 @@ namespace CSharpScriptRunner
3334
{
3435
public const string RuntimeIdentifier = "$(RuntimeIdentifier)"%3B
3536
public const string Configuration = "$(Configuration)"%3B
37+
public const string ReleaseTag = "$(ReleaseTag)"%3B
3638
}
3739
}
3840
</MyTextLines>
@@ -45,6 +47,7 @@ namespace CSharpScriptRunner
4547
{
4648
public const string RuntimeIdentifier = "win-x64"%3B
4749
public const string Configuration = "$(Configuration)"%3B
50+
public const string ReleaseTag = "$(ReleaseTag)"%3B
4851
}
4952
}
5053
</MyTextLines>

Program.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ static class Program
3434
[STAThread]
3535
static void Main(string[] args)
3636
{
37+
Console.WriteLine($"{nameof(CSharpScriptRunner)}, {BuildInfo.ReleaseTag}");
38+
3739
if (args == null || args.Length == 0)
3840
return;
3941

@@ -169,7 +171,7 @@ static bool TryBuild(string scriptFile, string assemblyFile, string hashFile, st
169171
{
170172
config = null;
171173
var lines = File.ReadAllLines(scriptFile);
172-
Console.WriteLine($"Compiling script {scriptFile}...");
174+
Console.WriteLine($"Compiling script '{scriptFile}'...");
173175
var options = ScriptOptions.Default
174176
.WithEmitDebugInformation(true)
175177
.WithFilePath(scriptFile)
@@ -256,6 +258,11 @@ static void RunScript(string[] args)
256258

257259
if (!TryGetCache(assemblyFile, hashFile, configFile, scriptHash, out var config))
258260
{
261+
// Check for new release only when compiling
262+
var newRelease = Updates.CheckForNewRelease().Result;
263+
if (newRelease != default)
264+
Console.WriteLine($"A new release of {nameof(CSharpScriptRunner)} ({newRelease.Version}) is available at {newRelease.Url}");
265+
259266
if (!TryBuild(scriptPath, assemblyFile, hashFile, configFile, scriptHash, buildReferences, out config))
260267
return;
261268
}

Updates.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using System.Net.Http;
2+
using System.Net.Http.Headers;
3+
using System.Threading.Tasks;
4+
using System.Text.Json;
5+
using System.Text.Json.Serialization;
6+
using System.Collections.Generic;
7+
using System;
8+
9+
namespace CSharpScriptRunner
10+
{
11+
sealed class ReleaseInfo
12+
{
13+
[JsonPropertyName("tag_name")]
14+
public string Version { get; set; }
15+
16+
[JsonPropertyName("html_url")]
17+
public string Url { get; set; }
18+
}
19+
20+
static class Updates
21+
{
22+
public static async Task<ReleaseInfo> CheckForNewRelease()
23+
{
24+
const string RequestUri = "https://api.github.com/repos/ArgusMagnus/CSharpScriptRunner/releases/latest";
25+
26+
if (!BuildInfo.ReleaseTag.StartsWith('v') || !Version.TryParse(BuildInfo.ReleaseTag.Substring(1), out var version))
27+
return default;
28+
29+
using (var httpClient = new HttpClient())
30+
{
31+
httpClient.DefaultRequestHeaders.Accept.Clear();
32+
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
33+
httpClient.DefaultRequestHeaders.Add("User-Agent", "CSharpScriptRunner");
34+
HttpResponseMessage response;
35+
try { response = await httpClient.GetAsync(RequestUri); }
36+
catch { return default; }
37+
if (!response.IsSuccessStatusCode)
38+
return default;
39+
40+
var release = JsonSerializer.Deserialize<ReleaseInfo>(await response.Content.ReadAsByteArrayAsync());
41+
if (string.IsNullOrEmpty(release.Version) || string.IsNullOrEmpty(release.Url) || !release.Version.StartsWith('v') || !Version.TryParse(release.Version.Substring(1), out var releaseVersion))
42+
return default;
43+
44+
if (version < releaseVersion)
45+
return release;
46+
}
47+
return default;
48+
}
49+
}
50+
}

publish.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
dotnet publish -c Release -r win-x86 -o publish\x86
2-
dotnet publish -c Release -r win-x64 -o publish\x64
1+
dotnet publish -c Release -r win-x86 -o publish\x86 -p:ReleaseTag=dev
2+
dotnet publish -c Release -r win-x64 -o publish\x64 -p:ReleaseTag=dev

0 commit comments

Comments
 (0)