protected void Run(RunningDeployment deployment) { var features = deployment.Variables.GetStrings(SpecialVariables.Package.EnabledFeatures).Where(s => !string.IsNullOrWhiteSpace(s)).ToList(); if (!features.Any()) { return; } var assembly = typeof(FeatureScriptConventionBase).GetTypeInfo().Assembly; var embeddedResourceNames = new HashSet <string>(embeddedResources.GetEmbeddedResourceNames(assembly)); foreach (var featureScript in features.SelectMany(GetScriptNames)) { // Determine the embedded-resource name var scriptEmbeddedResource = GetEmbeddedResourceName(featureScript); // If there is a matching embedded resource if (!embeddedResourceNames.Contains(scriptEmbeddedResource)) { continue; } var scriptFile = Path.Combine(deployment.CurrentDirectory, featureScript); // To execute the script, we need a physical file on disk. // If one already exists, we don't recreate it, as this provides a handy // way to override behaviour. if (!fileSystem.FileExists(scriptFile)) { Log.VerboseFormat("Creating '{0}' from embedded resource", scriptFile); fileSystem.OverwriteFile(scriptFile, embeddedResources.GetEmbeddedResourceText(assembly, scriptEmbeddedResource)); } else { Log.WarnFormat("Did not overwrite '{0}', it was already on disk", scriptFile); } // Execute the script Log.VerboseFormat("Executing '{0}'", scriptFile); var result = scriptEngine.Execute(new Script(scriptFile), deployment.Variables, commandLineRunner); // And then delete it Log.VerboseFormat("Deleting '{0}'", scriptFile); fileSystem.DeleteFile(scriptFile, FailureOptions.IgnoreFailure); if (result.ExitCode != 0) { throw new CommandException(string.Format("Script '{0}' returned non-zero exit code: {1}", scriptFile, result.ExitCode)); } } }
public void Install(RunningDeployment deployment) { var features = deployment.Variables.GetStrings(SpecialVariables.Package.EnabledFeatures).Where(s => !string.IsNullOrWhiteSpace(s)).ToList(); if (!features.Any()) { return; } var embeddedResourceNames = new HashSet <string>(embeddedResources.GetEmbeddedResourceNames()); foreach (var featureScript in features.SelectMany(GetScriptNames)) { // Determine the embedded-resource name var scriptEmbeddedResource = GetEmbeddedResourceName(featureScript); // If there is a matching embedded resource if (!embeddedResourceNames.Contains(scriptEmbeddedResource)) { continue; } var scriptFile = Path.Combine(deployment.CurrentDirectory, featureScript); // To execute the script, we need a physical file on disk. // If one already exists, we don't recreate it, as this provides a handy // way to override behaviour. if (!fileSystem.FileExists(scriptFile)) { fileSystem.OverwriteFile(scriptFile, embeddedResources.GetEmbeddedResourceText(scriptEmbeddedResource)); } // Execute the script Log.VerboseFormat("Executing '{0}'", scriptFile); var result = scriptEngineSelector.SelectEngine(scriptFile).Execute(scriptFile, deployment.Variables, commandLineRunner); // And then delete it fileSystem.DeleteFile(scriptFile, DeletionOptions.TryThreeTimesIgnoreFailure); if (result.ExitCode != 0) { throw new CommandException(string.Format("Script '{0}' returned non-zero exit code: {1}", scriptFile, result.ExitCode)); } } }
private void Arrange(ICollection <string> features, string suffix) { variables.Set(SpecialVariables.Package.EnabledFeatures, string.Join(",", features)); var embeddedResourceNames = new List <string>(); foreach (var feature in features) { var scriptName = FeatureScriptConvention.GetScriptName(feature, suffix, "ps1"); var embeddedResourceName = FeatureScriptConvention.GetEmbeddedResourceName(scriptName); embeddedResources.GetEmbeddedResourceText(embeddedResourceName).Returns(scriptContents); embeddedResourceNames.Add(embeddedResourceName); var scriptPath = Path.Combine(stagingDirectory, scriptName); scriptEngine.Execute(scriptPath, variables, commandLineRunner).Returns(new CommandResult("", 0)); } embeddedResources.GetEmbeddedResourceNames().Returns(embeddedResourceNames.ToArray()); }
protected void Run(RunningDeployment deployment) { var features = deployment.Variables.GetStrings(SpecialVariables.Package.EnabledFeatures).Where(s => !string.IsNullOrWhiteSpace(s)).ToList(); if (!features.Any()) { return; } var embeddedResourceNames = new HashSet <string>(embeddedResources.GetEmbeddedResourceNames(Assembly)); foreach (var feature in features) { // Features can be implemented as either classes or scripts (or both) ExecuteFeatureClasses(deployment, feature); ExecuteFeatureScripts(deployment, feature, embeddedResourceNames); } }