Skip to content

Commit bbbfc97

Browse files
committed
CODE RUB: Updated Setup, Target, Publish And Tag Component
1 parent 193d16c commit bbbfc97

6 files changed

Lines changed: 298 additions & 8 deletions

File tree

.github/workflows/build.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ jobs:
1919
- name: Check out
2020
uses: actions/checkout@v3
2121
- name: Setup .Net
22-
uses: actions/setup-dotnet@v3
22+
uses: actions/setup-dotnet@v4
2323
with:
24-
dotnet-version: 9.0.100
24+
dotnet-version: 10.x
2525
- name: Restore
2626
run: dotnet restore
2727
- name: Build
@@ -120,7 +120,7 @@ jobs:
120120
- name: Check out
121121
uses: actions/checkout@v3
122122
- name: Setup .Net
123-
uses: actions/setup-dotnet@v3
123+
uses: actions/setup-dotnet@v4
124124
with:
125125
dotnet-version: 10.x
126126
- name: Restore

ADotNet.Infrastructure.Build/Services/ScriptGenerationService.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
using ADotNet.Clients;
1010
using ADotNet.Models.Pipelines.GithubPipelines.DotNets;
1111
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks;
12-
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV3s;
12+
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV4s;
1313

1414
namespace ADotNet.Infrastructure.Build.Services
1515
{
@@ -53,11 +53,11 @@ public void GenerateBuildScript(string branchName, string projectName, string do
5353
Name = "Check out"
5454
},
5555

56-
new SetupDotNetTaskV3
56+
new SetupDotNetTaskV4
5757
{
5858
Name = "Setup .Net",
5959

60-
With = new TargetDotNetVersionV3
60+
With = new TargetDotNetVersionV4
6161
{
6262
DotNetVersion = dotNetVersion
6363
}
@@ -82,7 +82,7 @@ public void GenerateBuildScript(string branchName, string projectName, string do
8282
},
8383
{
8484
"add_tag",
85-
new TagJob(
85+
new TagJobV1(
8686
runsOn: BuildMachines.UbuntuLatest,
8787
dependsOn: "build",
8888
projectRelativePath: "ADotNet/ADotNet.csproj",
@@ -94,7 +94,7 @@ public void GenerateBuildScript(string branchName, string projectName, string do
9494
},
9595
{
9696
"publish",
97-
new PublishJobV2(
97+
new PublishJobV3(
9898
runsOn: BuildMachines.UbuntuLatest,
9999
dependsOn: "add_tag",
100100
dotNetVersion: dotNetVersion,
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// ---------------------------------------------------------------------------
2+
// Copyright (c) Hassan Habib & Shri Humrudha Jagathisun All rights reserved.
3+
// Licensed under the MIT License.
4+
// See License.txt in the project root for license information.
5+
// ---------------------------------------------------------------------------
6+
7+
using System.Collections.Generic;
8+
using System.ComponentModel;
9+
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks;
10+
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV4s;
11+
using YamlDotNet.Serialization;
12+
13+
namespace ADotNet.Models.Pipelines.GithubPipelines.DotNets
14+
{
15+
public class PublishJobV3 : Job
16+
{
17+
public PublishJobV3(
18+
string runsOn,
19+
string dependsOn,
20+
string dotNetVersion,
21+
string nugetApiKey)
22+
{
23+
RunsOn = runsOn;
24+
Needs = new string[] { dependsOn };
25+
26+
If = $"needs.{dependsOn}.result == 'success'";
27+
28+
Steps = new List<GithubTask> {
29+
new CheckoutTaskV3
30+
{
31+
Name = "Check out"
32+
},
33+
34+
new SetupDotNetTaskV4
35+
{
36+
Name = "Setup .Net",
37+
38+
With = new TargetDotNetVersionV4
39+
{
40+
DotNetVersion = dotNetVersion
41+
}
42+
},
43+
44+
new RestoreTask
45+
{
46+
Name = "Restore"
47+
},
48+
49+
new DotNetBuildReleaseTask
50+
{
51+
Name = "Build",
52+
},
53+
54+
new PackNugetTaskWithSymbols
55+
{
56+
Name = "Pack NuGet Package",
57+
},
58+
59+
new NugetPushTask(nugetApiKey)
60+
{
61+
Name = "Push NuGet Package",
62+
}
63+
};
64+
65+
}
66+
67+
[YamlMember(Order = 0, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
68+
public new string Name { get; set; }
69+
70+
[YamlMember(Order = 1, Alias = "runs-on")]
71+
public new string RunsOn { get; set; }
72+
73+
[YamlMember(Order = 2, Alias = "needs", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
74+
public new string[] Needs { get; set; }
75+
76+
[YamlMember(Order = 3, Alias = "if", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
77+
public new string If { get; set; }
78+
79+
[YamlMember(Order = 4, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
80+
public new string Environment { get; set; }
81+
82+
[YamlMember(Order = 5, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
83+
public new DefaultValues Defaults { get; set; }
84+
85+
[YamlMember(Order = 6)]
86+
public new List<GithubTask> Steps { get; set; }
87+
88+
[DefaultValue(0)]
89+
[YamlMember(Order = 7, Alias = "timeout-minutes", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
90+
public new int TimeoutInMinutes { get; set; }
91+
92+
[YamlMember(Order = 8, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
93+
public new Strategy Strategy { get; set; }
94+
95+
[YamlMember(Order = 9, Alias = "env", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
96+
public new Dictionary<string, string> EnvironmentVariables { get; set; }
97+
98+
[YamlMember(Order = 10, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
99+
public new Dictionary<string, string> Outputs { get; set; }
100+
}
101+
}
102+
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
// ---------------------------------------------------------------------------
2+
// Copyright (c) Hassan Habib & Shri Humrudha Jagathisun All rights reserved.
3+
// Licensed under the MIT License.
4+
// See License.txt in the project root for license information.
5+
// ---------------------------------------------------------------------------
6+
7+
using System.Collections.Generic;
8+
using System.ComponentModel;
9+
using ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks;
10+
using YamlDotNet.Serialization;
11+
12+
namespace ADotNet.Models.Pipelines.GithubPipelines.DotNets
13+
{
14+
public sealed class TagJobV1 : Job
15+
{
16+
public TagJobV1(
17+
string runsOn,
18+
string dependsOn,
19+
string projectRelativePath,
20+
string githubToken,
21+
string branchName)
22+
: this(runsOn, new string[] { dependsOn }, projectRelativePath, githubToken, branchName)
23+
{ }
24+
25+
public TagJobV1(
26+
string runsOn,
27+
string[] dependsOn,
28+
string projectRelativePath,
29+
string githubToken,
30+
string branchName)
31+
{
32+
RunsOn = runsOn;
33+
Needs = dependsOn;
34+
35+
If =
36+
$"needs.{string.Join(",", dependsOn)}.result == 'success' && {System.Environment.NewLine}"
37+
+ $"github.event.pull_request.merged && {System.Environment.NewLine}"
38+
+ $"github.event.pull_request.base.ref == '{branchName}' && {System.Environment.NewLine}"
39+
+ $"startsWith(github.event.pull_request.title, 'RELEASES:') && {System.Environment.NewLine}"
40+
+ "contains(github.event.pull_request.labels.*.name, 'RELEASES')";
41+
42+
Steps = new List<GithubTask>
43+
{
44+
new CheckoutTaskV3
45+
{
46+
Name = "Checkout code",
47+
With = new Dictionary<string, string>
48+
{
49+
{ "token", githubToken }
50+
}
51+
},
52+
53+
new ConfigureGitTask()
54+
{
55+
Name = "Configure Git",
56+
},
57+
58+
new ExtractProjectPropertyTask(
59+
name: "Extract Version",
60+
id: "extract_version",
61+
projectRelativePath,
62+
propertyName: "Version",
63+
stepVariableName: "version_number",
64+
runsOn),
65+
66+
new GithubTask()
67+
{
68+
Name = "Display Version",
69+
Run = "echo \"Version number: ${{ steps.extract_version.outputs.version_number }}\""
70+
},
71+
72+
new ExtractProjectPropertyTask(
73+
name: $"Extract Package Release Notes",
74+
id: "extract_package_release_notes",
75+
projectRelativePath,
76+
propertyName: "PackageReleaseNotes",
77+
stepVariableName: "package_release_notes",
78+
runsOn),
79+
80+
new GithubTask()
81+
{
82+
Name = "Display Package Release Notes",
83+
Run =
84+
"echo \"Package Release Notes: "
85+
+ "${{ steps.extract_package_release_notes.outputs.package_release_notes }}\""
86+
},
87+
88+
new CreateGitHubTagTask(
89+
tagName: "v${{ steps.extract_version.outputs.version_number }}",
90+
tagMessage: "Release - v${{ steps.extract_version.outputs.version_number }}")
91+
{
92+
Name = "Create GitHub Tag",
93+
},
94+
95+
new CreateGitHubReleaseTask(
96+
releaseName: "Release - v${{ steps.extract_version.outputs.version_number }}",
97+
tagName: "v${{ steps.extract_version.outputs.version_number }}",
98+
releaseNotes: "${{ steps.extract_package_release_notes.outputs.package_release_notes }}",
99+
githubToken)
100+
{
101+
Name = "Create GitHub Release",
102+
Uses = "actions/create-release@v1",
103+
},
104+
};
105+
}
106+
107+
[YamlMember(Order = 0, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
108+
public new string Name { get; set; }
109+
110+
[YamlMember(Order = 1, Alias = "runs-on")]
111+
public new string RunsOn { get; set; }
112+
113+
[YamlMember(Order = 2, Alias = "needs", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
114+
public new string[] Needs { get; set; }
115+
116+
[YamlMember(Order = 3, Alias = "if", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
117+
public new string If { get; set; }
118+
119+
[YamlMember(Order = 4, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
120+
public new string Environment { get; set; }
121+
122+
[YamlMember(Order = 5, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
123+
public new DefaultValues Defaults { get; set; }
124+
125+
[YamlMember(Order = 6)]
126+
public new List<GithubTask> Steps { get; set; }
127+
128+
[DefaultValue(0)]
129+
[YamlMember(Order = 7, Alias = "timeout-minutes", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
130+
public new int TimeoutInMinutes { get; set; }
131+
132+
[YamlMember(Order = 8, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
133+
public new Strategy Strategy { get; set; }
134+
135+
[YamlMember(Order = 9, Alias = "env", DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
136+
public new Dictionary<string, string> EnvironmentVariables { get; set; }
137+
138+
[YamlMember(Order = 10, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
139+
public new Dictionary<string, string> Outputs { get; set; }
140+
}
141+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// ---------------------------------------------------------------------------
2+
// Copyright (c) Hassan Habib & Shri Humrudha Jagathisun All rights reserved.
3+
// Licensed under the MIT License.
4+
// See License.txt in the project root for license information.
5+
// ---------------------------------------------------------------------------
6+
7+
using YamlDotNet.Serialization;
8+
9+
namespace ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV4s
10+
{
11+
public class SetupDotNetTaskV4 : GithubTask
12+
{
13+
public SetupDotNetTaskV4()
14+
{
15+
this.Uses = "actions/setup-dotnet@v4";
16+
}
17+
18+
/// <summary>
19+
/// Represents the usage of an external action or a specific version of an action in a GitHub Actions job step.
20+
/// Default value: actions/setup-dotnet@v4
21+
/// </summary>
22+
[YamlMember(Order = 4, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
23+
public new string Uses { get; private set; }
24+
25+
/// <summary>
26+
/// Used to provide additional configuration or parameters for a specific step in the workflow.
27+
/// </summary>
28+
[YamlMember(Order = 5, DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
29+
public new TargetDotNetVersionV4 With { get; set; }
30+
}
31+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// ---------------------------------------------------------------------------
2+
// Copyright (c) Hassan Habib & Shri Humrudha Jagathisun All rights reserved.
3+
// Licensed under the MIT License.
4+
// See License.txt in the project root for license information.
5+
// ---------------------------------------------------------------------------
6+
7+
using YamlDotNet.Serialization;
8+
9+
namespace ADotNet.Models.Pipelines.GithubPipelines.DotNets.Tasks.SetupDotNetTaskV4s
10+
{
11+
public class TargetDotNetVersionV4
12+
{
13+
[YamlMember(Alias = "dotnet-version")]
14+
public string DotNetVersion { get; set; }
15+
}
16+
}

0 commit comments

Comments
 (0)