Skip to content

Commit 0debb99

Browse files
committed
Merge pull request #3852 from arturcic/main
Arm64 - disable testing the artifacts as well as the docker images for Arm64
2 parents 4722a7e + fe8e894 commit 0debb99

14 files changed

+57
-36
lines changed

.github/workflows/_docker.yml

+10
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ jobs:
3737
with:
3838
name: nuget
3939
path: ${{ github.workspace }}/artifacts/packages/nuget
40+
-
41+
name: Setup QEMU
42+
if: inputs.arch == 'arm64'
43+
uses: docker/setup-qemu-action@v3
44+
-
45+
name: Setup Docker Buildx
46+
if: inputs.arch == 'arm64'
47+
uses: docker/setup-buildx-action@v3
48+
with:
49+
install: true
4050
-
4151
name: Docker Test
4252
if: success() && github.event_name == 'pull_request' || github.repository_owner != 'GitTools'

.github/workflows/ci.yml

+12-5
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,14 @@ jobs:
6262
strategy:
6363
fail-fast: false
6464
matrix:
65-
arch: [ amd64, amd64 ]
66-
65+
include:
66+
- arch: amd64
67+
runner: ubuntu-latest
68+
- arch: arm64
69+
runner: ubuntu-latest
6770
uses: ./.github/workflows/_artifacts_linux.yml
6871
with:
69-
runner: ubuntu-latest
72+
runner: ${{ matrix.runner }}
7073
arch: ${{ matrix.arch }}
7174

7275
docker_linux_images:
@@ -75,11 +78,15 @@ jobs:
7578
strategy:
7679
fail-fast: false
7780
matrix:
78-
arch: [ amd64, amd64 ]
81+
include:
82+
- arch: amd64
83+
runner: ubuntu-latest
84+
- arch: arm64
85+
runner: ubuntu-latest
7986

8087
uses: ./.github/workflows/_docker.yml
8188
with:
82-
runner: ubuntu-latest
89+
runner: ${{ matrix.runner }}
8390
arch: ${{ matrix.arch }}
8491
secrets: inherit
8592

build/artifacts/BuildLifetime.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public override void Setup(BuildContext context, ISetupContext info)
1919
var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistrosToBuild : [dockerDistro];
2020

2121
var architectures = context.HasArgument(Arguments.Architecture) ? context.Arguments<Architecture>(Arguments.Architecture) : Constants.ArchToBuild;
22-
22+
var platformArch = context.IsRunningOnAmd64() ? Architecture.Amd64 : Architecture.Arm64;
2323

2424
var registry = dockerRegistry == DockerRegistry.DockerHub ? Constants.DockerHubRegistry : Constants.GitHubContainerRegistry;
2525
context.Images = from version in versions
@@ -32,7 +32,8 @@ from arch in architectures
3232
LogBuildInformation(context);
3333

3434
context.Information($"IsDockerOnLinux: {context.IsDockerOnLinux}");
35-
context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}");
35+
context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}, Architecture: {platformArch}");
36+
3637
context.EndGroup();
3738
}
3839
}

build/artifacts/Tasks/ArtifactsDotnetToolTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public override void Run(BuildContext context)
2727

