Skip to content
This repository has been archived by the owner on Mar 22, 2023. It is now read-only.

Commit

Permalink
BuildController now uses GitHub releases to determine /stable and /pr…
Browse files Browse the repository at this point in the history
…erelease build versions. Cached for 24 hours.
  • Loading branch information
retailcoder committed May 20, 2019
1 parent c5f72b9 commit 1a1eaa2
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 42 deletions.
4 changes: 2 additions & 2 deletions RubberduckWeb/RubberduckWeb/Controllers/BuildController.cs
Expand Up @@ -17,7 +17,7 @@ public ActionResult Index()
return View("Version");
}

public ActionResult Version(string id = null)
public ActionResult Version(string id)
{
var version = string.Empty;
if (RubberduckReleaseBuilds.ShouldInvalidate)
Expand All @@ -26,7 +26,7 @@ public ActionResult Version(string id = null)
task.Wait();
}

if (string.IsNullOrWhiteSpace(id))
if (string.Equals(id, "prerelease", StringComparison.OrdinalIgnoreCase))
{
version = RubberduckReleaseBuilds.LatestPreReleaseVersion.ToString();
}
Expand Down
40 changes: 0 additions & 40 deletions RubberduckWeb/RubberduckWeb/Models/RubberduckInspections.cs
Expand Up @@ -2,52 +2,12 @@
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml.Linq;
using Octokit;

namespace RubberduckWeb.Models
{
public static class RubberduckReleaseBuilds
{
private const string GitHubOrg = "rubberduck-vba";
private const string RepositoryName = "Rubberduck";

private static readonly string VersionPattern = @"v(?<major>\d+)\.(?<minor>\d+)\.(?<revision>\d+)\.(?<build>\d+)";

private static DateTime _lastInvalalidated;

public static async Task InvalidateAsync()
{
var client = new GitHubClient(new ProductHeaderValue("rubberduck-vba_RubberduckWEB"));
var releases = await client.Repository.Release.GetAll(GitHubOrg, RepositoryName);
var stable = releases.FirstOrDefault(e => !e.Prerelease);
var pre = releases.FirstOrDefault(e => e.Prerelease);

var stableVersion = Regex.Match(stable.Name, VersionPattern);
LatestStableVersion = new Version(
int.Parse(stableVersion.Groups["major"].Value),
int.Parse(stableVersion.Groups["minor"].Value),
int.Parse(stableVersion.Groups["revision"].Value),
int.Parse(stableVersion.Groups["build"].Value));

var preVersion = Regex.Match(pre.Name, VersionPattern);
LatestPreReleaseVersion = new Version(
int.Parse(preVersion.Groups["major"].Value),
int.Parse(preVersion.Groups["minor"].Value),
int.Parse(preVersion.Groups["revision"].Value),
int.Parse(preVersion.Groups["build"].Value));

_lastInvalalidated = DateTime.UtcNow;
}

public static Version LatestStableVersion { get; private set; }
public static Version LatestPreReleaseVersion { get; private set; }

public static bool ShouldInvalidate => _lastInvalalidated == default(DateTime) || DateTime.UtcNow > _lastInvalalidated.AddDays(1);
}

public static class RubberduckInspections
{
private const string GitHubOrg = "rubberduck-vba";
Expand Down
53 changes: 53 additions & 0 deletions RubberduckWeb/RubberduckWeb/Models/RubberduckReleaseBuilds.cs
@@ -0,0 +1,53 @@
using System;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Octokit;

namespace RubberduckWeb.Models
{
public static class RubberduckReleaseBuilds
{
private const string GitHubOrg = "rubberduck-vba";
private const string RepositoryName = "Rubberduck";

private static readonly string VersionPattern = @"v(?<major>\d+)\.(?<minor>\d+)\.(?<revision>\d+)\.?(?<build>\d+)?";

public static async Task InvalidateAsync()
{
var client = new GitHubClient(new ProductHeaderValue("rubberduck-vba_RubberduckWEB"));
var releases = await client.Repository.Release.GetAll(GitHubOrg, RepositoryName);
var stable = releases.FirstOrDefault(e => !e.Prerelease);
if (stable != default(Release))
{
var stableVersion = Regex.Match(stable.TagName, VersionPattern);
LatestStableVersion = new Version(
int.Parse(stableVersion.Groups["major"].Value),
int.Parse(stableVersion.Groups["minor"].Value),
int.Parse(stableVersion.Groups["revision"].Value),
stableVersion.Groups["build"].Success ? int.Parse(stableVersion.Groups["build"].Value) : 0);

LastInvalidated = DateTime.UtcNow;
}
var pre = releases.FirstOrDefault(e => e.Prerelease);
if (pre != default(Release))
{
var preVersion = Regex.Match(pre.TagName, VersionPattern);
LatestPreReleaseVersion = new Version(
int.Parse(preVersion.Groups["major"].Value),
int.Parse(preVersion.Groups["minor"].Value),
int.Parse(preVersion.Groups["revision"].Value),
preVersion.Groups["build"].Success ? int.Parse(preVersion.Groups["build"].Value) : 0);

LastInvalidated = DateTime.UtcNow;
}
}

public static Version LatestStableVersion { get; private set; }
public static Version LatestPreReleaseVersion { get; private set; }

public static DateTime LastInvalidated { get; private set; }

public static bool ShouldInvalidate => LastInvalidated == default(DateTime) || DateTime.UtcNow > LastInvalidated.AddDays(1);
}
}
1 change: 1 addition & 0 deletions RubberduckWeb/RubberduckWeb/RubberduckWeb.csproj
Expand Up @@ -242,6 +242,7 @@
<Compile Include="Models\IndenterSettingsModel.cs" />
<Compile Include="Models\InspectionInfo.cs" />
<Compile Include="Models\RubberduckInspections.cs" />
<Compile Include="Models\RubberduckReleaseBuilds.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="VBA\FormattedCodeBlockBuilder.cs" />
</ItemGroup>
Expand Down

0 comments on commit 1a1eaa2

Please sign in to comment.