Skip to content

Commit

Permalink
Merge pull request #3852 from arturcic/main
Browse files Browse the repository at this point in the history
Arm64 - disable testing the artifacts as well as the docker images for Arm64
  • Loading branch information
arturcic committed Dec 29, 2023
2 parents 4722a7e + fe8e894 commit 0debb99
Show file tree
Hide file tree
Showing 14 changed files with 57 additions and 36 deletions.
10 changes: 10 additions & 0 deletions .github/workflows/_docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@ jobs:
with:
name: nuget
path: ${{ github.workspace }}/artifacts/packages/nuget
-
name: Setup QEMU
if: inputs.arch == 'arm64'
uses: docker/setup-qemu-action@v3
-
name: Setup Docker Buildx
if: inputs.arch == 'arm64'
uses: docker/setup-buildx-action@v3
with:
install: true
-
name: Docker Test
if: success() && github.event_name == 'pull_request' || github.repository_owner != 'GitTools'
Expand Down
17 changes: 12 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,14 @@ jobs:
strategy:
fail-fast: false
matrix:
arch: [ amd64, amd64 ]

include:
- arch: amd64
runner: ubuntu-latest
- arch: arm64
runner: ubuntu-latest
uses: ./.github/workflows/_artifacts_linux.yml
with:
runner: ubuntu-latest
runner: ${{ matrix.runner }}
arch: ${{ matrix.arch }}

docker_linux_images:
Expand All @@ -75,11 +78,15 @@ jobs:
strategy:
fail-fast: false
matrix:
arch: [ amd64, amd64 ]
include:
- arch: amd64
runner: ubuntu-latest
- arch: arm64
runner: ubuntu-latest

uses: ./.github/workflows/_docker.yml
with:
runner: ubuntu-latest
runner: ${{ matrix.runner }}
arch: ${{ matrix.arch }}
secrets: inherit

Expand Down
5 changes: 3 additions & 2 deletions build/artifacts/BuildLifetime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public override void Setup(BuildContext context, ISetupContext info)
var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistrosToBuild : [dockerDistro];

var architectures = context.HasArgument(Arguments.Architecture) ? context.Arguments<Architecture>(Arguments.Architecture) : Constants.ArchToBuild;

var platformArch = context.IsRunningOnAmd64() ? Architecture.Amd64 : Architecture.Arm64;

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

context.Information($"IsDockerOnLinux: {context.IsDockerOnLinux}");
context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}");
context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}, Architecture: {platformArch}");

context.EndGroup();
}
}
2 changes: 1 addition & 1 deletion build/artifacts/Tasks/ArtifactsDotnetToolTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public override void Run(BuildContext context)

foreach (var dockerImage in context.Images)
{
if (context.SkipImageForArtifacts(dockerImage)) continue;
if (context.SkipImageTesting(dockerImage)) continue;

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

Expand Down
2 changes: 1 addition & 1 deletion build/artifacts/Tasks/ArtifactsMsBuildCoreTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public override void Run(BuildContext context)

foreach (var dockerImage in context.Images)
{
if (context.SkipImageForArtifacts(dockerImage)) continue;
if (context.SkipImageTesting(dockerImage)) continue;

var framework = dockerImage.TargetFramework;

Expand Down
2 changes: 1 addition & 1 deletion build/artifacts/Tasks/ArtifactsNativeTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public override void Run(BuildContext context)

foreach (var dockerImage in context.Images)
{
if (context.SkipImageForArtifacts(dockerImage)) continue;
if (context.SkipImageTesting(dockerImage)) continue;

var runtime = "linux";
if (dockerImage.Distro.StartsWith("alpine"))
Expand Down
2 changes: 1 addition & 1 deletion build/artifacts/Tasks/ArtifactsPrepare.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public override void Run(BuildContext context)
{
foreach (var dockerImage in context.Images)
{
if (context.SkipImageForArtifacts(dockerImage)) continue;
if (context.SkipImageTesting(dockerImage)) continue;
context.DockerPullImage(dockerImage);
}
}
Expand Down
3 changes: 0 additions & 3 deletions build/common/Utilities/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ public class Constants
public static readonly string[] VersionsToBuild = [Version60, Version70, Version80];
public static readonly string[] Frameworks = [NetVersion60, NetVersion70, NetVersion80];

public static readonly string[] DistrosToSkipForArtifacts = [];
public static readonly string[] DistrosToSkipForDocker = [];

public const string DockerBaseImageName = "gittools/build-images";
public const string DockerImageName = "gittools/gitversion";

Expand Down
12 changes: 12 additions & 0 deletions build/common/Utilities/ContextExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System.Runtime.InteropServices;
using Cake.Common.Build.AzurePipelines;
using Xunit;
using ProcessArchitecture = System.Runtime.InteropServices.Architecture;

namespace Common.Utilities;

Expand All @@ -12,6 +14,7 @@ public static IEnumerable<string> ExecuteCommand(this ICakeContext context, File
{
processSettings.WorkingDirectory = workDir;
}

context.StartProcess(exe, processSettings, out var redirectedOutput);
return redirectedOutput.ToList();
}
Expand Down Expand Up @@ -79,6 +82,12 @@ public static string GetOS(this ICakeContext context)
return string.Empty;
}

public static bool IsRunningOnAmd64(this ICakeContext _)
=> RuntimeInformation.ProcessArchitecture == ProcessArchitecture.X64;

public static bool IsRunningOnArm64(this ICakeContext _) =>
RuntimeInformation.ProcessArchitecture == ProcessArchitecture.Arm64;

public static string GetBuildAgent(this ICakeContext context)
{
var buildSystem = context.BuildSystem();
Expand Down Expand Up @@ -142,6 +151,7 @@ public static string GetBranchName(this ICakeContext context)
{
repositoryBranch = buildSystem.GitHubActions.Environment.Workflow.Ref.Replace("refs/heads/", "");
}

return repositoryBranch;
}

Expand All @@ -161,6 +171,7 @@ public static string GetRepositoryName(this ICakeContext context)
{
repositoryName = buildSystem.GitHubActions.Environment.Workflow.Repository;
}

return repositoryName;
}

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

public static FilePath? GetSchemaDotnetToolLocation(this ICakeContext context) =>
context.MakeAbsolute(Paths.Tools.Combine("schema").CombineWithFilePath("schema.dll"));
}
27 changes: 10 additions & 17 deletions build/common/Utilities/DockerContextExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,19 @@ public enum Architecture

