diff --git a/PowerShellToolsPro.Packager.Test/ConfigDeserializerTests.cs b/PowerShellToolsPro.Packager.Test/ConfigDeserializerTests.cs index 8694942..c7e5848 100644 --- a/PowerShellToolsPro.Packager.Test/ConfigDeserializerTests.cs +++ b/PowerShellToolsPro.Packager.Test/ConfigDeserializerTests.cs @@ -1,5 +1,8 @@ using PowerShellToolsPro.Packager.Config; -using System.Collections; +using System; +using System.Collections; +using System.IO; +using PowerShellToolsPro.Packager; using Xunit; namespace PowerShellToolsPro.Packager.Test @@ -25,7 +28,7 @@ public void ShouldDeserializeListOfIgnoredModules() } [Fact] - public void ShouldDeserializeTimestampServer() + public void ShouldDeserializeTimestampServer() { var pathResolverMock = NSubstitute.Substitute.For(); @@ -39,8 +42,19 @@ public void ShouldDeserializeTimestampServer() var config = deserializer.Deserialize(hashtable); - Assert.Equal("http://timestamp.digicert.com", config.Package.TimestampServer); - } + Assert.Equal("http://timestamp.digicert.com", config.Package.TimestampServer); + } + + [Fact] + public void ShouldResolveRelativeRootAgainstWorkingDirectory() + { + var process = new PackageProcess(); + process.Config.Root = @"scripts\entry.ps1"; + + new RootPathStage().Execute(process, null); + + Assert.Equal(Path.Combine(Environment.CurrentDirectory, @"scripts\entry.ps1"), process.Config.Root); + } } diff --git a/PowerShellToolsPro.Packager/PackageProcess.cs b/PowerShellToolsPro.Packager/PackageProcess.cs index 3611ad3..c40f17a 100644 --- a/PowerShellToolsPro.Packager/PackageProcess.cs +++ b/PowerShellToolsPro.Packager/PackageProcess.cs @@ -17,6 +17,7 @@ public PackageProcess() _stages = new Stage[] { new ValidateStage(), + new RootPathStage(), new OutputPathStage(), new BundleStage(), new CompileStage(), @@ -272,6 +273,24 @@ public override StageResult Execute(PackageProcess process, StageResult previous } } + public class RootPathStage : Stage + { + public override bool ShouldExecute(PackageProcess process, StageResult previousStage) + { + return true; + } + + public override StageResult Execute(PackageProcess process, StageResult previousStage) + { + if (!string.IsNullOrEmpty(process.Config.Root) && !Path.IsPathRooted(process.Config.Root)) + { + process.Config.Root = Path.Combine(Environment.CurrentDirectory, process.Config.Root); + } + + return Success(process.Script); + } + } + public class BundleStage : Stage { public override bool ShouldExecute(PackageProcess process, StageResult previousStage)