2828
foreach (var dockerImage in context.Images)
2929
{
30-
if (context.SkipImageForArtifacts(dockerImage)) continue;
30+
if (context.SkipImageTesting(dockerImage)) continue;
3131

3232
var cmd = $"{rootPrefix}/scripts/test-global-tool.sh --version {version} --nugetPath {rootPrefix}/nuget --repoPath {rootPrefix}/repo";
3333

build/artifacts/Tasks/ArtifactsMsBuildCoreTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public override void Run(BuildContext context)
2626

2727
foreach (var dockerImage in context.Images)
2828
{
29-
if (context.SkipImageForArtifacts(dockerImage)) continue;
29+
if (context.SkipImageTesting(dockerImage)) continue;
3030

3131
var framework = dockerImage.TargetFramework;
3232

build/artifacts/Tasks/ArtifactsNativeTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public override void Run(BuildContext context)
2727

2828
foreach (var dockerImage in context.Images)
2929
{
30-
if (context.SkipImageForArtifacts(dockerImage)) continue;
30+
if (context.SkipImageTesting(dockerImage)) continue;
3131

3232
var runtime = "linux";
3333
if (dockerImage.Distro.StartsWith("alpine"))

build/artifacts/Tasks/ArtifactsPrepare.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public override void Run(BuildContext context)
2121
{
2222
foreach (var dockerImage in context.Images)
2323
{
24-
if (context.SkipImageForArtifacts(dockerImage)) continue;
24+
if (context.SkipImageTesting(dockerImage)) continue;
2525
context.DockerPullImage(dockerImage);
2626
}
2727
}

build/common/Utilities/Constants.cs

-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ public class Constants
2222
public static readonly string[] VersionsToBuild = [Version60, Version70, Version80];
2323
public static readonly string[] Frameworks = [NetVersion60, NetVersion70, NetVersion80];
2424

25-
public static readonly string[] DistrosToSkipForArtifacts = [];
26-
public static readonly string[] DistrosToSkipForDocker = [];
27-
2825
public const string DockerBaseImageName = "gittools/build-images";
2926
public const string DockerImageName = "gittools/gitversion";
3027

build/common/Utilities/ContextExtensions.cs

+12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
using System.Runtime.InteropServices;
12
using Cake.Common.Build.AzurePipelines;
23
using Xunit;
4+
using ProcessArchitecture = System.Runtime.InteropServices.Architecture;
35

46
namespace Common.Utilities;
57

@@ -12,6 +14,7 @@ public static IEnumerable<string> ExecuteCommand(this ICakeContext context, File
1214
{
1315
processSettings.WorkingDirectory = workDir;
1416
}
17+
1518
context.StartProcess(exe, processSettings, out var redirectedOutput);
1619
return redirectedOutput.ToList();
1720
}
@@ -79,6 +82,12 @@ public static string GetOS(this ICakeContext context)
7982
return string.Empty;
8083
}
8184

85+
public static bool IsRunningOnAmd64(this ICakeContext _)
86+
=> RuntimeInformation.ProcessArchitecture == ProcessArchitecture.X64;
87+
88+
public static bool IsRunningOnArm64(this ICakeContext _) =>
89+
RuntimeInformation.ProcessArchitecture == ProcessArchitecture.Arm64;
90+
8291
public static string GetBuildAgent(this ICakeContext context)
8392
{
8493
var buildSystem = context.BuildSystem();
@@ -142,6 +151,7 @@ public static string GetBranchName(this ICakeContext context)
142151
{
143152
repositoryBranch = buildSystem.GitHubActions.Environment.Workflow.Ref.Replace("refs/heads/", "");
144153
}
154+
145155
return repositoryBranch;
146156
}
147157

@@ -161,6 +171,7 @@ public static string GetRepositoryName(this ICakeContext context)
161171
{
162172
repositoryName = buildSystem.GitHubActions.Environment.Workflow.Repository;
163173
}
174+
164175
return repositoryName;
165176
}
166177

@@ -172,6 +183,7 @@ public static string GetRepositoryName(this ICakeContext context)
172183
context.GetFiles($"src/GitVersion.App/bin/{Constants.DefaultConfiguration}/{Constants.NetVersionLatest}/gitversion.dll").SingleOrDefault();
173184
public static FilePath? GetGitVersionDotnetToolLocation(this ICakeContext context) =>
174185
context.MakeAbsolute(Paths.Tools.Combine("gitversion").CombineWithFilePath("gitversion.dll"));
186+
175187
public static FilePath? GetSchemaDotnetToolLocation(this ICakeContext context) =>
176188
context.MakeAbsolute(Paths.Tools.Combine("schema").CombineWithFilePath("schema.dll"));
177189
}

build/common/Utilities/DockerContextExtensions.cs

+10-17
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,19 @@ public enum Architecture
1010

