Only upload the very latest full release in legacy RELEASES

This commit is contained in:
Caelan Sayler
2024-05-16 21:39:28 +01:00
parent 1c376f95ee
commit b01100b8bb
3 changed files with 27 additions and 16 deletions

View File

@@ -115,7 +115,6 @@ public class GitHubRepository : SourceRepository<GitHubDownloadOptions, GithubSo
var feed = new VelopackAssetFeed {
Assets = build.GetReleaseEntries().ToArray(),
};
var entries = build.GetReleaseEntries();
var json = ReleaseEntryHelper.GetAssetFeedJson(feed);
await RetryAsync(async () => {
@@ -124,12 +123,10 @@ public class GitHubRepository : SourceRepository<GitHubDownloadOptions, GithubSo
}, "Uploading " + releasesFileName);
if (options.Channel == ReleaseEntryHelper.GetDefaultChannel(RuntimeOs.Windows)) {
var ms = new MemoryStream();
#pragma warning disable CS0618 // Type or member is obsolete
ReleaseEntry.WriteReleaseFile(entries.Select(ReleaseEntry.FromVelopackAsset), ms);
#pragma warning restore CS0618 // Type or member is obsolete
var legacyReleasesContent = ReleaseEntryHelper.GetLegacyMigrationReleaseFeedString(feed);
var legacyReleasesBytes = Encoding.UTF8.GetBytes(legacyReleasesContent);
await RetryAsync(async () => {
var data = new ReleaseAssetUpload("RELEASES", "application/octet-stream", new MemoryStream(ms.ToArray()), TimeSpan.FromMinutes(1));
var data = new ReleaseAssetUpload("RELEASES", "application/octet-stream", new MemoryStream(legacyReleasesBytes), TimeSpan.FromMinutes(1));
await client.Repository.Release.UploadAsset(release, data, CancellationToken.None);
}, "Uploading legacy RELEASES (compatibility)");
}

View File

@@ -1,4 +1,4 @@
using System.Text;
using System.Text;
using Microsoft.Extensions.Logging;
using Velopack.Packaging;
@@ -85,21 +85,19 @@ public abstract class ObjectRepository<TDown, TUp, TClient> : DownRepository<TDo
await UploadObject(client, Path.GetFileName(asset), new FileInfo(asset), true, noCache: false);
}
var newReleaseFeed = new VelopackAssetFeed { Assets = releaseEntries };
using var _1 = Utility.GetTempFileName(out var tmpReleases);
File.WriteAllText(tmpReleases, ReleaseEntryHelper.GetAssetFeedJson(new VelopackAssetFeed { Assets = releaseEntries }));
File.WriteAllText(tmpReleases, ReleaseEntryHelper.GetAssetFeedJson(newReleaseFeed));
var releasesName = Utility.GetVeloReleaseIndexName(options.Channel);
await UploadObject(client, releasesName, new FileInfo(tmpReleases), true, noCache: true);
#pragma warning disable CS0612 // Type or member is obsolete
#pragma warning disable CS0618 // Type or member is obsolete
var legacyKey = Utility.GetReleasesFileName(options.Channel);
using var _2 = Utility.GetTempFileName(out var tmpReleases2);
using (var fs = File.Create(tmpReleases2)) {
ReleaseEntry.WriteReleaseFile(releaseEntries.Select(ReleaseEntry.FromVelopackAsset).Where(entry => !entry.IsDelta), fs);
}
await UploadObject(client, legacyKey, new FileInfo(tmpReleases2), true, noCache: true);
#pragma warning restore CS0618 // Type or member is obsolete
#pragma warning restore CS0612 // Type or member is obsolete
using var _2 = Utility.GetTempFileName(out var tmpReleases2);
File.WriteAllText(tmpReleases2, ReleaseEntryHelper.GetLegacyMigrationReleaseFeedString(newReleaseFeed));
await UploadObject(client, legacyKey, new FileInfo(tmpReleases2), true, noCache: true);
if (toDelete.Length > 0) {
Log.Info($"Retention policy about to delete {toDelete.Length} release(s)...");

View File

@@ -1,4 +1,5 @@
using Microsoft.Extensions.Logging;
using System.Text;
using Microsoft.Extensions.Logging;
using NuGet.Versioning;
using Velopack.Json;
using Velopack.NuGet;
@@ -137,6 +138,21 @@ public class ReleaseEntryHelper
return SimpleJson.SerializeObject(feed);
}
public static string GetLegacyMigrationReleaseFeedString(VelopackAssetFeed feed)
{
var newestRelease = feed.Assets
.OrderByDescending(f => f.Version)
.Where(f => f.Type == VelopackAssetType.Full)
.FirstOrDefault();
var ms = new MemoryStream();
#pragma warning disable CS0618 // Type or member is obsolete
ReleaseEntry.WriteReleaseFile([ReleaseEntry.FromVelopackAsset(newestRelease)], ms);
#pragma warning restore CS0618 // Type or member is obsolete
return Encoding.UTF8.GetString(ms.ToArray());
}
public static string GetSuggestedReleaseName(string id, string version, string channel, bool delta)
{
var suffix = GetUniqueAssetSuffix(channel);