public static class DockerContextExtensions
{
public static bool SkipImageForArtifacts(this ICakeContext context, DockerImage dockerImage)
public static bool SkipImageTesting(this ICakeContext context, DockerImage dockerImage)
{
var (distro, targetFramework, architecture, _, _) = dockerImage;

if (architecture == Architecture.Amd64) return false;
if (!Constants.DistrosToSkipForArtifacts.Contains(distro)) return false;

context.Information($"Skipping Target: {targetFramework}, Distro: {distro}, Arch: {architecture}");
return true;
}

public static bool SkipImageForDocker(this ICakeContext context, DockerImage dockerImage)
{
var (distro, targetFramework, architecture, _, _) = dockerImage;

if (architecture == Architecture.Amd64) return false;
if (!Constants.DistrosToSkipForDocker.Contains(distro)) return false;

context.Information($"Skipping Target: {targetFramework}, Distro: {distro}, Arch: {architecture}");
return true;
switch (architecture)
{
case Architecture.Amd64:
case Architecture.Arm64 when context.IsRunningOnArm64():
return false;
default:
context.Information($"Skipping Target: {targetFramework}, Distro: {distro}, Arch: {architecture}");
return true;
}
}

public static void DockerBuildImage(this BuildContextBase context, DockerImage dockerImage)
Expand Down
7 changes: 5 additions & 2 deletions build/docker/BuildLifetime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,18 @@ public override void Setup(BuildContext context, ISetupContext info)

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

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

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

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

var registry = dockerRegistry == DockerRegistry.DockerHub ? Constants.DockerHubRegistry : Constants.GitHubContainerRegistry;

context.DockerRegistry = dockerRegistry;
context.Architectures = architectures;
context.Images = from version in versions
Expand All @@ -35,7 +38,7 @@ from arch in architectures
LogBuildInformation(context);

context.Information($"IsDockerOnLinux: {context.IsDockerOnLinux}");
context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}");
context.Information($"Building for Version: {dotnetVersion}, Distro: {dockerDistro}, Architecture: {platformArch}");
context.EndGroup();
}
}
1 change: 0 additions & 1 deletion build/docker/Tasks/DockerBuild.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ public override void Run(BuildContext context)

foreach (var dockerImage in context.Images)
{
if (context.SkipImageForDocker(dockerImage)) continue;
context.DockerBuildImage(dockerImage);
}
}
Expand Down
1 change: 0 additions & 1 deletion build/docker/Tasks/DockerPublish.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ public override void Run(BuildContext context)
{
foreach (var dockerImage in context.Images)
{
if (context.SkipImageForDocker(dockerImage)) continue;
context.DockerPushImage(dockerImage);
}
}
Expand Down
2 changes: 1 addition & 1 deletion build/docker/Tasks/DockerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public override void Run(BuildContext context)
{
foreach (var dockerImage in context.Images)
{
if (context.SkipImageForDocker(dockerImage)) continue;
if (context.SkipImageTesting(dockerImage)) continue;
context.DockerTestImage(dockerImage);
}
}
Expand Down

0 comments on commit 0debb99

Please sign in to comment.