Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Fallout.Common/CI/AzurePipelines/AzurePipelines.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ public void PublishTestResults(
.AddPairWhenValueNotNull("mergeResults", mergeResults)
.AddPairWhenValueNotNull("platform", platform)
.AddPairWhenValueNotNull("config", configuration)
.AddPairWhenValueNotNull("runTitle", title.SingleQuote())
.AddPairWhenValueNotNull("runTitle", title.SingleQuoteYaml())
.AddPairWhenValueNotNull("publishRunAttachments", publishRunAttachments));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public override void Write(CustomFileWriter writer)
{
using (writer.WriteBlock("- task: Cache@2"))
{
writer.WriteLine("displayName: " + $"Cache: {Identifier}".SingleQuote());
writer.WriteLine("displayName: " + $"Cache: {Identifier}".SingleQuoteYaml());
using (writer.WriteBlock("inputs:"))
{
writer.WriteLine($"key: $(Agent.OS) | {Identifier} | {KeyFiles.JoinCommaSpace()}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public override void Write(CustomFileWriter writer)
{
using (writer.WriteBlock("- task: CmdLine@2"))
{
writer.WriteLine("displayName: " + $"Run: {InvokedTargets.JoinCommaSpace()}".SingleQuote());
writer.WriteLine("displayName: " + $"Run: {InvokedTargets.JoinCommaSpace()}".SingleQuoteYaml());

var arguments = $"{InvokedTargets.JoinSpace()} --skip";
if (PartitionSize != null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public override void Write(CustomFileWriter writer)
using (writer.WriteBlock("inputs:"))
{
writer.WriteLine($"artifactName: {ArtifactName}");
writer.WriteLine($"downloadPath: {DownloadPath.SingleQuote()}");
writer.WriteLine($"downloadPath: {DownloadPath.SingleQuoteYaml()}");
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ public override void Write(CustomFileWriter writer)
{
using (writer.WriteBlock($"- job: {Name}"))
{
writer.WriteLine($"displayName: {DisplayName.SingleQuote()}");
writer.WriteLine($"displayName: {DisplayName.SingleQuoteYaml()}");
writer.WriteLine($"dependsOn: [ {Dependencies.Select(x => x.Name).JoinCommaSpace()} ]");

if (Image != null)
{
using (writer.WriteBlock("pool:"))
{
writer.WriteLine($"vmImage: {Image.Value.GetValue().SingleQuote().SingleQuote()}");
writer.WriteLine($"vmImage: {Image.Value.GetValue().SingleQuoteYaml()}");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ public override void Write(CustomFileWriter writer)
{
using (writer.WriteBlock("- task: PublishBuildArtifacts@1"))
{
writer.WriteLine("displayName: " + $"Publish: {ArtifactName}".SingleQuote());
writer.WriteLine("displayName: " + $"Publish: {ArtifactName}".SingleQuoteYaml());
using (writer.WriteBlock("inputs:"))
{
writer.WriteLine($"artifactName: {ArtifactName}");
writer.WriteLine($"pathToPublish: {PathToPublish.SingleQuote()}");
writer.WriteLine($"pathToPublish: {PathToPublish.SingleQuoteYaml()}");
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ public override void Write(CustomFileWriter writer)
{
using (writer.WriteBlock($"- stage: {Name}"))
{
writer.WriteLine($"displayName: {DisplayName.SingleQuote()}");
writer.WriteLine($"displayName: {DisplayName.SingleQuoteYaml()}");
writer.WriteLine($"dependsOn: [ {Dependencies.Select(x => x.Name).JoinCommaSpace()} ]");

if (Image != null)
{
using (writer.WriteBlock("pool:"))
{
writer.WriteLine($"vmImage: {Image.Value.GetValue().SingleQuote()}");
writer.WriteLine($"vmImage: {Image.Value.GetValue().SingleQuoteYaml()}");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class GitHubActionsArtifactStep : GitHubActionsStep

public override void Write(CustomFileWriter writer)
{
writer.WriteLine("- name: " + $"Publish: {Name}".SingleQuote());
writer.WriteLine("- name: " + $"Publish: {Name}".SingleQuoteYaml());
writer.WriteLine(" uses: actions/upload-artifact@v5");

using (writer.Indent())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class GitHubActionsCacheStep : GitHubActionsStep

public override void Write(CustomFileWriter writer)
{
writer.WriteLine("- name: " + $"Cache: {IncludePatterns.JoinCommaSpace()}".SingleQuote());
writer.WriteLine("- name: " + $"Cache: {IncludePatterns.JoinCommaSpace()}".SingleQuoteYaml());
using (writer.Indent())
{
writer.WriteLine("uses: actions/cache@v4");
Expand All @@ -24,7 +24,7 @@ public override void Write(CustomFileWriter writer)
writer.WriteLine("path: |");
IncludePatterns.ForEach(x => writer.WriteLine($" {x}"));
ExcludePatterns.ForEach(x => writer.WriteLine($" !{x}"));
writer.WriteLine($"key: ${{{{ runner.os }}}}-${{{{ hashFiles({KeyFiles.Select(x => x.SingleQuote()).JoinCommaSpace()}) }}}}");
writer.WriteLine($"key: ${{{{ runner.os }}}}-${{{{ hashFiles({KeyFiles.Select(x => x.SingleQuoteYaml()).JoinCommaSpace()}) }}}}");
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public override void Write(CustomFileWriter writer)
writer.WriteLine("run: dotnet tool restore");
}

writer.WriteLine("- name: " + $"Run: {InvokedTargets.JoinCommaSpace()}".SingleQuote());
writer.WriteLine("- name: " + $"Run: {InvokedTargets.JoinCommaSpace()}".SingleQuoteYaml());
using (writer.Indent())
{
writer.WriteLine($"run: dotnet fallout {InvokedTargets.JoinSpace()}");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- job: Compile
displayName: 'Bob''s Job'
dependsOn: [ ]
steps:
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
- job: Compile
displayName: 'Compile Job'
dependsOn: [ ]
pool:
vmImage: 'ubuntu-22.04'
steps:
31 changes: 31 additions & 0 deletions tests/Fallout.Common.Specs/CI/AzurePipelinesJobSpecs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using System.IO;
using System.Threading.Tasks;
using Fallout.Common.CI.AzurePipelines;
using Fallout.Common.CI.AzurePipelines.Configuration;
using Xunit;

namespace Fallout.Common.Specs.CI;

public class AzurePipelinesJobSpecs
{
[Fact]
public Task DisplayName_with_an_apostrophe_is_yaml_escaped()
=> ConfigurationEntityVerifier.Verify(new AzurePipelinesJob
{
Name = "Compile",
DisplayName = "Bob's Job",
Dependencies = new AzurePipelinesJob[0],
Steps = new AzurePipelinesStep[0]
});

[Fact]
public Task VmImage_is_quoted_correctly_without_double_wrapping_quirk()
=> ConfigurationEntityVerifier.Verify(new AzurePipelinesJob
{
Name = "Compile",
DisplayName = "Compile Job",
Dependencies = new AzurePipelinesJob[0],
Steps = new AzurePipelinesStep[0],
Image = AzurePipelinesImage.Ubuntu2204
});
}
21 changes: 21 additions & 0 deletions tests/Fallout.Common.Specs/CI/ConfigurationEntityVerifier.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System.IO;
using System.Threading.Tasks;
using Fallout.Common.CI;
using Fallout.Common.Utilities;
using VerifyXunit;

namespace Fallout.Common.Specs.CI;

public static class ConfigurationEntityVerifier
{
public static Task Verify(ConfigurationEntity entity)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream, leaveOpen: true);
entity.Write(new CustomFileWriter(writer, indentationFactor: 2, commentPrefix: "#"));
writer.Flush();

stream.Seek(offset: 0, SeekOrigin.Begin);
return Verifier.Verify(new StreamReader(stream).ReadToEnd());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- name: 'Publish: Bob''s Build'
uses: actions/upload-artifact@v5
with:
name: Bob's Build
path: out
13 changes: 13 additions & 0 deletions tests/Fallout.Common.Specs/CI/GitHubActionsArtifactStepSpecs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System.IO;
using System.Threading.Tasks;
using Fallout.Common.CI.GitHubActions.Configuration;
using Xunit;

namespace Fallout.Common.Specs.CI;

public class GitHubActionsArtifactStepSpecs
{
[Fact]
public Task Name_with_an_apostrophe_is_yaml_escaped()
=> ConfigurationEntityVerifier.Verify(new GitHubActionsArtifactStep { Name = "Bob's Build", Path = "out", Condition = "" });
}
Loading