From 7f801b0f4a6a3082b3997134c12502adbf1e968e Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 7 Dec 2021 23:44:41 -0500 Subject: [PATCH 1/4] Fixed an issue with incorrect packages list - Only keeps RCs while they are still in rc state - Changes the path for the remote packages Closes #348 --- nvQuickSite/Controllers/PackageController.cs | 461 ++++++++++--------- 1 file changed, 233 insertions(+), 228 deletions(-) diff --git a/nvQuickSite/Controllers/PackageController.cs b/nvQuickSite/Controllers/PackageController.cs index d0a1550..e5bf981 100644 --- a/nvQuickSite/Controllers/PackageController.cs +++ b/nvQuickSite/Controllers/PackageController.cs @@ -1,92 +1,97 @@ -// Copyright (c) 2016-2020 nvisionative, Inc. -// -// This file is part of nvQuickSite. -// -// nvQuickSite is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// nvQuickSite is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with nvQuickSite. If not, see . - -namespace nvQuickSite.Controllers -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Net; - - using nvQuickSite.Models; - using Octokit; - using Serilog; - - /// - /// Manages packages. - /// - public static class PackageController - { - /// - /// Gets a value indicating whether the system can access the GitHub repository. - /// - internal static bool IsOnline - { - get - { - bool canRead; - try - { - using (var client = new WebClient()) - { - canRead = client.OpenRead("https://github.com/nvisionative/nvQuickSite").CanRead; - Log.Logger.Information("Internet appears to be " + (canRead ? "online" : "offline")); - return canRead; - } - } - catch (WebException ex) - { - Log.Logger.Information("Internet appears offline"); - Log.Logger.Error(ex, "Unexpected error occurred while checking internet access to GitHub repository"); - return false; - } - } - } - - /// - /// Gets the list of packages available. - /// - /// An enumeration of packages. - public static IEnumerable GetPackageList() - { - var localPackages = GetLocalPackages(); - var packages = localPackages.ToList(); - if (PackageController.IsOnline) - { - var remotePackages = GetRemotePackages(); - if (remotePackages.Any()) - { - packages = localPackages.Where(p => p.keep == true).ToList(); - foreach (var package in remotePackages) - { - if (packages.SingleOrDefault(p => p.did == package.did && p.version == package.version) == null) - { - packages.Add(package); - } - } - } - - var ghPackages = GetGitHubPackages(); - if (ghPackages.Any()) - { - // Deduplicate exising packages to be safe and fix users that already have duplicates in packages.json - packages = packages.GroupBy(p => p.version).Select(p => p.First()).ToList(); - +// Copyright (c) 2016-2020 nvisionative, Inc. +// +// This file is part of nvQuickSite. +// +// nvQuickSite is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// nvQuickSite is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with nvQuickSite. If not, see . + +namespace nvQuickSite.Controllers +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + + using nvQuickSite.Models; + using Octokit; + using Serilog; + + /// + /// Manages packages. + /// + public static class PackageController + { + /// + /// Gets a value indicating whether the system can access the GitHub repository. + /// + internal static bool IsOnline + { + get + { + bool canRead; + try + { + using (var client = new WebClient()) + { + canRead = client.OpenRead("https://github.com/nvisionative/nvQuickSite").CanRead; + Log.Logger.Information("Internet appears to be " + (canRead ? "online" : "offline")); + return canRead; + } + } + catch (WebException ex) + { + Log.Logger.Information("Internet appears offline"); + Log.Logger.Error(ex, "Unexpected error occurred while checking internet access to GitHub repository"); + return false; + } + } + } + + /// + /// Gets the list of packages available. + /// + /// An enumeration of packages. + public static IEnumerable GetPackageList() + { + var localPackages = GetLocalPackages(); + var packages = localPackages.ToList(); + if (PackageController.IsOnline) + { + var remotePackages = GetRemotePackages(); + if (remotePackages.Any()) + { + packages = localPackages.Where(p => p.keep == true).ToList(); + foreach (var package in remotePackages) + { + if (packages.SingleOrDefault(p => p.did == package.did && p.version == package.version) == null) + { + packages.Add(package); + } + } + } + + var ghPackages = GetGitHubPackages(); + if (ghPackages.Any()) + { + // Deduplicate exising packages to be safe and fix users that already have duplicates in packages.json + packages = packages.GroupBy(p => p.version).Select(p => p.First()).ToList(); + + // Remove the RCs from the local packages as they may be out of RC by now. + // Github will include them or not right after this clearing. + // Also we may publish multiple RCs and should never have more than one published at any time so we need only the latest shown. + packages.RemoveAll(p => p.did == "dnn-platform-rc"); + foreach (var ghPackage in ghPackages) { // Only add the github packages if they are not yet in the local packages.json file. @@ -94,142 +99,142 @@ public static IEnumerable GetPackageList() { packages.Add(ghPackage); } - } - } - } - - SaveLocalPackagesFile(packages); - Log.Logger.Information("Saved local packages file"); - Log.Logger.Debug("Saved packages to local packages file: {@packages}", packages); - return packages; - } - - private static IEnumerable GetLocalPackages() - { - var localPackages = new List(); - var packagesFile = Directory.GetCurrentDirectory() + @"\Downloads\packages.json"; - if (File.Exists(packagesFile)) - { - using (var sr = new StreamReader(packagesFile)) - { - var content = sr.ReadToEnd(); - localPackages = Newtonsoft.Json.JsonConvert.DeserializeObject>(content); - } - } - - Log.Logger.Information("Loaded local packages"); - Log.Logger.Debug("Loaded local packages: {@localPackages}", localPackages); - return localPackages; - } - - private static void SaveLocalPackagesFile(IEnumerable packages) - { - var downloadDirectory = GetDownloadDirectory(); - if (!Directory.Exists(downloadDirectory)) - { - Directory.CreateDirectory(downloadDirectory); - } - - var pfile = Directory.GetCurrentDirectory() + @"\Downloads\packages.json"; - using (var sw = new StreamWriter(pfile)) - { - sw.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(packages, Newtonsoft.Json.Formatting.Indented)); - } - } - - private static IEnumerable GetRemotePackages() - { - using (WebClient client = new WebClient()) - { - try - { - var url = "https://github.com/nvisionative/nvQuickSite/raw/master/nvQuickSite/data/packages.json"; - string result = client.DownloadString(url); - var packages = Newtonsoft.Json.JsonConvert.DeserializeObject>(result); - Log.Logger.Information("Loaded remote packages"); - Log.Logger.Debug("Loaded remote packages: {@packages}", packages); - return packages; - } - catch (WebException ex) - { - Log.Logger.Error(ex, "Unexpected error occurred retrieving remote packages."); - return new List(); - } - } - } - - private static string GetDownloadDirectory() - { - return Directory.GetCurrentDirectory() + @"\Downloads\"; - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage( - "Design", - "CA1031:Do not catch general exception types", - Justification = "On purpose so any exception here does not prevent using local packages.")] - private static IEnumerable GetGitHubPackages() - { - var packages = new List(); - try - { - var client = new GitHubClient(new ProductHeaderValue("nvQuickSite")); - var releases = client.Repository.Release.GetAll("dnnsoftware", "Dnn.Platform").Result; - - if (releases.Count > 0) - { - var index = 0; - foreach (Release release in releases) - { - var installPackage = release.Assets - .Where(a => - a.BrowserDownloadUrl.IndexOf("install", StringComparison.OrdinalIgnoreCase) > -1 && - a.BrowserDownloadUrl.IndexOf("dnn_platform", StringComparison.OrdinalIgnoreCase) > -1) - .FirstOrDefault(); - - var upgradePackage = release.Assets - .Where(a => - a.BrowserDownloadUrl.IndexOf("upgrade", StringComparison.OrdinalIgnoreCase) > -1 && - a.BrowserDownloadUrl.IndexOf("dnn_platform", StringComparison.OrdinalIgnoreCase) > -1) - .FirstOrDefault(); - - var ghPackage = new Package(); - - ghPackage.version = new System.Version(release.TagName.TrimStart('v').Split('-')[0]); - - if (index == 0 && - release.Name.IndexOf("rc", StringComparison.OrdinalIgnoreCase) >= 0 && - Properties.Settings.Default.ShowReleaseCandidates && - installPackage != null) - { - ghPackage.did = "dnn-platform-rc"; - ghPackage.name = "DNN Platform Release Candidate"; - ghPackage.url = installPackage.BrowserDownloadUrl; - ghPackage.upgradeurl = upgradePackage.BrowserDownloadUrl; - packages.Add(ghPackage); - } - else if (!release.Name.ToUpperInvariant().Contains("RC") && - installPackage != null) - { - ghPackage.did = "dnn-platform-" + ghPackage.version.Major.ToString(); - ghPackage.name = "DNN Platform " + ghPackage.version.Major.ToString(); - ghPackage.url = installPackage.BrowserDownloadUrl; - ghPackage.upgradeurl = upgradePackage.BrowserDownloadUrl; - packages.Add(ghPackage); - } - - index++; - } - } - - Log.Logger.Information("Retrieved DNN packages from GitHub"); - Log.Logger.Debug("Retrieved DNN packages from GitHub: {@packages}", packages); - return packages; - } - catch (Exception ex) - { - Log.Logger.Error(ex, "Unexpected error occurred retrieving DNN packages from GitHub"); - return packages; - } - } - } -} + } + } + } + + SaveLocalPackagesFile(packages); + Log.Logger.Information("Saved local packages file"); + Log.Logger.Debug("Saved packages to local packages file: {@packages}", packages); + return packages; + } + + private static IEnumerable GetLocalPackages() + { + var localPackages = new List(); + var packagesFile = Directory.GetCurrentDirectory() + @"\Downloads\packages.json"; + if (File.Exists(packagesFile)) + { + using (var sr = new StreamReader(packagesFile)) + { + var content = sr.ReadToEnd(); + localPackages = Newtonsoft.Json.JsonConvert.DeserializeObject>(content); + } + } + + Log.Logger.Information("Loaded local packages"); + Log.Logger.Debug("Loaded local packages: {@localPackages}", localPackages); + return localPackages; + } + + private static void SaveLocalPackagesFile(IEnumerable packages) + { + var downloadDirectory = GetDownloadDirectory(); + if (!Directory.Exists(downloadDirectory)) + { + Directory.CreateDirectory(downloadDirectory); + } + + var pfile = Directory.GetCurrentDirectory() + @"\Downloads\packages.json"; + using (var sw = new StreamWriter(pfile)) + { + sw.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(packages, Newtonsoft.Json.Formatting.Indented)); + } + } + + private static IEnumerable GetRemotePackages() + { + using (WebClient client = new WebClient()) + { + try + { + var url = "https://raw.githubusercontent.com/nvisionative/nvQuickSite/main/nvQuickSite/data/packages.json"; + string result = client.DownloadString(url); + var packages = Newtonsoft.Json.JsonConvert.DeserializeObject>(result); + Log.Logger.Information("Loaded remote packages"); + Log.Logger.Debug("Loaded remote packages: {@packages}", packages); + return packages; + } + catch (WebException ex) + { + Log.Logger.Error(ex, "Unexpected error occurred retrieving remote packages."); + return new List(); + } + } + } + + private static string GetDownloadDirectory() + { + return Directory.GetCurrentDirectory() + @"\Downloads\"; + } + + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Design", + "CA1031:Do not catch general exception types", + Justification = "On purpose so any exception here does not prevent using local packages.")] + private static IEnumerable GetGitHubPackages() + { + var packages = new List(); + try + { + var client = new GitHubClient(new ProductHeaderValue("nvQuickSite")); + var releases = client.Repository.Release.GetAll("dnnsoftware", "Dnn.Platform").Result; + + if (releases.Count > 0) + { + var index = 0; + foreach (Release release in releases) + { + var installPackage = release.Assets + .Where(a => + a.BrowserDownloadUrl.IndexOf("install", StringComparison.OrdinalIgnoreCase) > -1 && + a.BrowserDownloadUrl.IndexOf("dnn_platform", StringComparison.OrdinalIgnoreCase) > -1) + .FirstOrDefault(); + + var upgradePackage = release.Assets + .Where(a => + a.BrowserDownloadUrl.IndexOf("upgrade", StringComparison.OrdinalIgnoreCase) > -1 && + a.BrowserDownloadUrl.IndexOf("dnn_platform", StringComparison.OrdinalIgnoreCase) > -1) + .FirstOrDefault(); + + var ghPackage = new Package(); + + ghPackage.version = new System.Version(release.TagName.TrimStart('v').Split('-')[0]); + + if (index == 0 && + release.Name.IndexOf("rc", StringComparison.OrdinalIgnoreCase) >= 0 && + Properties.Settings.Default.ShowReleaseCandidates && + installPackage != null) + { + ghPackage.did = "dnn-platform-rc"; + ghPackage.name = "DNN Platform Release Candidate"; + ghPackage.url = installPackage.BrowserDownloadUrl; + ghPackage.upgradeurl = upgradePackage.BrowserDownloadUrl; + packages.Add(ghPackage); + } + else if (!release.Name.ToUpperInvariant().Contains("RC") && + installPackage != null) + { + ghPackage.did = "dnn-platform-" + ghPackage.version.Major.ToString(); + ghPackage.name = "DNN Platform " + ghPackage.version.Major.ToString(); + ghPackage.url = installPackage.BrowserDownloadUrl; + ghPackage.upgradeurl = upgradePackage.BrowserDownloadUrl; + packages.Add(ghPackage); + } + + index++; + } + } + + Log.Logger.Information("Retrieved DNN packages from GitHub"); + Log.Logger.Debug("Retrieved DNN packages from GitHub: {@packages}", packages); + return packages; + } + catch (Exception ex) + { + Log.Logger.Error(ex, "Unexpected error occurred retrieving DNN packages from GitHub"); + return packages; + } + } + } +} From 6595d4e80978e1a697b6bfdef298749c633b3ab3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 23:16:47 +0000 Subject: [PATCH 2/4] Bump Newtonsoft.Json from 8.0.3 to 13.0.1 in /nvQuickSite Bumps [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) from 8.0.3 to 13.0.1. - [Release notes](https://github.com/JamesNK/Newtonsoft.Json/releases) - [Commits](https://github.com/JamesNK/Newtonsoft.Json/compare/8.0.3...13.0.1) --- updated-dependencies: - dependency-name: Newtonsoft.Json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- nvQuickSite/nvQuickSite.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nvQuickSite/nvQuickSite.csproj b/nvQuickSite/nvQuickSite.csproj index 43d9c36..e891b19 100644 --- a/nvQuickSite/nvQuickSite.csproj +++ b/nvQuickSite/nvQuickSite.csproj @@ -278,7 +278,7 @@ all - 8.0.3 + 13.0.1 0.32.0 From 847e4be006ef3f6f5b79955d84fa4e5cd8f018e6 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 5 Sep 2022 17:53:32 -0400 Subject: [PATCH 3/4] Bumps version to 2.2.0 for next release Bumps version to 2.2.0 for next release --- nvQuickSite/Properties/AssemblyInfo.cs | 4 ++-- nvQuickSite/data/latestVersion.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nvQuickSite/Properties/AssemblyInfo.cs b/nvQuickSite/Properties/AssemblyInfo.cs index 4558aa4..22c902d 100644 --- a/nvQuickSite/Properties/AssemblyInfo.cs +++ b/nvQuickSite/Properties/AssemblyInfo.cs @@ -49,6 +49,6 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.1.2")] -[assembly: AssemblyFileVersion("2.1.2")] +[assembly: AssemblyVersion("2.2.0")] +[assembly: AssemblyFileVersion("2.2.0")] [assembly: NeutralResourcesLanguage("en")] diff --git a/nvQuickSite/data/latestVersion.json b/nvQuickSite/data/latestVersion.json index d2ba521..a9d6d55 100644 --- a/nvQuickSite/data/latestVersion.json +++ b/nvQuickSite/data/latestVersion.json @@ -1,3 +1,3 @@ { - "latestVersion": "2.1.2" + "latestVersion": "2.2.0" } \ No newline at end of file From b8581a98f20a751737efeb4731a80dc1e6b40fa1 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 5 Sep 2022 19:03:25 -0400 Subject: [PATCH 4/4] Fixed an issue where the wrong version of Newtonsoft.Json was defined We recently bumped this dependency but other dependencies also depend on this library. This PR makes the system auto-generate the required binding redirects if necessary to fix that issue. --- nvQuickSite/nvQuickSite.csproj | 629 +++++++++++++++++---------------- 1 file changed, 315 insertions(+), 314 deletions(-) diff --git a/nvQuickSite/nvQuickSite.csproj b/nvQuickSite/nvQuickSite.csproj index e891b19..7441b57 100644 --- a/nvQuickSite/nvQuickSite.csproj +++ b/nvQuickSite/nvQuickSite.csproj @@ -1,315 +1,316 @@ - - - - - Debug - AnyCPU - {3D661BAD-45EB-4524-9650-78805CD31682} - WinExe - Properties - nvQuickSite - nvQuickSite - v4.5 - 512 - false - - false - C:\Dev\nvQuickSite\Publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - http://www.nvquicksite.com - http://www.nvquicksite.com - nvQuickSite - nvisionative, Inc. - 41 - 0.0.1.%2a - false - true - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - false - - - bin\Debug\nvQuickSite.xml - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - false - MinimumRecommendedRules.ruleset - bin\Release\nvQuickSite.xml - true - - - 0A724629BFD7DFCC40A44BF2FB61D13E16ED4A93 - - - DNNQuickSite_TemporaryKey.pfx - - - true - - - false - - - false - - - - - - - Resources\nvisionative.ico - - - - False - ..\..\..\Windows\System32\inetsrv\Microsoft.Web.Administration.dll - True - - - False - Libraries\OSVersionInfo.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Form - - - MsgBoxOk.cs - - - Form - - - MsgBoxYesNo.cs - - - - Form - - - DeleteSiteProgress.cs - - - Form - - - ViewExistingSites.cs - - - Form - - - UserSettings.cs - - - Form - - - MsgBoxYesNoIgnore.cs - - - - UserControl - - - Start.cs - - - Form - - - Main.cs - - - - - MsgBoxOk.cs - - - MsgBoxYesNo.cs - - - DeleteSiteProgress.cs - - - ViewExistingSites.cs - - - UserSettings.cs - - - MsgBoxYesNoIgnore.cs - - - Start.cs - Designer - - - Main.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - Always - - - Always - - - - - - - - - - False - Microsoft .NET Framework 4 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - - False - Windows Installer 4.5 - true - - - - - 2.0.2 - - - 1.13.3 - - - 1.2.0.3 - - - 5.0.3 - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - 13.0.1 - - - 0.32.0 - - - 1.0.0 - - - 2.10.0 - - - 3.1.1 - - - 1.0.1 - - - 4.1.0 - - - 1.1.118 - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - + + + + + true + Debug + AnyCPU + {3D661BAD-45EB-4524-9650-78805CD31682} + WinExe + Properties + nvQuickSite + nvQuickSite + v4.5 + 512 + false + + false + C:\Dev\nvQuickSite\Publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + http://www.nvquicksite.com + http://www.nvquicksite.com + nvQuickSite + nvisionative, Inc. + 41 + 0.0.1.%2a + false + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + false + + + bin\Debug\nvQuickSite.xml + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + false + MinimumRecommendedRules.ruleset + bin\Release\nvQuickSite.xml + true + + + 0A724629BFD7DFCC40A44BF2FB61D13E16ED4A93 + + + DNNQuickSite_TemporaryKey.pfx + + + true + + + false + + + false + + + + + + + Resources\nvisionative.ico + + + + False + ..\..\..\Windows\System32\inetsrv\Microsoft.Web.Administration.dll + True + + + False + Libraries\OSVersionInfo.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + MsgBoxOk.cs + + + Form + + + MsgBoxYesNo.cs + + + + Form + + + DeleteSiteProgress.cs + + + Form + + + ViewExistingSites.cs + + + Form + + + UserSettings.cs + + + Form + + + MsgBoxYesNoIgnore.cs + + + + UserControl + + + Start.cs + + + Form + + + Main.cs + + + + + MsgBoxOk.cs + + + MsgBoxYesNo.cs + + + DeleteSiteProgress.cs + + + ViewExistingSites.cs + + + UserSettings.cs + + + MsgBoxYesNoIgnore.cs + + + Start.cs + Designer + + + Main.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + Always + + + Always + + + + + + + + + + False + Microsoft .NET Framework 4 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 4.5 + true + + + + + 2.0.2 + + + 1.13.3 + + + 1.2.0.3 + + + 5.0.3 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + 13.0.1 + + + 0.32.0 + + + 1.0.0 + + + 2.10.0 + + + 3.1.1 + + + 1.0.1 + + + 4.1.0 + + + 1.1.118 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + \ No newline at end of file