diff --git a/releaseNote.md b/releaseNote.md index 518f7f1e6..d8e716ff2 100644 --- a/releaseNote.md +++ b/releaseNote.md @@ -1,5 +1,4 @@ ## Features -- Relaxed naming requirements for dockerfiles (e.g. `Dockerfile.test` can now be built) (#1738) ## Bugs - Fixed a bug where windows path separators were used in generated folders (#1617) diff --git a/src/Runner.Worker/ActionManager.cs b/src/Runner.Worker/ActionManager.cs index 88af0347a..954d9a691 100644 --- a/src/Runner.Worker/ActionManager.cs +++ b/src/Runner.Worker/ActionManager.cs @@ -1004,7 +1004,7 @@ namespace GitHub.Runner.Worker if (actionDefinitionData.Execution.ExecutionType == ActionExecutionType.Container) { var containerAction = actionDefinitionData.Execution as ContainerActionExecutionData; - if (DockerUtil.IsDockerfile(containerAction.Image)) + if (containerAction.Image.EndsWith("Dockerfile") || containerAction.Image.EndsWith("dockerfile")) { var dockerFileFullPath = Path.Combine(actionEntryDirectory, containerAction.Image); executionContext.Debug($"Dockerfile for action: '{dockerFileFullPath}'."); diff --git a/src/Runner.Worker/Container/DockerUtil.cs b/src/Runner.Worker/Container/DockerUtil.cs index af7de18df..02c2ece5b 100644 --- a/src/Runner.Worker/Container/DockerUtil.cs +++ b/src/Runner.Worker/Container/DockerUtil.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Text.RegularExpressions; namespace GitHub.Runner.Worker.Container @@ -18,7 +17,7 @@ namespace GitHub.Runner.Worker.Container string pattern = $"^(?<{targetPort}>\\d+)/(?<{proto}>\\w+) -> (?<{host}>.+):(?<{hostPort}>\\d+)$"; List portMappings = new List(); - foreach (var line in portMappingLines) + foreach(var line in portMappingLines) { Match m = Regex.Match(line, pattern, RegexOptions.None, TimeSpan.FromSeconds(1)); if (m.Success) @@ -62,15 +61,5 @@ namespace GitHub.Runner.Worker.Container } return ""; } - - public static bool IsDockerfile(string image) - { - if (image.StartsWith("docker://", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - var imageWithoutPath = image.Split('/').Last(); - return imageWithoutPath.StartsWith("Dockerfile.") || imageWithoutPath.StartsWith("dockerfile.") || imageWithoutPath.EndsWith("Dockerfile") || imageWithoutPath.EndsWith("dockerfile"); - } } } diff --git a/src/Runner.Worker/Handlers/ContainerActionHandler.cs b/src/Runner.Worker/Handlers/ContainerActionHandler.cs index d6494f63f..3eaacb5a9 100644 --- a/src/Runner.Worker/Handlers/ContainerActionHandler.cs +++ b/src/Runner.Worker/Handlers/ContainerActionHandler.cs @@ -44,8 +44,9 @@ namespace GitHub.Runner.Worker.Handlers { Data.Image = Data.Image.Substring("docker://".Length); } - else if (DockerUtil.IsDockerfile(Data.Image)) + else if (Data.Image.EndsWith("Dockerfile") || Data.Image.EndsWith("dockerfile")) { + // ensure docker file exist var dockerFile = Path.Combine(ActionDirectory, Data.Image); ArgUtil.File(dockerFile, nameof(Data.Image)); @@ -67,10 +68,6 @@ namespace GitHub.Runner.Worker.Handlers Data.Image = imageName; } - else - { - throw new InvalidOperationException($"'{Data.Image}' should be either '[path]/Dockerfile' or 'docker://image[:tag]'."); - } string type = Action.Type == Pipelines.ActionSourceType.Repository ? "Dockerfile" : "DockerHub"; // Set extra telemetry base on the current context. diff --git a/src/Test/L0/Container/DockerUtilL0.cs b/src/Test/L0/Container/DockerUtilL0.cs index c31e9aead..c069255a8 100644 --- a/src/Test/L0/Container/DockerUtilL0.cs +++ b/src/Test/L0/Container/DockerUtilL0.cs @@ -144,48 +144,5 @@ namespace GitHub.Runner.Common.Tests.Worker.Container var actual = DockerUtil.ParseRegistryHostnameFromImageName(input); Assert.Equal(expected, actual); } - - [Theory] - [Trait("Level", "L0")] - [Trait("Category", "Worker")] - [InlineData("dockerhub/repo", false)] - [InlineData("debian:latest", false)] - [InlineData("something/dockerfileimage", false)] - [InlineData("ghcr.io/docker/dockerfile", true)] // should be false but might break the current workflows - [InlineData("Dockerfile", true)] - [InlineData("Dockerfile.", true)] - [InlineData(".Dockerfile", true)] - [InlineData(".Dockerfile.", false)] - [InlineData("dockerfile", true)] - [InlineData("dockerfile.", true)] - [InlineData(".dockerfile", true)] - [InlineData(".dockerfile.", false)] - [InlineData("Dockerfile.test", true)] - [InlineData("test.Dockerfile", true)] - [InlineData("docker/dockerfile:latest", false)] - [InlineData("/some/path/dockerfile:latest", false)] - [InlineData("dockerfile:latest", false)] - [InlineData("Dockerfile:latest", false)] - [InlineData("dockerfile-latest", false)] - [InlineData("Dockerfile-latest", false)] - [InlineData("dockerfile.latest", true)] - [InlineData("Dockerfile.latest", true)] - [InlineData("../dockerfile/dockerfileone", false)] - [InlineData("../Dockerfile/dockerfileone", false)] - [InlineData("../dockerfile.test", true)] - [InlineData("../Dockerfile.test", true)] - [InlineData("./dockerfile/image", false)] - [InlineData("./Dockerfile/image", false)] - [InlineData("example/Dockerfile.test", true)] - [InlineData("./example/Dockerfile.test", true)] - [InlineData("example/test.dockerfile", true)] - [InlineData("./example/test.dockerfile", true)] - [InlineData("docker://Dockerfile", false)] - [InlineData("docker://ubuntu:latest", false)] - public void IsDockerfile(string input, bool expected) - { - var actual = DockerUtil.IsDockerfile(input); - Assert.Equal(expected, actual); - } } } diff --git a/src/runnerversion b/src/runnerversion index cebe4ab6c..3f8d9be98 100644 --- a/src/runnerversion +++ b/src/runnerversion @@ -1 +1 @@ -2.291.0 +2.291.1