private List <RockRelease> GetOrderedReleaseList(RockUpdateService rockUpdateService, Version installedVersion) { return(rockUpdateService .GetReleasesList(installedVersion) .OrderByDescending(p => new Version(p.SemanticVersion)) .ToList()); }
/// <summary> /// Updates an existing Rock package to the given version and returns true if successful. /// </summary> /// <returns>true if the update was successful; false if errors were encountered</returns> protected bool UpdateRockPackage(string version) { var errors = Enumerable.Empty <string>(); var rockUpdateService = new RockUpdateService(); try { var rockInstaller = new RockInstaller(rockUpdateService, new Version(version), _installedVersion); var installedRelease = rockInstaller.InstallVersion(); nbSuccess.Text = ConvertToHtmlLiWrappedUl(installedRelease.ReleaseNotes).ConvertCrLfToHtmlBr(); lSuccessVersion.Text = GetRockVersion(installedRelease.SemanticVersion); } catch (OutOfMemoryException ex) { errors = errors.Concat(new[] { string.Format("There is a problem installing v{0}. It looks like your website ran out of memory. Check out <a href='http://www.rockrms.com/Rock/UpdateIssues#outofmemory'>this page for some assistance</a>", version) }); LogException(ex); } catch (System.Xml.XmlException ex) { errors = errors.Concat(new[] { string.Format("There is a problem installing v{0}. It looks one of the standard XML files ({1}) may have been customized which prevented us from updating it. Check out <a href='http://www.rockrms.com/Rock/UpdateIssues#customizedxml'>this page for some assistance</a>", version, ex.Message) }); LogException(ex); } catch (IOException ex) { errors = errors.Concat(new[] { string.Format("There is a problem installing v{0}. We were not able to replace an important file ({1}) after the update. Check out <a href='http://www.rockrms.com/Rock/UpdateIssues#unabletoreplacefile'>this page for some assistance</a>", version, ex.Message) }); LogException(ex); } catch (VersionValidationException ex) { errors = errors.Concat(new[] { ex.Message }); LogException(ex); } catch (Exception ex) { errors = errors.Concat(new[] { string.Format("There is a problem installing v{0}: {1}", version, ex.Message) }); LogException(ex); } if (errors != null && errors.Count() > 0) { pnlError.Visible = true; nbErrors.Text = errors.Aggregate(new StringBuilder("<ul class='list-padded'>"), (sb, s) => sb.AppendFormat("<li>{0}</li>", s)).Append("</ul>").ToString(); return(false); } else { pnlUpdateSuccess.Visible = true; nbMoreUpdatesAvailable.Visible = GetOrderedReleaseList(rockUpdateService, new Version(version)).Count > 0; rptPackageVersions.Visible = false; return(true); } }
/// <summary> /// Invoked on page load. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnLoad(EventArgs e) { var rockUpdateService = new RockUpdateService(); // Set timeout for up to 15 minutes (just like installer) Server.ScriptTimeout = 900; ScriptManager.GetCurrent(Page).AsyncPostBackTimeout = 900; _isEarlyAccessOrganization = rockUpdateService.IsEarlyAccessInstance(); _installedVersion = new Version(VersionInfo.GetRockSemanticVersionNumber()); if (rockUpdateService.GetRockReleaseProgram() != RockReleaseProgram.Production) { nbRepoWarning.Visible = true; } DisplayRockVersion(); if (!IsPostBack) { btnIssues.NavigateUrl = rockUpdateService.GetRockEarlyAccessRequestUrl(); if (_isEarlyAccessOrganization) { hlblEarlyAccess.LabelType = Rock.Web.UI.Controls.LabelType.Success; hlblEarlyAccess.Text = "Early Access: Enabled"; pnlEarlyAccessNotEnabled.Visible = false; pnlEarlyAccessEnabled.Visible = true; } var checkFrameworkVersionResultResult = VersionValidationHelper.CheckFrameworkVersion(); _isOkToProceed = true; if (checkFrameworkVersionResultResult == DotNetVersionCheckResult.Fail) { // Starting with v13, .NET 4.7.2 is required. So, show a warning if they haven't updated yet. nbVersionIssue.Visible = true; nbVersionIssue.Text += "<p>You will need to upgrade your hosting server in order to proceed with the v13 update.</p>"; nbBackupMessage.Visible = false; } else if (checkFrameworkVersionResultResult == DotNetVersionCheckResult.Unknown) { // Starting with v13, .NET 4.7.2 is required. So, show a warning if can't determine if they have updated yet. nbVersionIssue.Visible = true; nbVersionIssue.Text += "<p>You may need to upgrade your hosting server in order to proceed with the v13 update. We were <b>unable to determine which Framework version</b> your server is using.</p>"; nbVersionIssue.Details += "<div class='alert alert-warning'>We were unable to check your server to verify that the .Net 4.7.2 Framework is installed! <b>You MUST verify this manually before you proceed with the update</b> otherwise your Rock application will be broken until you update the server.</div>"; nbBackupMessage.Visible = false; } _hasSqlServer14OrHigher = VersionValidationHelper.CheckSqlServerVersionGreaterThenSqlServer2012(); if (!_hasSqlServer14OrHigher) { nbSqlServerVersionIssue.Visible = true; } _releases = GetOrderedReleaseList(rockUpdateService, _installedVersion); if (_releases.Count > 0) { if (checkFrameworkVersionResultResult != DotNetVersionCheckResult.Pass && new Version(_releases.Last().SemanticVersion) >= new Version("1.13.0")) { // if VersionIssue is visible, and they are updating to v13 or later, show the version Warning as an Danger instead. nbVersionIssue.NotificationBoxType = Rock.Web.UI.Controls.NotificationBoxType.Danger; } pnlUpdatesAvailable.Visible = true; pnlUpdates.Visible = true; pnlNoUpdates.Visible = false; cbIncludeStats.Visible = true; BindGrid(); } FileManagementHelper.CleanUpDeletedFiles(); } }