Skip to content

Commit 0f5e6c8

Browse files
Surayya Huseyn ZadaSurayya Huseyn Zada
authored andcommitted
fix setting annotation image name prefix: set to 'docker.io/' when repostory contains /, and 'docker.io/library/' when it doesn't; add tests
1 parent 72b4bf0 commit 0f5e6c8

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

src/Containers/Microsoft.NET.Build.Containers/ImageIndexGenerator.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ internal static string GenerateImageIndex(BuiltImage[] images, string manifestMe
9292

9393
internal static string GenerateImageIndexWithAnnotations(string manifestMediaType, string manifestDigest, long manifestSize, string repository, string[] tags)
9494
{
95+
string containerdImageNamePrefix = repository.Contains('/') ? "docker.io/" : "docker.io/library/";
96+
9597
var manifests = new PlatformSpecificOciManifest[tags.Length];
9698
for (int i = 0; i < tags.Length; i++)
9799
{
@@ -103,7 +105,7 @@ internal static string GenerateImageIndexWithAnnotations(string manifestMediaTyp
103105
digest = manifestDigest,
104106
annotations = new Dictionary<string, string>
105107
{
106-
{ "io.containerd.image.name", $"docker.io/library/{repository}:{tag}" },
108+
{ "io.containerd.image.name", $"{containerdImageNamePrefix}{repository}:{tag}" },
107109
{ "org.opencontainers.image.ref.name", tag }
108110
}
109111
};

src/Tests/Microsoft.NET.Build.Containers.IntegrationTests/DockerSupportsArchFact.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,22 @@ public DockerIsAvailableAndSupportsArchFactAttribute(string arch, bool checkCont
2121
}
2222
}
2323
}
24+
25+
public class DockerIsAvailableAndSupportsArchTheoryAttribute : TheoryAttribute
26+
{
27+
public DockerIsAvailableAndSupportsArchTheoryAttribute(string arch, bool checkContainerdStoreAvailability = false)
28+
{
29+
if (!DockerSupportsArchHelper.DaemonIsAvailable)
30+
{
31+
base.Skip = "Skipping test because Docker is not available on this host.";
32+
}
33+
else if (checkContainerdStoreAvailability && !DockerSupportsArchHelper.IsContainerdStoreEnabledForDocker)
34+
{
35+
base.Skip = "Skipping test because Docker daemon is not using containerd as the storage driver.";
36+
}
37+
else if (!DockerSupportsArchHelper.DaemonSupportsArch(arch))
38+
{
39+
base.Skip = $"Skipping test because Docker daemon does not support {arch}.";
40+
}
41+
}
42+
}

src/Tests/Microsoft.NET.Build.Containers.IntegrationTests/EndToEndTests.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -721,10 +721,11 @@ public void EndToEnd_SingleArch_NoRid()
721721
processResultX64.Should().Pass().And.HaveStdOut("Hello, World!");
722722
}
723723

724-
[DockerIsAvailableAndSupportsArchFact("linux/arm64", checkContainerdStoreAvailability: true)]
725-
public void EndToEndMultiArch_LocalRegistry()
724+
[InlineData("endtoendmultiarch-localregisty")]
725+
[InlineData("myteam/endtoendmultiarch-localregisty")]
726+
[DockerIsAvailableAndSupportsArchTheory("linux/arm64", checkContainerdStoreAvailability: true)]
727+
public void EndToEndMultiArch_LocalRegistry(string imageName)
726728
{
727-
string imageName = NewImageName();
728729
string tag = "1.0";
729730
string image = $"{imageName}:{tag}";
730731

@@ -759,7 +760,7 @@ public void EndToEndMultiArch_LocalRegistry()
759760
"--platform",
760761
"linux/amd64",
761762
"--name",
762-
$"test-container-{imageName}-x64",
763+
$"test-container-{imageName.Replace('/', '-')}-x64",
763764
image)
764765
.Execute();
765766
processResultX64.Should().Pass().And.HaveStdOut("Hello, World!");
@@ -770,7 +771,7 @@ public void EndToEndMultiArch_LocalRegistry()
770771
"--platform",
771772
"linux/arm64",
772773
"--name",
773-
$"test-container-{imageName}-arm64",
774+
$"test-container-{imageName.Replace('/', '-')}-arm64",
774775
image)
775776
.Execute();
776777
processResultArm64.Should().Pass().And.HaveStdOut("Hello, World!");
@@ -904,10 +905,11 @@ private DirectoryInfo CreateNewProject(string template, [CallerMemberName] strin
904905
private string GetPublishArtifactsPath(string projectDir, string rid, string configuration = "Debug")
905906
=> Path.Combine(projectDir, "bin", configuration, ToolsetInfo.CurrentTargetFramework, rid, "publish");
906907

907-
[DockerIsAvailableAndSupportsArchFact("linux/arm64", checkContainerdStoreAvailability: true)]
908-
public void EndToEndMultiArch_ArchivePublishing()
908+
[InlineData("endtoendmultiarch-archivepublishing")]
909+
[InlineData("myteam/endtoendmultiarch-archivepublishing")]
910+
[DockerIsAvailableAndSupportsArchTheory("linux/arm64", checkContainerdStoreAvailability: true)]
911+
public void EndToEndMultiArch_ArchivePublishing(string imageName)
909912
{
910-
string imageName = NewImageName();
911913
string tag = "1.0";
912914
string image = $"{imageName}:{tag}";
913915
string archiveOutput = TestSettings.TestArtifactsDirectory;
@@ -953,7 +955,7 @@ public void EndToEndMultiArch_ArchivePublishing()
953955
"--platform",
954956
"linux/amd64",
955957
"--name",
956-
$"test-container-{imageName}-x64",
958+
$"test-container-{imageName.Replace('/', '-')}-x64",
957959
image)
958960
.Execute();
959961
processResultX64.Should().Pass().And.HaveStdOut("Hello, World!");
@@ -964,7 +966,7 @@ public void EndToEndMultiArch_ArchivePublishing()
964966
"--platform",
965967
"linux/arm64",
966968
"--name",
967-
$"test-container-{imageName}-arm64",
969+
$"test-container-{imageName.Replace('/', '-')}-arm64",
968970
image)
969971
.Execute();
970972
processResultArm64.Should().Pass().And.HaveStdOut("Hello, World!");

0 commit comments

Comments
 (0)