1111
public static class DockerContextExtensions
1212
{
13-
public static bool SkipImageForArtifacts(this ICakeContext context, DockerImage dockerImage)
13+
public static bool SkipImageTesting(this ICakeContext context, DockerImage dockerImage)
1414
{
1515
var (distro, targetFramework, architecture, _, _) = dockerImage;
1616

17-
if (architecture == Architecture.Amd64) return false;
18-
if (!Constants.DistrosToSkipForArtifacts.Contains(distro)) return false;
19-
20-
context.Information($"Skipping Target: {targetFramework}, Distro: {distro}, Arch: {architecture}");
21-
return true;
22-
}
23-
24-
public static bool SkipImageForDocker(this ICakeContext context, DockerImage dockerImage)
25-
{
26-
var (distro, targetFramework, architecture, _, _) = dockerImage;
27-
28-
if (architecture == Architecture.Amd64) return false;
29-
if (!Constants.DistrosToSkipForDocker.Contains(distro)) return false;
30-
31-
context.Information($"Skipping Target: {targetFramework}, Distro: {distro}, Arch: {architecture}");
32-
return true;
17+
switch (architecture)
18+
{
19+
case Architecture.Amd64:
20+
case Architecture.Arm64 when context.IsRunningOnArm64():
21+
return false;
22+
default:
23+
context.Information($"Skipping Target: {targetFramework}, Distro: {distro}, Arch: {architecture}");
24+
return true;
25+
}
3326
}
3427

3528
public static void DockerBuildImage(this BuildContextBase context, DockerImage dockerImage)

build/docker/BuildLifetime.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,18 @@ public override void Setup(BuildContext context, ISetupContext info)
1414

1515
context.IsDockerOnLinux = context.DockerCustomCommand("info --format '{{.OSType}}'").First().Replace("'", "") == "linux";
1616

17-
var architectures = context.HasArgument(Arguments.Architecture) ? context.Arguments<Architecture>(Arguments.Architecture) : Constants.ArchToBuild;
1817
var dockerRegistry = context.Argument(Arguments.DockerRegistry, DockerRegistry.DockerHub);
1918
var dotnetVersion = context.Argument(Arguments.DockerDotnetVersion, string.Empty).ToLower();
2019
var dockerDistro = context.Argument(Arguments.DockerDistro, string.Empty).ToLower();
2120

2221
var versions = string.IsNullOrWhiteSpace(dotnetVersion) ? Constants.VersionsToBuild : [dotnetVersion];
2322
var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistrosToBuild : [dockerDistro];
2423

24+
var architectures = context.HasArgument(Arguments.Architecture) ? context.Arguments<Architecture>(Arguments.Architecture) : Constants.ArchToBuild;
25+
var platformArch = context.IsRunningOnAmd64() ? Architecture.Amd64 : Architecture.Arm64;
26+
2527
var registry = dockerRegistry == DockerRegistry.DockerHub ? Constants.DockerHubRegistry : Constants.GitHubContainerRegistry;
28+
2629
context.DockerRegistry = dockerRegistry;
2730
context.Architectures = architectures;
2831
context.Images = from version in versions
@@ -35,7 +38,7 @@ from arch in architectures
3538
LogBuildInformation(context);
3639

3740
context.Information($"IsDockerOnLinux: {context.IsDockerOnLinux}");
38-
context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}");
41+
context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}, Architecture: {platformArch}");
3942
context.EndGroup();
4043
}
4144
}

build/docker/Tasks/DockerBuild.cs

-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ public override void Run(BuildContext context)
2727

2828
foreach (var dockerImage in context.Images)
2929
{
30-
if (context.SkipImageForDocker(dockerImage)) continue;
3130
context.DockerBuildImage(dockerImage);
3231
}
3332
}

build/docker/Tasks/DockerPublish.cs

-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ public override void Run(BuildContext context)
4545
{
4646
foreach (var dockerImage in context.Images)
4747
{
48-
if (context.SkipImageForDocker(dockerImage)) continue;
4948
context.DockerPushImage(dockerImage);
5049
}
5150
}

build/docker/Tasks/DockerTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public override void Run(BuildContext context)
2323
{
2424
foreach (var dockerImage in context.Images)
2525
{
26-
if (context.SkipImageForDocker(dockerImage)) continue;
26+
if (context.SkipImageTesting(dockerImage)) continue;
2727
context.DockerTestImage(dockerImage);
2828
}
2929
}

0 commit comments

Comments
 (0)