Skip to content

Commit

Permalink
Isolated pipelines can now be dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
daveaglick committed Sep 25, 2019
1 parent b4284fb commit 47586eb
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 37 deletions.
7 changes: 4 additions & 3 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# 1.0.0-alpha.4

- Updated to .NET Core 3.0 final
- Renames delegate-based `IBootstrapper.AddSettings()` overload to `IBoostrapper.ConfigureSettings()`
- Renames `IBootstrapper.AddServices()` to `IBoostrapper.ConfigureServices()`
- Adds `IBootstrapper.ConfigureEngine()`
- Isolated pipelines can now be dependencies of other pipelines (but output documents still can't be accessed).
- Renames delegate-based `IBootstrapper.AddSettings()` overload to `IBoostrapper.ConfigureSettings()`.
- Renames `IBootstrapper.AddServices()` to `IBoostrapper.ConfigureServices()`.
- Adds `IBootstrapper.ConfigureEngine()`.
- Adds a `StartProcess` module to start a process and create a document from it's output or run it in the background.
- The bootstrapper now adds environment variables to the settings by default with ALL_CAPS keys.
- Any setting with an ALL_CAPS key is masked during debug output on startup.
Expand Down
4 changes: 2 additions & 2 deletions src/core/Statiq.App/PipelineBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -197,9 +197,9 @@ public PipelineBuilder WithManualTrigger()
return this;
}

public PipelineBuilder WithDependencyTrigger()
public PipelineBuilder WithManualOrDependencyTrigger()
{
_actions.Add(x => x.WithDependencyTrigger());
_actions.Add(x => x.WithManualOrDependencyTrigger());
return this;
}

Expand Down
4 changes: 2 additions & 2 deletions src/core/Statiq.Common/Execution/IPipelineExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,10 @@ public static TPipeline WithManualTrigger<TPipeline>(this TPipeline pipeline)
return pipeline;
}

public static TPipeline WithDependencyTrigger<TPipeline>(this TPipeline pipeline)
public static TPipeline WithManualOrDependencyTrigger<TPipeline>(this TPipeline pipeline)
where TPipeline : IPipeline
{
pipeline.Trigger = PipelineTrigger.Dependency;
pipeline.Trigger = PipelineTrigger.ManualOrDependency;
return pipeline;
}

Expand Down
5 changes: 1 addition & 4 deletions src/core/Statiq.Common/Execution/PipelineTrigger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,7 @@ public enum PipelineTrigger
/// The pipeline is not normally executed unless explicitly specified
/// or as a dependency of an executing pipeline.
/// </summary>
/// <remarks>
/// Pipelines triggered by a dependency can also be triggered manually.
/// </remarks>
Dependency,
ManualOrDependency,

/// <summary>
/// The pipeline is always executed, regardless of explicitly specified pipelines.
Expand Down
10 changes: 5 additions & 5 deletions src/core/Statiq.Core/Execution/Engine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -464,15 +464,15 @@ PipelinePhases Visit(string name, IPipeline pipeline)
{
throw new PipelineException($"Could not find pipeline dependency {dependencyName} of {name}");
}
if (dependency.Isolated)
{
throw new PipelineException($"Pipeline {name} can not have dependency on isolated pipeline {dependencyName}");
}
if (dependency.Trigger == PipelineTrigger.Manual)
{
throw new PipelineException($"Pipeline {name} can not have dependency on manually triggered pipeline {dependencyName}");
}
processDependencies.Add(Visit(dependencyName, dependency).Process);
if (!dependency.Isolated)
{
// Only add the phase dependency if the dependency is not isolated
processDependencies.Add(Visit(dependencyName, dependency).Process);
}
}
}

Expand Down
23 changes: 2 additions & 21 deletions tests/core/Statiq.Core.Tests/Execution/EngineFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,11 @@ private Engine GetEngine()
});
engine.Pipelines.Add("C", new TestPipeline
{
Trigger = PipelineTrigger.Dependency
Trigger = PipelineTrigger.ManualOrDependency
});
engine.Pipelines.Add("D", new TestPipeline
{
Trigger = PipelineTrigger.Dependency,
Trigger = PipelineTrigger.ManualOrDependency,
Dependencies = new HashSet<string>(new[] { "A" })
});
engine.Pipelines.Add("E", new TestPipeline
Expand Down Expand Up @@ -184,25 +184,6 @@ public void ThrowsForCyclicDependency()
Should.Throw<PipelineException>(() => Engine.GetPipelinePhases(pipelines, logger));
}

[Test]
public void ThrowsForIsolatedDependency()
{
// Given
IPipelineCollection pipelines = new TestPipelineCollection();
pipelines.Add("Bar", new TestPipeline
{
Isolated = true
});
pipelines.Add("Foo", new TestPipeline
{
Dependencies = new HashSet<string>(new[] { "Bar" })
});
TestLogger logger = new TestLogger();

// When, Then
Should.Throw<PipelineException>(() => Engine.GetPipelinePhases(pipelines, logger));
}

[Test]
public void ThrowsForManualDependency()
{
Expand Down

0 comments on commit 47586eb

Please sign in to comment.