From 11335eddafa8f70f10cb5382b87eba9d21d4a6f6 Mon Sep 17 00:00:00 2001 From: khiltner Date: Fri, 5 Nov 2021 00:33:22 -0400 Subject: [PATCH 1/7] - add ability to reset the Installer state via a file instead of needing to use the webpage (makes it much easier to use in an automated deploy scenario) --- .../Hhogdev.SitecorePackageDeployer.config | 3 +++ .../Pipelines/Initialize/RunPostInstallSteps.cs | 9 +++++++++ SitecorePackageDeployer/Tasks/InstallPackage.cs | 16 ++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config index 2b5d91e..62cfe90 100644 --- a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config +++ b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config @@ -23,6 +23,9 @@ + + + diff --git a/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs b/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs index 7d53583..0be20d4 100644 --- a/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs +++ b/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs @@ -19,6 +19,7 @@ namespace Hhogdev.SitecorePackageDeployer.Pipelines.Initialize public class RunPostInstallSteps { string _packageSource; + string _restartFile; public RunPostInstallSteps() { @@ -28,12 +29,20 @@ public RunPostInstallSteps() private void LoadSettings() { _packageSource = InstallPackage.GetPackageSource(); + _restartFile = InstallPackage.GetRestartFile(); } public void Process(PipelineArgs args) { Log.Info("Sitecore package deployer starting. Version: " + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location). FileVersion, this); + //Check to see if we need to force the start of an install since the state is incorrect + if (File.Exists(_restartFile)) + { + File.Delete(_restartFile); + InstallPackage.ResetInstallState(); + } + //Check to see if we can run post steps InstallPackage.InstallerState state = InstallPackage.GetInstallerState(); if (state == InstallPackage.InstallerState.InstallingPackage || state == InstallPackage.InstallerState.InstallingPostSteps) diff --git a/SitecorePackageDeployer/Tasks/InstallPackage.cs b/SitecorePackageDeployer/Tasks/InstallPackage.cs index af29235..47028c9 100644 --- a/SitecorePackageDeployer/Tasks/InstallPackage.cs +++ b/SitecorePackageDeployer/Tasks/InstallPackage.cs @@ -54,6 +54,8 @@ internal enum InstallerState string _packageSource; //Url to make a request to for restarting the web server string _restartUrl; + //File for restarting the web server + string _restartFile; //Determines if the config files should be updated bool _updateConfigurationFiles; @@ -68,7 +70,9 @@ private void LoadSettings() { _packageSource = GetPackageSource(); _restartUrl = Settings.GetSetting("SitecorePackageDeployer.RestartUrl"); + _restartFile = GetRestartFile(); _updateConfigurationFiles = Settings.GetBoolSetting("SitecorePackageDeployer.UpdateConfigurationFiles", true); + } internal static string GetPackageSource() @@ -89,6 +93,11 @@ internal static string GetPackageSource() return packageSource; } + internal static string GetRestartFile() + { + return Settings.GetSetting("SitecorePackageDeployer.RestartFile"); + } + public void Run() { InstallPackages(); @@ -108,6 +117,13 @@ private void InstallPackages() } InstallLogger installLogger = new InstallLogger(new RootLogger(Level.ALL)); + + //Check to see if we need to force the start of an install since the state is incorrect + if (File.Exists(_restartFile)) + { + File.Delete(_restartFile); + ResetInstallState(); + } //Return if another installation is happening if (GetInstallerState() != InstallerState.Ready) From 0a5363f4c76624aa60febebb483139d3f2adec27 Mon Sep 17 00:00:00 2001 From: khiltner Date: Mon, 24 Jan 2022 14:00:56 -0500 Subject: [PATCH 2/7] - update config to support env and role --- .../Include/Hhogdev.SitecorePackageDeployer.config | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config index 62cfe90..ed1dcad 100644 --- a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config +++ b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config @@ -1,6 +1,9 @@  - - + + + From 28983b5371d8e19326fab0757378df313aa791cf Mon Sep 17 00:00:00 2001 From: khiltner Date: Tue, 14 Feb 2023 16:38:04 -0500 Subject: [PATCH 3/7] - update to latest NoReference dlls - does build --- ...Hhogdev.SitecorePackageDeployer.Web.csproj | 18 +++++++++--- SitecorePackageDeployer.Web/packages.config | 2 +- SitecorePackageDeployer.Web/web.config | 16 +++++++++-- .../Hhogdev.SitecorePackageDeployer.csproj | 28 +++++++++---------- SitecorePackageDeployer/app.config | 4 +-- SitecorePackageDeployer/packages.config | 12 ++++---- .../TestUpdatePackage.Web.csproj | 9 +++--- 7 files changed, 55 insertions(+), 34 deletions(-) diff --git a/SitecorePackageDeployer.Web/Hhogdev.SitecorePackageDeployer.Web.csproj b/SitecorePackageDeployer.Web/Hhogdev.SitecorePackageDeployer.Web.csproj index fb5bc39..7ed1afa 100644 --- a/SitecorePackageDeployer.Web/Hhogdev.SitecorePackageDeployer.Web.csproj +++ b/SitecorePackageDeployer.Web/Hhogdev.SitecorePackageDeployer.Web.csproj @@ -13,7 +13,7 @@ Properties Hhogdev.SitecorePackageDeployer.Web Hhogdev.SitecorePackageDeployer.Web - v4.5 + v4.8 true @@ -23,6 +23,7 @@ + true @@ -43,22 +44,24 @@ + + ..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll + + - - - + @@ -84,6 +87,13 @@ + + + web.config + + + web.config + 10.0 diff --git a/SitecorePackageDeployer.Web/packages.config b/SitecorePackageDeployer.Web/packages.config index c517166..5fe7658 100644 --- a/SitecorePackageDeployer.Web/packages.config +++ b/SitecorePackageDeployer.Web/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/SitecorePackageDeployer.Web/web.config b/SitecorePackageDeployer.Web/web.config index 43cd16b..92b2dc3 100644 --- a/SitecorePackageDeployer.Web/web.config +++ b/SitecorePackageDeployer.Web/web.config @@ -3,8 +3,7 @@ - + @@ -14,8 +13,19 @@ - + + + + + \ No newline at end of file diff --git a/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj b/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj index 85bdd9e..a76bd1c 100644 --- a/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj +++ b/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj @@ -9,8 +9,9 @@ Properties Hhogdev.SitecorePackageDeployer Hhogdev.SitecorePackageDeployer - v4.5 + v4.8 512 + true @@ -30,24 +31,23 @@ 4 - - ..\packages\Newtonsoft.Json.4.5.9\lib\net40\Newtonsoft.Json.dll - True + + ..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll - - ..\packages\Sitecore.Kernel.NoReferences.7.2.140228\lib\NET45\Sitecore.Kernel.dll + + ..\packages\Sitecore.Kernel.NoReferences.9.0.180604\lib\NET462\Sitecore.Kernel.dll - - ..\packages\Sitecore.Logging.NoReferences.7.2.140228\lib\NET45\Sitecore.Logging.dll + + ..\packages\Sitecore.Logging.NoReferences.9.0.180604\lib\NET462\Sitecore.Logging.dll - - ..\packages\Sitecore.Mvc.NoReferences.7.2.140228\lib\NET45\Sitecore.Mvc.dll + + ..\packages\Sitecore.Mvc.NoReferences.9.0.180604\lib\NET462\Sitecore.Mvc.dll - - ..\packages\Sitecore.Update.NoReferences.7.2.140228\lib\NET45\Sitecore.Update.dll + + ..\packages\Sitecore.Update.NoReferences.9.0.180604\lib\NET462\Sitecore.Update.dll - - ..\packages\Sitecore.Zip.NoReferences.7.2.140228\lib\NET45\Sitecore.Zip.dll + + ..\packages\Sitecore.Zip.NoReferences.9.0.180604\lib\NET462\Sitecore.Zip.dll diff --git a/SitecorePackageDeployer/app.config b/SitecorePackageDeployer/app.config index a01ef9c..e154c35 100644 --- a/SitecorePackageDeployer/app.config +++ b/SitecorePackageDeployer/app.config @@ -4,8 +4,8 @@ - + - \ No newline at end of file + diff --git a/SitecorePackageDeployer/packages.config b/SitecorePackageDeployer/packages.config index b7cc0f4..2da9192 100644 --- a/SitecorePackageDeployer/packages.config +++ b/SitecorePackageDeployer/packages.config @@ -1,9 +1,9 @@  - - - - - - + + + + + + \ No newline at end of file diff --git a/TestUpdatePackage.Web/TestUpdatePackage.Web.csproj b/TestUpdatePackage.Web/TestUpdatePackage.Web.csproj index 96078ad..8e15973 100644 --- a/TestUpdatePackage.Web/TestUpdatePackage.Web.csproj +++ b/TestUpdatePackage.Web/TestUpdatePackage.Web.csproj @@ -13,7 +13,7 @@ Properties TestUpdatePackage.Web TestUpdatePackage.Web - v4.5 + v4.8 true @@ -22,6 +22,8 @@ + + true @@ -42,22 +44,21 @@ + - - - + From 052b6a6bc0574844d4335b29c79f1d7318eb0249 Mon Sep 17 00:00:00 2001 From: khiltner Date: Tue, 14 Feb 2023 16:45:55 -0500 Subject: [PATCH 4/7] - removing the unneeded Microsoft.Azure.KeyVault.Core package --- SitecorePackageDeployer.Web/packages.config | 1 - 1 file changed, 1 deletion(-) diff --git a/SitecorePackageDeployer.Web/packages.config b/SitecorePackageDeployer.Web/packages.config index 5fe7658..4de699c 100644 --- a/SitecorePackageDeployer.Web/packages.config +++ b/SitecorePackageDeployer.Web/packages.config @@ -1,5 +1,4 @@  - \ No newline at end of file From 1ba05c24e4e9820544fc951de3e00b5162ecaefc Mon Sep 17 00:00:00 2001 From: khiltner Date: Tue, 14 Feb 2023 17:18:12 -0500 Subject: [PATCH 5/7] file cleanup by resharper --- .../Properties/AssemblyInfo.cs | 3 +- .../StartSitecorePackageDeployer.aspx.cs | 14 +- .../Hhogdev.SitecorePackageDeployer.csproj | 41 +- .../Logging/InstallLogger.cs | 115 ++---- .../Metadata/CompletionNotification.cs | 6 +- .../Metadata/PostStepDetails.cs | 6 +- .../Initialize/RunPostInstallSteps.cs | 43 +- .../Pipelines/Shutdown/ShutdownIndicator.cs | 9 +- .../Properties/AssemblyInfo.cs | 3 +- .../Tasks/InstallPackage.cs | 380 +++++++++--------- SitecorePackageDeployer/packages.config | 9 +- TestUpdatePackage.Web/Class1.cs | 7 +- .../Properties/AssemblyInfo.cs | 3 +- 13 files changed, 306 insertions(+), 333 deletions(-) diff --git a/SitecorePackageDeployer.Web/Properties/AssemblyInfo.cs b/SitecorePackageDeployer.Web/Properties/AssemblyInfo.cs index 1e4c3f0..bb11407 100644 --- a/SitecorePackageDeployer.Web/Properties/AssemblyInfo.cs +++ b/SitecorePackageDeployer.Web/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following @@ -32,4 +31,4 @@ // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.10.0.0")] -[assembly: AssemblyFileVersion("1.10.0.0")] +[assembly: AssemblyFileVersion("1.10.0.0")] \ No newline at end of file diff --git a/SitecorePackageDeployer.Web/sitecore/admin/StartSitecorePackageDeployer.aspx.cs b/SitecorePackageDeployer.Web/sitecore/admin/StartSitecorePackageDeployer.aspx.cs index 19f4fee..332f66e 100644 --- a/SitecorePackageDeployer.Web/sitecore/admin/StartSitecorePackageDeployer.aspx.cs +++ b/SitecorePackageDeployer.Web/sitecore/admin/StartSitecorePackageDeployer.aspx.cs @@ -1,15 +1,11 @@ -using Hhogdev.SitecorePackageDeployer.Tasks; -using System; -using System.Collections.Generic; -using System.Linq; +using System; using System.Threading; -using System.Web; using System.Web.UI; -using System.Web.UI.WebControls; +using Hhogdev.SitecorePackageDeployer.Tasks; namespace Hhogdev.SitecorePackageDeployer.Web.sitecore.admin { - public partial class StartSitecorePackageDeployer : System.Web.UI.Page + public partial class StartSitecorePackageDeployer : Page { protected void Page_Load(object sender, EventArgs e) { @@ -18,9 +14,9 @@ protected void Page_Load(object sender, EventArgs e) InstallPackage.ResetInstallState(); } - ThreadPool.QueueUserWorkItem((ctx) => + ThreadPool.QueueUserWorkItem(ctx => { - InstallPackage installer = new InstallPackage(); + var installer = new InstallPackage(); installer.Run(); }); } diff --git a/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj b/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj index a76bd1c..a5eb70e 100644 --- a/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj +++ b/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj @@ -34,24 +34,43 @@ ..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll - - ..\packages\Sitecore.Kernel.NoReferences.9.0.180604\lib\NET462\Sitecore.Kernel.dll + + ..\packages\Sitecore.Kernel.10.2.0\lib\net48\Sitecore.Kernel.dll - - ..\packages\Sitecore.Logging.NoReferences.9.0.180604\lib\NET462\Sitecore.Logging.dll + + ..\packages\Sitecore.Logging.10.2.0\lib\net48\Sitecore.Logging.dll - - ..\packages\Sitecore.Mvc.NoReferences.9.0.180604\lib\NET462\Sitecore.Mvc.dll + + ..\packages\Sitecore.Update.10.2.0\lib\net48\Sitecore.Update.dll - - ..\packages\Sitecore.Update.NoReferences.9.0.180604\lib\NET462\Sitecore.Update.dll - - - ..\packages\Sitecore.Zip.NoReferences.9.0.180604\lib\NET462\Sitecore.Zip.dll + + ..\packages\Sitecore.Zip.10.1.2\lib\net48\Sitecore.Zip.dll + + + + + + + + + + + + + + + + + + + + + + diff --git a/SitecorePackageDeployer/Logging/InstallLogger.cs b/SitecorePackageDeployer/Logging/InstallLogger.cs index b4bb167..94e60ef 100644 --- a/SitecorePackageDeployer/Logging/InstallLogger.cs +++ b/SitecorePackageDeployer/Logging/InstallLogger.cs @@ -1,76 +1,66 @@ -using log4net; -using log4net.spi; -using Sitecore.Diagnostics; -using System; +using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text; -using System.Threading.Tasks; +using log4net; +using log4net.spi; +using Sitecore.Diagnostics; namespace Hhogdev.SitecorePackageDeployer.Logging { /// - /// Implements ILog to capture log messages during install + /// Implements ILog to capture log messages during install /// internal class InstallLogger : ILog { - ILogger _logger; - List _messages = new List(); + private readonly List _messages = new List(); public InstallLogger(ILogger logger) { - _logger = logger; + Logger = logger; } - #region ILog implementation - public bool IsDebugEnabled + /// + /// Adds a message to the list of messages strings + /// + /// + /// + /// + private void WriteMessage(object message, Exception ex) { - get - { - return true; - } - } + var messageBuilder = new StringBuilder(message.ToString()); - public bool IsErrorEnabled - { - get + if (ex != null) { - return true; + messageBuilder.Append("\n\t"); + messageBuilder.Append(ex); } - } - public bool IsFatalEnabled - { - get - { - return true; - } + _messages.Add(messageBuilder.ToString()); } - public bool IsInfoEnabled + /// + /// Writes messages to a log file + /// + /// + public void WriteMessages(string logFile) { - get - { - return true; - } + File.AppendAllLines(logFile, _messages); } - public bool IsWarnEnabled - { - get - { - return true; - } - } + #region ILog implementation - public ILogger Logger - { - get - { - return _logger; - } - } + public bool IsDebugEnabled => true; + + public bool IsErrorEnabled => true; + + public bool IsFatalEnabled => true; + + public bool IsInfoEnabled => true; + + public bool IsWarnEnabled => true; + + public ILogger Logger { get; } public void Debug(object message) { @@ -141,34 +131,7 @@ public void Warn(object message, Exception ex) WriteMessage(message, ex); } - #endregion - /// - /// Adds a message to the list of messages strings - /// - /// - /// - /// - private void WriteMessage(object message, Exception ex) - { - StringBuilder messageBuilder = new StringBuilder(message.ToString()); - - if (ex!=null) - { - messageBuilder.Append("\n\t"); - messageBuilder.Append(ex.ToString()); - } - - _messages.Add(messageBuilder.ToString()); - } - - /// - /// Writes messages to a log file - /// - /// - public void WriteMessages(string logFile) - { - File.AppendAllLines(logFile, _messages); - } + #endregion } -} +} \ No newline at end of file diff --git a/SitecorePackageDeployer/Metadata/CompletionNotification.cs b/SitecorePackageDeployer/Metadata/CompletionNotification.cs index db59a12..5b9a4d3 100644 --- a/SitecorePackageDeployer/Metadata/CompletionNotification.cs +++ b/SitecorePackageDeployer/Metadata/CompletionNotification.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Hhogdev.SitecorePackageDeployer.Metadata { @@ -13,4 +9,4 @@ public class CompletionNotification public string ServerName { get; set; } public string DeployHistoryPath { get; set; } } -} +} \ No newline at end of file diff --git a/SitecorePackageDeployer/Metadata/PostStepDetails.cs b/SitecorePackageDeployer/Metadata/PostStepDetails.cs index 95c1f94..a3c09e7 100644 --- a/SitecorePackageDeployer/Metadata/PostStepDetails.cs +++ b/SitecorePackageDeployer/Metadata/PostStepDetails.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Hhogdev.SitecorePackageDeployer.Metadata { @@ -13,4 +9,4 @@ public class PostStepDetails public string HistoryPath { get; set; } public string ResultFileName { get; set; } } -} +} \ No newline at end of file diff --git a/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs b/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs index 0be20d4..7eb2f07 100644 --- a/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs +++ b/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs @@ -1,25 +1,24 @@ -using Hhogdev.SitecorePackageDeployer.Logging; +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Threading; +using System.Xml.Serialization; +using Hhogdev.SitecorePackageDeployer.Logging; using Hhogdev.SitecorePackageDeployer.Metadata; using Hhogdev.SitecorePackageDeployer.Tasks; using log4net.Repository.Hierarchy; using log4net.spi; -using Sitecore.Configuration; using Sitecore.Diagnostics; using Sitecore.Pipelines; using Sitecore.SecurityModel; -using System; -using System.Diagnostics; -using System.IO; -using System.Reflection; -using System.Threading; -using System.Xml.Serialization; namespace Hhogdev.SitecorePackageDeployer.Pipelines.Initialize { public class RunPostInstallSteps { - string _packageSource; - string _restartFile; + private string _packageSource; + private string _restartFile; public RunPostInstallSteps() { @@ -34,7 +33,9 @@ private void LoadSettings() public void Process(PipelineArgs args) { - Log.Info("Sitecore package deployer starting. Version: " + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location). FileVersion, this); + Log.Info( + "Sitecore package deployer starting. Version: " + FileVersionInfo + .GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion, this); //Check to see if we need to force the start of an install since the state is incorrect if (File.Exists(_restartFile)) @@ -44,8 +45,9 @@ public void Process(PipelineArgs args) } //Check to see if we can run post steps - InstallPackage.InstallerState state = InstallPackage.GetInstallerState(); - if (state == InstallPackage.InstallerState.InstallingPackage || state == InstallPackage.InstallerState.InstallingPostSteps) + var state = InstallPackage.GetInstallerState(); + if (state == InstallPackage.InstallerState.InstallingPackage || + state == InstallPackage.InstallerState.InstallingPostSteps) { Log.Warn(string.Format("Can't run post steps. Package installer state is {0}", state), this); @@ -66,16 +68,17 @@ public void Process(PipelineArgs args) private void InstallAdditionalPackages() { - ThreadPool.QueueUserWorkItem((ctx) => + ThreadPool.QueueUserWorkItem(ctx => { - InstallPackage installer = new InstallPackage(); + var installer = new InstallPackage(); installer.Run(); }); } private void RunPostInitializeStepsIfNeeded() { - string startupPostStepPackageFile = Path.Combine(_packageSource, InstallPackage.STARTUP_POST_STEP_PACKAGE_FILENAME); + var startupPostStepPackageFile = + Path.Combine(_packageSource, InstallPackage.STARTUP_POST_STEP_PACKAGE_FILENAME); //remove post step flag file if it exists if (File.Exists(startupPostStepPackageFile)) @@ -85,14 +88,14 @@ private void RunPostInitializeStepsIfNeeded() using (new SecurityDisabler()) { //Load the post step details - XmlSerializer serializer = new XmlSerializer(typeof(PostStepDetails)); + var serializer = new XmlSerializer(typeof(PostStepDetails)); using (TextReader writer = new StreamReader(startupPostStepPackageFile)) { - PostStepDetails details = serializer.Deserialize(writer) as PostStepDetails; + var details = serializer.Deserialize(writer) as PostStepDetails; if (details != null) { - InstallLogger installLogger = new InstallLogger(new RootLogger(Level.ALL)); + var installLogger = new InstallLogger(new RootLogger(Level.ALL)); try { @@ -122,4 +125,4 @@ private void RunPostInitializeStepsIfNeeded() } } } -} +} \ No newline at end of file diff --git a/SitecorePackageDeployer/Pipelines/Shutdown/ShutdownIndicator.cs b/SitecorePackageDeployer/Pipelines/Shutdown/ShutdownIndicator.cs index fdf7956..7766305 100644 --- a/SitecorePackageDeployer/Pipelines/Shutdown/ShutdownIndicator.cs +++ b/SitecorePackageDeployer/Pipelines/Shutdown/ShutdownIndicator.cs @@ -1,15 +1,10 @@ using Hhogdev.SitecorePackageDeployer.Tasks; using Sitecore.Pipelines; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Hhogdev.SitecorePackageDeployer.Pipelines.Shutdown { /// - /// Catches a shutdown and tells the package installer that it must execute its post steps in the initialize pipeline + /// Catches a shutdown and tells the package installer that it must execute its post steps in the initialize pipeline /// public class ShutdownIndicator { @@ -19,4 +14,4 @@ public void Process(PipelineArgs args) InstallPackage.ShutdownDetected = true; } } -} +} \ No newline at end of file diff --git a/SitecorePackageDeployer/Properties/AssemblyInfo.cs b/SitecorePackageDeployer/Properties/AssemblyInfo.cs index 064b593..d69f3b8 100644 --- a/SitecorePackageDeployer/Properties/AssemblyInfo.cs +++ b/SitecorePackageDeployer/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following @@ -33,4 +32,4 @@ // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.11.0.0")] -[assembly: AssemblyFileVersion("1.11.0.0")] +[assembly: AssemblyFileVersion("1.11.0.0")] \ No newline at end of file diff --git a/SitecorePackageDeployer/Tasks/InstallPackage.cs b/SitecorePackageDeployer/Tasks/InstallPackage.cs index 47028c9..027875f 100644 --- a/SitecorePackageDeployer/Tasks/InstallPackage.cs +++ b/SitecorePackageDeployer/Tasks/InstallPackage.cs @@ -1,83 +1,80 @@ -using Sitecore.Configuration; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Threading; +using System.Xml.Serialization; +using Hhogdev.SitecorePackageDeployer.Logging; +using Hhogdev.SitecorePackageDeployer.Metadata; +using log4net.Repository.Hierarchy; +using log4net.spi; +using Newtonsoft.Json; +using Sitecore; +using Sitecore.Configuration; +using Sitecore.Data; using Sitecore.Diagnostics; using Sitecore.IO; +using Sitecore.SecurityModel; using Sitecore.Update; using Sitecore.Update.Installer; using Sitecore.Update.Installer.Exceptions; using Sitecore.Update.Installer.Installer.Utils; using Sitecore.Update.Installer.Utils; using Sitecore.Update.Utils; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using log4net.spi; -using Hhogdev.SitecorePackageDeployer.Logging; -using log4net.Repository.Hierarchy; -using System.Threading; -using Sitecore; -using Sitecore.Update.Metadata; -using Hhogdev.SitecorePackageDeployer.Metadata; -using System.Xml.Serialization; using Sitecore.Web; -using System.Net; -using System.Reflection; -using Sitecore.SecurityModel; -using Sitecore.Data; -using Sitecore.Syndication; namespace Hhogdev.SitecorePackageDeployer.Tasks { public class InstallPackage { - internal enum InstallerState - { - Ready = 0, - InstallingPackage = 1, - WaitingForPostSteps = 2, - InstallingPostSteps = 3 - } - internal const string STARTUP_POST_STEP_PACKAGE_FILENAME = "StartPostStepPackage.xml"; internal const string SUCCESS = "Success"; internal const string FAIL = "Fail"; internal const string INSTALLER_STATE_PROPERTY = "SPD_InstallerState_"; - static string sitecoreUpdatePath = Assembly.GetAssembly(typeof(PackageInstallationInfo)).Location; - static Assembly sitecoreUpdateAssembly = Assembly.LoadFile(sitecoreUpdatePath); - FileVersionInfo sitecoreUpdateVersionInfo = FileVersionInfo.GetVersionInfo(sitecoreUpdateAssembly.Location); - static Type updateHelperType = sitecoreUpdateAssembly.GetType("Sitecore.Update.UpdateHelper"); + private static readonly string sitecoreUpdatePath = + Assembly.GetAssembly(typeof(PackageInstallationInfo)).Location; + + private static readonly Assembly sitecoreUpdateAssembly = Assembly.LoadFile(sitecoreUpdatePath); + private static readonly Type updateHelperType = sitecoreUpdateAssembly.GetType("Sitecore.Update.UpdateHelper"); + + private readonly FileVersionInfo sitecoreUpdateVersionInfo = + FileVersionInfo.GetVersionInfo(sitecoreUpdateAssembly.Location); //Points at the folder where new packages will be stored - string _packageSource; - //Url to make a request to for restarting the web server - string _restartUrl; + private string _packageSource; + //File for restarting the web server - string _restartFile; - //Determines if the config files should be updated - bool _updateConfigurationFiles; + private string _restartFile; - public static bool ShutdownDetected { get; set; } + //Url to make a request to for restarting the web server + private string _restartUrl; + + //Determines if the config files should be updated + private bool _updateConfigurationFiles; public InstallPackage() { LoadSettings(); } + public static bool ShutdownDetected { get; set; } + private void LoadSettings() { _packageSource = GetPackageSource(); _restartUrl = Settings.GetSetting("SitecorePackageDeployer.RestartUrl"); _restartFile = GetRestartFile(); - _updateConfigurationFiles = Settings.GetBoolSetting("SitecorePackageDeployer.UpdateConfigurationFiles", true); - + _updateConfigurationFiles = + Settings.GetBoolSetting("SitecorePackageDeployer.UpdateConfigurationFiles", true); } internal static string GetPackageSource() { - string packageSource = Settings.GetSetting("SitecorePackageDeployer.PackageSource"); + var packageSource = Settings.GetSetting("SitecorePackageDeployer.PackageSource"); //See if the package source is a web path instead of a file system path. if (packageSource.StartsWith("/")) @@ -104,7 +101,7 @@ public void Run() } /// - /// Installs the packages found in the package source folder. + /// Installs the packages found in the package source folder. /// private void InstallPackages() { @@ -116,8 +113,8 @@ private void InstallPackages() return; } - InstallLogger installLogger = new InstallLogger(new RootLogger(Level.ALL)); - + var installLogger = new InstallLogger(new RootLogger(Level.ALL)); + //Check to see if we need to force the start of an install since the state is incorrect if (File.Exists(_restartFile)) { @@ -128,7 +125,8 @@ private void InstallPackages() //Return if another installation is happening if (GetInstallerState() != InstallerState.Ready) { - Log.Info(string.Format("Install packages skipped because install state is {0}. ", GetInstallerState()), this); + Log.Info(string.Format("Install packages skipped because install state is {0}. ", GetInstallerState()), + this); return; } @@ -150,9 +148,10 @@ private void InstallPackages() using (new SecurityDisabler()) { //Find pending packages. This loop may not complete if there were binary/config changes - foreach (string updatePackageFilename in Directory.GetFiles(_packageSource, "*.update", SearchOption.TopDirectoryOnly).OrderBy(f => f)) + foreach (var updatePackageFilename in Directory + .GetFiles(_packageSource, "*.update", SearchOption.TopDirectoryOnly).OrderBy(f => f)) { - string updatePackageFilenameStripped = updatePackageFilename.Split('\\').Last(); + var updatePackageFilenameStripped = updatePackageFilename.Split('\\').Last(); if (ShutdownDetected) { Log.Info("Install packages aborting due to shutdown", this); @@ -165,15 +164,16 @@ private void InstallPackages() break; } - Log.Info(String.Format("Begin Installation: {0}", updatePackageFilenameStripped), this); + Log.Info(string.Format("Begin Installation: {0}", updatePackageFilenameStripped), this); string installationHistoryRoot = null; - List logMessages = new List(); + var logMessages = new List(); - PostStepDetails postStepDetails = new PostStepDetails + var postStepDetails = new PostStepDetails { PostStepPackageFilename = updatePackageFilename, - ResultFileName = Path.Combine(Path.GetDirectoryName(updatePackageFilename), Path.GetFileNameWithoutExtension(updatePackageFilename) + ".json") + ResultFileName = Path.Combine(Path.GetDirectoryName(updatePackageFilename), + Path.GetFileNameWithoutExtension(updatePackageFilename) + ".json") }; string installStatus = null; @@ -183,14 +183,16 @@ private void InstallPackages() //Run the installer if (sitecoreUpdateVersionInfo.ProductMajorPart == 1) { - logMessages = UpdateHelper.Install(BuildPackageInfo(updatePackageFilename), installLogger, out installationHistoryRoot); + logMessages = UpdateHelper.Install(BuildPackageInfo(updatePackageFilename), + installLogger, out installationHistoryRoot); } else { - object[] installationParamaters = new object[] { BuildReflectedPackageInfo(updatePackageFilename), installLogger, null }; + object[] installationParamaters = + { BuildReflectedPackageInfo(updatePackageFilename), installLogger, null }; logMessages = (List)updateHelperType.InvokeMember("Install", - BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, - null, null, installationParamaters, null); + BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, + null, null, installationParamaters, null); installationHistoryRoot = installationParamaters[2].ToString(); } @@ -220,7 +222,8 @@ private void InstallPackages() ExecutePostSteps(installLogger, postStepDetails, false); installStatus = SUCCESS; - Log.Info(String.Format("Installation Complete: {0}", updatePackageFilenameStripped), this); + Log.Info(string.Format("Installation Complete: {0}", updatePackageFilenameStripped), + this); SetInstallerState(InstallerState.InstallingPackage); } } @@ -237,10 +240,11 @@ private void InstallPackages() catch (Exception ex) { installStatus = FAIL; - Log.Error(String.Format("Installation Failed: {0}", updatePackageFilenameStripped), ex, this); + Log.Error(string.Format("Installation Failed: {0}", updatePackageFilenameStripped), ex, + this); installLogger.Fatal("Package install failed", ex); - ThreadPool.QueueUserWorkItem(new WaitCallback((ctx) => + ThreadPool.QueueUserWorkItem(ctx => { try { @@ -251,13 +255,14 @@ private void InstallPackages() GC.Collect(2); GC.WaitForPendingFinalizers(); - File.Move(updatePackageFilename, updatePackageFilename + ".error_" + DateTime.Now.ToString("yyyyMMdd.hhmmss")); + File.Move(updatePackageFilename, + updatePackageFilename + ".error_" + DateTime.Now.ToString("yyyyMMdd.hhmmss")); } catch (Exception ex1) { Log.Error("Error moving broken package", ex1, this); } - })); + }); break; } @@ -292,82 +297,87 @@ internal static void SetInstallerState(InstallerState installState) { Log.Info(string.Format("Setting installer state to {0}", installState), typeof(InstallPackage)); - Database coreDb = Database.GetDatabase("core"); + var coreDb = Database.GetDatabase("core"); // Use reflection to get the int value because the properties base class changed in 9.3 if (coreDb.GetType().Assembly.GetName().Version.Major >= 14) { //coreDb.PropertyStore.SetIntValue(INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)installState); - PropertyInfo propertyStorePropertyInfo = coreDb.GetType().GetProperty("PropertyStore"); - MethodInfo propertyStoreGetMethod = propertyStorePropertyInfo.GetGetMethod(); - object propertyStore = propertyStoreGetMethod.Invoke(coreDb, null); + var propertyStorePropertyInfo = coreDb.GetType().GetProperty("PropertyStore"); + var propertyStoreGetMethod = propertyStorePropertyInfo.GetGetMethod(); + var propertyStore = propertyStoreGetMethod.Invoke(coreDb, null); - MethodInfo setIntValueMethodInfo = propertyStore.GetType().GetMethod("SetIntValue"); - setIntValueMethodInfo.Invoke(propertyStore, new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, installState }); + var setIntValueMethodInfo = propertyStore.GetType().GetMethod("SetIntValue"); + setIntValueMethodInfo.Invoke(propertyStore, + new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, installState }); } else { //coreDb.Properties.SetIntValue(INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)installState); - PropertyInfo propertiesPropertyInfo = coreDb.GetType().GetProperty("Properties"); - MethodInfo propertiesGetMethod = propertiesPropertyInfo.GetGetMethod(); - object properties = propertiesGetMethod.Invoke(coreDb, null); + var propertiesPropertyInfo = coreDb.GetType().GetProperty("Properties"); + var propertiesGetMethod = propertiesPropertyInfo.GetGetMethod(); + var properties = propertiesGetMethod.Invoke(coreDb, null); - MethodInfo setIntValueMethodInfo = properties.GetType().GetMethod("SetIntValue"); - setIntValueMethodInfo.Invoke(properties, new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, installState }); + var setIntValueMethodInfo = properties.GetType().GetMethod("SetIntValue"); + setIntValueMethodInfo.Invoke(properties, + new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, installState }); } } /// - /// Gets the current install state + /// Gets the current install state /// /// internal static InstallerState GetInstallerState() { - Database coreDb = Database.GetDatabase("core"); + var coreDb = Database.GetDatabase("core"); // Use reflection to get the int value because the properties base class changed in 9.3 if (coreDb.GetType().Assembly.GetName().Version.Major >= 14) { //return (InstallerState)coreDb.PropertyStore.GetIntValue(INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready); - PropertyInfo propertyStorePropertyInfo = coreDb.GetType().GetProperty("PropertyStore"); - MethodInfo propertyStoreGetMethod = propertyStorePropertyInfo.GetGetMethod(); - object propertyStore = propertyStoreGetMethod.Invoke(coreDb, null); + var propertyStorePropertyInfo = coreDb.GetType().GetProperty("PropertyStore"); + var propertyStoreGetMethod = propertyStorePropertyInfo.GetGetMethod(); + var propertyStore = propertyStoreGetMethod.Invoke(coreDb, null); - MethodInfo getIntValueMethodInfo = propertyStore.GetType().GetMethod("GetIntValue"); - return (InstallerState)getIntValueMethodInfo.Invoke(propertyStore, new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready }); + var getIntValueMethodInfo = propertyStore.GetType().GetMethod("GetIntValue"); + return (InstallerState)getIntValueMethodInfo.Invoke(propertyStore, + new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready }); } else { //return (InstallerState)coreDb.Properties.GetIntValue(INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready); - PropertyInfo propertiesPropertyInfo = coreDb.GetType().GetProperty("Properties"); - MethodInfo propertiesGetMethod = propertiesPropertyInfo.GetGetMethod(); - object properties = propertiesGetMethod.Invoke(coreDb, null); + var propertiesPropertyInfo = coreDb.GetType().GetProperty("Properties"); + var propertiesGetMethod = propertiesPropertyInfo.GetGetMethod(); + var properties = propertiesGetMethod.Invoke(coreDb, null); - MethodInfo getIntValueMethodInfo = properties.GetType().GetMethod("GetIntValue"); - return (InstallerState)getIntValueMethodInfo.Invoke(properties, new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready }); + var getIntValueMethodInfo = properties.GetType().GetMethod("GetIntValue"); + return (InstallerState)getIntValueMethodInfo.Invoke(properties, + new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready }); } } /// - /// Restarts the web server by making a request to the webroot. The request has a short timeout and is expected to fail. - /// The purpose is to initiate a request to IIS to restart the AppPool. The Url is determined by the Sitecore API or an optional config parameter. + /// Restarts the web server by making a request to the webroot. The request has a short timeout and is expected to + /// fail. + /// The purpose is to initiate a request to IIS to restart the AppPool. The Url is determined by the Sitecore API or an + /// optional config parameter. /// private void RestartSitecoreServer() { - try { //Force restart of all apppools pointing the website. This can happen during long installs Log.Info("Forcing restart", this); - string configFile = MainUtil.MapPath("/App_Config/Include/SPD_Restart.config"); + var configFile = MainUtil.MapPath("/App_Config/Include/SPD_Restart.config"); - using (FileStream fs = File.Open(configFile, FileMode.Create)) + using (var fs = File.Open(configFile, FileMode.Create)) { - using (StreamWriter sw = new StreamWriter(fs)) + using (var sw = new StreamWriter(fs)) { sw.WriteLine(""); } @@ -381,7 +391,7 @@ private void RestartSitecoreServer() Log.Error("Exception when forcing restart", ex, this); } - string url = _restartUrl; + var url = _restartUrl; if (string.IsNullOrEmpty(_restartUrl)) { @@ -390,28 +400,28 @@ private void RestartSitecoreServer() Log.Info("Sitecore Package Deployer is attempting to restart Sitecore at the url: " + url, this); - WebRequest req = WebRequest.Create(url); + var req = WebRequest.Create(url); req.Timeout = 100; try { - using (WebResponse resp = req.GetResponse()) + using (var resp = req.GetResponse()) { - } } catch (Exception) - { } + { + } } /// - /// Creates a file that causes post install steps to be executed at startup + /// Creates a file that causes post install steps to be executed at startup /// /// /// private void RunPostStepsAtStartup(string updatePackageFilename, string historyPath, PostStepDetails details) { - string startupPostStepPackageFile = Path.Combine(_packageSource, STARTUP_POST_STEP_PACKAGE_FILENAME); + var startupPostStepPackageFile = Path.Combine(_packageSource, STARTUP_POST_STEP_PACKAGE_FILENAME); //remove post step flag file if it exists if (File.Exists(startupPostStepPackageFile)) @@ -419,7 +429,7 @@ private void RunPostStepsAtStartup(string updatePackageFilename, string historyP File.Delete(startupPostStepPackageFile); } - XmlSerializer serializer = new XmlSerializer(typeof(PostStepDetails)); + var serializer = new XmlSerializer(typeof(PostStepDetails)); using (TextWriter writer = new StreamWriter(startupPostStepPackageFile)) { serializer.Serialize(writer, details); @@ -427,29 +437,33 @@ private void RunPostStepsAtStartup(string updatePackageFilename, string historyP } /// - /// Executes the post install steps + /// Executes the post install steps /// /// - internal static void ExecutePostSteps(InstallLogger installLogger, PostStepDetails postStepDetails, bool setReadyStateWhenDone) + internal static void ExecutePostSteps(InstallLogger installLogger, PostStepDetails postStepDetails, + bool setReadyStateWhenDone) { try { SetInstallerState(InstallerState.InstallingPostSteps); //Load the metadata from the update package - MetadataView metedateView = UpdateHelper.LoadMetadata(postStepDetails.PostStepPackageFilename); - List logMessages = new List(); + var metedateView = UpdateHelper.LoadMetadata(postStepDetails.PostStepPackageFilename); + var logMessages = new List(); try { //Execute the post install steps - DiffInstaller diffInstaller = new DiffInstaller(UpgradeAction.Upgrade); - diffInstaller.ExecutePostInstallationInstructions(postStepDetails.PostStepPackageFilename, postStepDetails.HistoryPath, InstallMode.Update, metedateView, installLogger, ref logMessages); + var diffInstaller = new DiffInstaller(UpgradeAction.Upgrade); + diffInstaller.ExecutePostInstallationInstructions(postStepDetails.PostStepPackageFilename, + postStepDetails.HistoryPath, InstallMode.Update, metedateView, installLogger, ref logMessages); } finally { //Move the update package into the history folder - File.Move(postStepDetails.PostStepPackageFilename, Path.Combine(postStepDetails.HistoryPath, Path.GetFileName(postStepDetails.PostStepPackageFilename))); + File.Move(postStepDetails.PostStepPackageFilename, + Path.Combine(postStepDetails.HistoryPath, + Path.GetFileName(postStepDetails.PostStepPackageFilename))); } } catch (Exception ex) @@ -473,19 +487,21 @@ internal static void ExecutePostSteps(InstallLogger installLogger, PostStepDetai } /// - /// Locates changed configs installed by the package installer + /// Locates changed configs installed by the package installer /// private void FindAndUpdateChangedConfigs(string installPackageName) { - string appConfigFolder = MainUtil.MapPath("/"); + var appConfigFolder = MainUtil.MapPath("/"); - foreach (string newConfigFile in Directory.GetFiles(appConfigFolder, "*.config." + installPackageName, SearchOption.AllDirectories)) + foreach (var newConfigFile in Directory.GetFiles(appConfigFolder, "*.config." + installPackageName, + SearchOption.AllDirectories)) { Log.Info(string.Format("Found changed config {0}", newConfigFile), this); - int configExtensionPos = newConfigFile.LastIndexOf(".config") + 7; - string oldConfigFile = Path.Combine(Path.GetDirectoryName(newConfigFile), newConfigFile.Substring(0, configExtensionPos)); - string backupConfigFile = newConfigFile + string.Format(".backup{0:yyyyMMddhhmmss}", DateTime.Now); + var configExtensionPos = newConfigFile.LastIndexOf(".config") + 7; + var oldConfigFile = Path.Combine(Path.GetDirectoryName(newConfigFile), + newConfigFile.Substring(0, configExtensionPos)); + var backupConfigFile = newConfigFile + string.Format(".backup{0:yyyyMMddhhmmss}", DateTime.Now); //Backup the existing config file if (File.Exists(oldConfigFile)) @@ -520,7 +536,7 @@ private void FindAndUpdateChangedConfigs(string installPackageName) } /// - /// Writes the log messages to the message log + /// Writes the log messages to the message log /// /// /// @@ -530,33 +546,34 @@ private void SaveInstallationMessages(string installationHistoryRoot, List - /// Writes the notification .json to the install folder + /// Writes the notification .json to the install folder /// /// /// @@ -580,16 +597,16 @@ public static void NotifiyPackageComplete(string status, PostStepDetails postSte { try { - using (StreamWriter sw = File.CreateText(postStepDetails.ResultFileName)) + using (var sw = File.CreateText(postStepDetails.ResultFileName)) { - CompletionNotification completionNotification = new CompletionNotification + var completionNotification = new CompletionNotification { Status = status, ServerName = Environment.MachineName, DeployHistoryPath = postStepDetails.HistoryPath }; - sw.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(completionNotification)); + sw.WriteLine(JsonConvert.SerializeObject(completionNotification)); } } catch (Exception ex) @@ -605,11 +622,11 @@ public static void ResetInstallState() private PackageInstallationInfo BuildPackageInfo(string updatePackageFilename) { - PackageInstallationInfo installationInfo = new PackageInstallationInfo + var installationInfo = new PackageInstallationInfo { Action = UpgradeAction.Upgrade, Mode = InstallMode.Install, - Path = updatePackageFilename, + Path = updatePackageFilename }; return installationInfo; } @@ -617,13 +634,13 @@ private PackageInstallationInfo BuildPackageInfo(string updatePackageFilename) private object BuildReflectedPackageInfo(string updatePackageFilename) { //Get PackageInstallationInfo type and create instance for reflection - Type packageInstallationInfoType = sitecoreUpdateAssembly.GetType("Sitecore.Update.PackageInstallationInfo"); - object packageInstallationInfoInstance = Activator.CreateInstance(packageInstallationInfoType); + var packageInstallationInfoType = sitecoreUpdateAssembly.GetType("Sitecore.Update.PackageInstallationInfo"); + var packageInstallationInfoInstance = Activator.CreateInstance(packageInstallationInfoType); //Get and set properties - PropertyInfo actionPropertyInfo = packageInstallationInfoType.GetProperty("Action"); - PropertyInfo modePropertyInfo = packageInstallationInfoType.GetProperty("Mode"); - PropertyInfo pathPropertyInfo = packageInstallationInfoType.GetProperty("Path"); - PropertyInfo processingModePropertyInfo = packageInstallationInfoType.GetProperty("ProcessingMode"); + var actionPropertyInfo = packageInstallationInfoType.GetProperty("Action"); + var modePropertyInfo = packageInstallationInfoType.GetProperty("Mode"); + var pathPropertyInfo = packageInstallationInfoType.GetProperty("Path"); + var processingModePropertyInfo = packageInstallationInfoType.GetProperty("ProcessingMode"); actionPropertyInfo.SetValue(packageInstallationInfoInstance, GetUpgradeActionValue("Upgrade"), null); modePropertyInfo.SetValue(packageInstallationInfoInstance, GetInstallModeValue("Install"), null); pathPropertyInfo.SetValue(packageInstallationInfoInstance, updatePackageFilename, null); @@ -632,86 +649,83 @@ private object BuildReflectedPackageInfo(string updatePackageFilename) } /// - /// Gets upgrade action value. + /// Gets upgrade action value. /// - /// /// - /// Created on 12/27/2016. + /// Created on 12/27/2016. /// - /// - /// The upgrade action accepting any of the following values - /// { - /// "Preview", - /// "Upgrade" - /// } - /// from Sitecore.Update v2 dll's Sitecore.Update.Installer.Utils.UpgradeAction enum. + /// + /// The upgrade action accepting any of the following values + /// { + /// "Preview", + /// "Upgrade" + /// } + /// from Sitecore.Update v2 dll's Sitecore.Update.Installer.Utils.UpgradeAction enum. /// - /// - /// /// - /// The upgrade action value. + /// The upgrade action value. /// - private object GetUpgradeActionValue(string upgradeAction) { - Type upgradeActionType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Installer.Utils.UpgradeAction"); + var upgradeActionType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Installer.Utils.UpgradeAction"); return Enum.Parse(upgradeActionType, upgradeAction); } /// - /// Gets install mode value. + /// Gets install mode value. /// - /// /// - /// Created on 12/27/2016. + /// Created on 12/27/2016. /// - /// - /// The install mode accepting any of the following values - /// { - /// "Install", - /// "Update" - /// } - /// from Sitecore.Update v2 dll's Sitecore.Update.Utils.InstallMode enum + /// + /// The install mode accepting any of the following values + /// { + /// "Install", + /// "Update" + /// } + /// from Sitecore.Update v2 dll's Sitecore.Update.Utils.InstallMode enum /// - /// /// - /// The install mode value. + /// The install mode value. /// - private object GetInstallModeValue(string installMode) { - Type installModeType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Utils.InstallMode"); + var installModeType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Utils.InstallMode"); return Enum.Parse(installModeType, installMode); } /// - /// Gets processing mode value. + /// Gets processing mode value. /// - /// /// - /// Created on 12/27/2016. + /// Created on 12/27/2016. /// - /// - /// The processing mode accepting any of the following values - /// { - /// "None", - /// "Files", - /// "Items", - /// "PostStep", - /// "All" - /// } - /// from Sitecore.Update v2 dll's Sitecore.Update.Utils.ProcessingMode enum. + /// + /// The processing mode accepting any of the following values + /// { + /// "None", + /// "Files", + /// "Items", + /// "PostStep", + /// "All" + /// } + /// from Sitecore.Update v2 dll's Sitecore.Update.Utils.ProcessingMode enum. /// - /// - /// /// - /// The processing mode value. + /// The processing mode value. /// - private object GetProcessingModeValue(string processingMode) { - Type processingModeType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Utils.ProcessingMode"); + var processingModeType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Utils.ProcessingMode"); return Enum.Parse(processingModeType, processingMode); } + + internal enum InstallerState + { + Ready = 0, + InstallingPackage = 1, + WaitingForPostSteps = 2, + InstallingPostSteps = 3 + } } -} +} \ No newline at end of file diff --git a/SitecorePackageDeployer/packages.config b/SitecorePackageDeployer/packages.config index 2da9192..a3d7995 100644 --- a/SitecorePackageDeployer/packages.config +++ b/SitecorePackageDeployer/packages.config @@ -1,9 +1,8 @@  - - - - - + + + + \ No newline at end of file diff --git a/TestUpdatePackage.Web/Class1.cs b/TestUpdatePackage.Web/Class1.cs index d43c44b..caa1c7d 100644 --- a/TestUpdatePackage.Web/Class1.cs +++ b/TestUpdatePackage.Web/Class1.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace TestUpdatePackage.Web +namespace TestUpdatePackage.Web { public class Class1 { diff --git a/TestUpdatePackage.Web/Properties/AssemblyInfo.cs b/TestUpdatePackage.Web/Properties/AssemblyInfo.cs index a46ba2d..cb0754a 100644 --- a/TestUpdatePackage.Web/Properties/AssemblyInfo.cs +++ b/TestUpdatePackage.Web/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following @@ -32,4 +31,4 @@ // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file From 4ff24564be81f0c66415f4b84eed425f6d41cf8d Mon Sep 17 00:00:00 2001 From: khiltner Date: Tue, 21 Mar 2023 16:44:48 -0400 Subject: [PATCH 6/7] - add Standalone to the role:required --- .../App_Config/Include/Hhogdev.SitecorePackageDeployer.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config index ed1dcad..c7cd93d 100644 --- a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config +++ b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config @@ -3,7 +3,7 @@ xmlns:env="http://www.sitecore.net/xmlconfig/env/" xmlns:role="http://www.sitecore.net/xmlconfig/role/"> - + From 0b26f7d2addf764a0b98bdc698d8590f56233c64 Mon Sep 17 00:00:00 2001 From: khiltner Date: Tue, 2 May 2023 09:31:42 -0400 Subject: [PATCH 7/7] - correct the config file - a tad bit more logging --- .../Include/Hhogdev.SitecorePackageDeployer.config | 4 ++-- SitecorePackageDeployer/Tasks/InstallPackage.cs | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config index c7cd93d..0c156e6 100644 --- a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config +++ b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config @@ -21,13 +21,13 @@ - + - + diff --git a/SitecorePackageDeployer/Tasks/InstallPackage.cs b/SitecorePackageDeployer/Tasks/InstallPackage.cs index 027875f..cb53fb0 100644 --- a/SitecorePackageDeployer/Tasks/InstallPackage.cs +++ b/SitecorePackageDeployer/Tasks/InstallPackage.cs @@ -92,7 +92,14 @@ internal static string GetPackageSource() internal static string GetRestartFile() { - return Settings.GetSetting("SitecorePackageDeployer.RestartFile"); + var restartFile = Settings.GetSetting("SitecorePackageDeployer.RestartFile"); + + if (restartFile.StartsWith("/")) + { + restartFile = MainUtil.MapPath(restartFile); + } + + return restartFile; } public void Run() @@ -116,8 +123,10 @@ private void InstallPackages() var installLogger = new InstallLogger(new RootLogger(Level.ALL)); //Check to see if we need to force the start of an install since the state is incorrect + Log.Info(string.Format("Checking for a restart file at {0}", _restartFile), this); if (File.Exists(_restartFile)) { + Log.Info("Found a restart file", this); File.Delete(_restartFile); ResetInstallState(); }