Files
runner/src/Sdk/DTPipelines/Pipelines/DeploymentExecutionOptions.cs
2019-10-10 00:52:42 -04:00

75 lines
2.0 KiB
C#

using System.Runtime.Serialization;
using GitHub.DistributedTask.Pipelines.Validation;
namespace GitHub.DistributedTask.Pipelines
{
[DataContract]
internal enum DeploymentRollingOption
{
[EnumMember]
Absolute,
[EnumMember]
Percentage
}
[DataContract]
internal class DeploymentExecutionOptions
{
public DeploymentExecutionOptions()
{
}
private DeploymentExecutionOptions(DeploymentExecutionOptions optionsToCopy)
{
this.RollingOption = optionsToCopy.RollingOption;
this.RollingValue = optionsToCopy.RollingValue;
}
[DataMember]
public DeploymentRollingOption RollingOption
{
get;
set;
}
[DataMember(EmitDefaultValue = false)]
public uint RollingValue
{
get;
set;
}
public DeploymentExecutionOptions Clone()
{
return new DeploymentExecutionOptions(this);
}
public void Validate(
IPipelineContext context,
ValidationResult result)
{
switch (RollingOption)
{
case DeploymentRollingOption.Absolute:
if (RollingValue == 0)
{
result.Errors.Add(new PipelineValidationError(PipelineStrings.InvalidAbsoluteRollingValue()));
}
break;
case DeploymentRollingOption.Percentage:
if (RollingValue == 0 || RollingValue > 100)
{
result.Errors.Add(new PipelineValidationError(PipelineStrings.InvalidPercentageRollingValue()));
}
break;
default:
result.Errors.Add(new PipelineValidationError(PipelineStrings.InvalidRollingOption(RollingOption)));
break;
}
}
}
}