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
6 changes: 3 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ jobs:
- name: Check out
uses: actions/checkout@v3
- name: Setup .Net
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.100
dotnet-version: 10.x
- name: Restore
run: dotnet restore
- name: Build
Expand Down Expand Up @@ -120,7 +120,7 @@ jobs:
- name: Check out
uses: actions/checkout@v3
- name: Setup .Net
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.x
- name: Restore
Expand Down
10 changes: 5 additions & 5 deletions ADotNet.Infrastructure.Build/Services/ScriptGenerationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
using ADotNet.Clients;
using ADotNet.Models.Pipelines.GithubPipelines.DotNets;
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks;
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV3s;
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV4s;

namespace ADotNet.Infrastructure.Build.Services
{
Expand Down Expand Up @@ -53,11 +53,11 @@ public void GenerateBuildScript(string branchName, string projectName, string do
Name = "Check out"
},

new SetupDotNetTaskV3
new SetupDotNetTaskV4
{
Name = "Setup .Net",

With = new TargetDotNetVersionV3
With = new TargetDotNetVersionV4
{
DotNetVersion = dotNetVersion
}
Expand All @@ -82,7 +82,7 @@ public void GenerateBuildScript(string branchName, string projectName, string do
},
{
"add_tag",
new TagJob(
new TagJobV1(
runsOn: BuildMachines.UbuntuLatest,
dependsOn: "build",
projectRelativePath: "ADotNet/ADotNet.csproj",
Expand All @@ -94,7 +94,7 @@ public void GenerateBuildScript(string branchName, string projectName, string do
},
{
"publish",
new PublishJobV2(
new PublishJobV3(
runsOn: BuildMachines.UbuntuLatest,
dependsOn: "add_tag",
dotNetVersion: dotNetVersion,
Expand Down
102 changes: 102 additions & 0 deletions ADotNet/Models/Pipelines/GithubPipelines/DotNets/PublishJobV3.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
// ---------------------------------------------------------------------------
// Copyright (c) Hassan Habib & Shri Humrudha Jagathisun All rights reserved.
// Licensed under the MIT License.
// See License.txt in the project root for license information.
// ---------------------------------------------------------------------------

using System.Collections.Generic;
using System.ComponentModel;
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks;
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV4s;
using YamlDotNet.Serialization;

namespace ADotNet.Models.Pipelines.GithubPipelines.DotNets
{
public class PublishJobV3 : Job
{
public PublishJobV3(
string runsOn,
string dependsOn,
string dotNetVersion,
string nugetApiKey)
{
RunsOn = runsOn;
Needs = new string[] { dependsOn };

If = $"needs.{dependsOn}.result == 'success'";

Steps = new List<GithubTask> {
new CheckoutTaskV3
{
Name = "Check out"
},

new SetupDotNetTaskV4
{
Name = "Setup .Net",

With = new TargetDotNetVersionV4
{
DotNetVersion = dotNetVersion
}
},

new RestoreTask
{
Name = "Restore"
},

new DotNetBuildReleaseTask
{
Name = "Build",
},

new PackNugetTaskWithSymbols
{
Name = "Pack NuGet Package",
},

new NugetPushTask(nugetApiKey)
{
Name = "Push NuGet Package",
}
};

}

[YamlMember(Order = 0, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new string Name { get; set; }

[YamlMember(Order = 1, Alias = "runs-on")]
public new string RunsOn { get; set; }

[YamlMember(Order = 2, Alias = "needs", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new string[] Needs { get; set; }

[YamlMember(Order = 3, Alias = "if", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new string If { get; set; }

[YamlMember(Order = 4, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new string Environment { get; set; }

[YamlMember(Order = 5, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new DefaultValues Defaults { get; set; }

[YamlMember(Order = 6)]
public new List<GithubTask> Steps { get; set; }

[DefaultValue(0)]
[YamlMember(Order = 7, Alias = "timeout-minutes", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new int TimeoutInMinutes { get; set; }

[YamlMember(Order = 8, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new Strategy Strategy { get; set; }

[YamlMember(Order = 9, Alias = "env", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new Dictionary<string, string> EnvironmentVariables { get; set; }

[YamlMember(Order = 10, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new Dictionary<string, string> Outputs { get; set; }
}
}

141 changes: 141 additions & 0 deletions ADotNet/Models/Pipelines/GithubPipelines/DotNets/TagJobV1.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
// ---------------------------------------------------------------------------
// Copyright (c) Hassan Habib & Shri Humrudha Jagathisun All rights reserved.
// Licensed under the MIT License.
// See License.txt in the project root for license information.
// ---------------------------------------------------------------------------

using System.Collections.Generic;
using System.ComponentModel;
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks;
using YamlDotNet.Serialization;

namespace ADotNet.Models.Pipelines.GithubPipelines.DotNets
{
public sealed class TagJobV1 : Job
{
public TagJobV1(
string runsOn,
string dependsOn,
string projectRelativePath,
string githubToken,
string branchName)
: this(runsOn, new string[] { dependsOn }, projectRelativePath, githubToken, branchName)
{ }

public TagJobV1(
string runsOn,
string[] dependsOn,
string projectRelativePath,
string githubToken,
string branchName)
{
RunsOn = runsOn;
Needs = dependsOn;

If =
$"needs.{string.Join(",", dependsOn)}.result == 'success' && {System.Environment.NewLine}"
+ $"github.event.pull_request.merged && {System.Environment.NewLine}"
+ $"github.event.pull_request.base.ref == '{branchName}' && {System.Environment.NewLine}"
+ $"startsWith(github.event.pull_request.title, 'RELEASES:') && {System.Environment.NewLine}"
+ "contains(github.event.pull_request.labels.*.name, 'RELEASES')";

Steps = new List<GithubTask>
{
new CheckoutTaskV3
{
Name = "Checkout code",
With = new Dictionary<string, string>
{
{ "token", githubToken }
}
},

new ConfigureGitTask()
{
Name = "Configure Git",
},

new ExtractProjectPropertyTask(
name: "Extract Version",
id: "extract_version",
projectRelativePath,
propertyName: "Version",
stepVariableName: "version_number",
runsOn),

new GithubTask()
{
Name = "Display Version",
Run = "echo \"Version number: ${{ steps.extract_version.outputs.version_number }}\""
},

new ExtractProjectPropertyTask(
name: $"Extract Package Release Notes",
id: "extract_package_release_notes",
projectRelativePath,
propertyName: "PackageReleaseNotes",
stepVariableName: "package_release_notes",
runsOn),

new GithubTask()
{
Name = "Display Package Release Notes",
Run =
"echo \"Package Release Notes: "
+ "${{ steps.extract_package_release_notes.outputs.package_release_notes }}\""
},

new CreateGitHubTagTask(
tagName: "v${{ steps.extract_version.outputs.version_number }}",
tagMessage: "Release - v${{ steps.extract_version.outputs.version_number }}")
{
Name = "Create GitHub Tag",
},

new CreateGitHubReleaseTask(
releaseName: "Release - v${{ steps.extract_version.outputs.version_number }}",
tagName: "v${{ steps.extract_version.outputs.version_number }}",
releaseNotes: "${{ steps.extract_package_release_notes.outputs.package_release_notes }}",
githubToken)
{
Name = "Create GitHub Release",
Uses = "actions/create-release@v1",
},
};
}

[YamlMember(Order = 0, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new string Name { get; set; }

[YamlMember(Order = 1, Alias = "runs-on")]
public new string RunsOn { get; set; }

[YamlMember(Order = 2, Alias = "needs", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new string[] Needs { get; set; }

[YamlMember(Order = 3, Alias = "if", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new string If { get; set; }

[YamlMember(Order = 4, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new string Environment { get; set; }

[YamlMember(Order = 5, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new DefaultValues Defaults { get; set; }

[YamlMember(Order = 6)]
public new List<GithubTask> Steps { get; set; }

[DefaultValue(0)]
[YamlMember(Order = 7, Alias = "timeout-minutes", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new int TimeoutInMinutes { get; set; }

[YamlMember(Order = 8, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new Strategy Strategy { get; set; }

[YamlMember(Order = 9, Alias = "env", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new Dictionary<string, string> EnvironmentVariables { get; set; }

[YamlMember(Order = 10, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new Dictionary<string, string> Outputs { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// ---------------------------------------------------------------------------
// Copyright (c) Hassan Habib & Shri Humrudha Jagathisun All rights reserved.
// Licensed under the MIT License.
// See License.txt in the project root for license information.
// ---------------------------------------------------------------------------

using YamlDotNet.Serialization;

namespace ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV4s
{
public class SetupDotNetTaskV4 : GithubTask
{
public SetupDotNetTaskV4()
{
this.Uses = "actions/setup-dotnet@v4";
}

/// <summary>
/// Represents the usage of an external action or a specific version of an action in a GitHub Actions job step.
/// Default value: actions/setup-dotnet@v4
/// </summary>
[YamlMember(Order = 4, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new string Uses { get; private set; }

/// <summary>
/// Used to provide additional configuration or parameters for a specific step in the workflow.
/// </summary>
[YamlMember(Order = 5, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public new TargetDotNetVersionV4 With { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// ---------------------------------------------------------------------------
// Copyright (c) Hassan Habib & Shri Humrudha Jagathisun All rights reserved.
// Licensed under the MIT License.
// See License.txt in the project root for license information.
// ---------------------------------------------------------------------------

using YamlDotNet.Serialization;

namespace ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV4s
{
public class TargetDotNetVersionV4
{
[YamlMember(Alias = "dotnet-version")]
public string DotNetVersion { get; set; }
}
}
Loading