diff --git a/src/Runner.Worker/Handlers/OutputManager.cs b/src/Runner.Worker/Handlers/OutputManager.cs index 42478e44d..a0c136c3f 100644 --- a/src/Runner.Worker/Handlers/OutputManager.cs +++ b/src/Runner.Worker/Handlers/OutputManager.cs @@ -352,15 +352,24 @@ namespace GitHub.Runner.Worker.Handlers if (File.Exists(gitConfigPath)) { // Check if the config contains the workflow repository url - var qualifiedRepository = _executionContext.GetGitHubContext("repository"); - var configMatch = $"url = https://github.com/{qualifiedRepository}"; + var serverUrl = _executionContext.GetGitHubContext("server_url"); + serverUrl = !string.IsNullOrEmpty(serverUrl) ? serverUrl : "https://github.com"; + var host = new Uri(serverUrl, UriKind.Absolute).Host; + var nameWithOwner = _executionContext.GetGitHubContext("repository"); + var patterns = new[] { + $"url = {serverUrl}/{nameWithOwner}", + $"url = git@{host}:{nameWithOwner}.git", + }; var content = File.ReadAllText(gitConfigPath); foreach (var line in content.Split("\n").Select(x => x.Trim())) { - if (String.Equals(line, configMatch, StringComparison.OrdinalIgnoreCase)) + foreach (var pattern in patterns) { - repositoryPath = directoryPath; - break; + if (String.Equals(line, pattern, StringComparison.OrdinalIgnoreCase)) + { + repositoryPath = directoryPath; + break; + } } } } diff --git a/src/Test/L0/Worker/OutputManagerL0.cs b/src/Test/L0/Worker/OutputManagerL0.cs index 8b50c08b5..bcd2936f7 100644 --- a/src/Test/L0/Worker/OutputManagerL0.cs +++ b/src/Test/L0/Worker/OutputManagerL0.cs @@ -686,14 +686,17 @@ namespace GitHub.Runner.Common.Tests.Worker // /workflow-repo/nested-other-repo // /other-repo // /other-repo/nested-workflow-repo + // /workflow-repo-using-ssh var workflowRepository = Path.Combine(workspaceDirectory, "workflow-repo"); var nestedOtherRepository = Path.Combine(workspaceDirectory, "workflow-repo", "nested-other-repo"); var otherRepository = Path.Combine(workspaceDirectory, workflowRepository, "nested-other-repo"); var nestedWorkflowRepository = Path.Combine(workspaceDirectory, "other-repo", "nested-workflow-repo"); + var workflowRepositoryUsingSsh = Path.Combine(workspaceDirectory, "workflow-repo-using-ssh"); await CreateRepository(hostContext, workflowRepository, "https://github.com/my-org/workflow-repo"); await CreateRepository(hostContext, nestedOtherRepository, "https://github.com/my-org/other-repo"); await CreateRepository(hostContext, otherRepository, "https://github.com/my-org/other-repo"); await CreateRepository(hostContext, nestedWorkflowRepository, "https://github.com/my-org/workflow-repo"); + await CreateRepository(hostContext, workflowRepositoryUsingSsh, "git@github.com:my-org/workflow-repo.git"); // Create test files var file_noRepository = Path.Combine(workspaceDirectory, "no-repo.txt"); @@ -703,7 +706,8 @@ namespace GitHub.Runner.Common.Tests.Worker var file_nestedOtherRepository = Path.Combine(nestedOtherRepository, "nested-other-repo"); var file_otherRepository = Path.Combine(otherRepository, "other-repo.txt"); var file_nestedWorkflowRepository = Path.Combine(nestedWorkflowRepository, "nested-workflow-repo.txt"); - foreach (var file in new[] { file_noRepository, file_workflowRepository, file_workflowRepository_nestedDirectory, file_workflowRepository_failsafe, file_nestedOtherRepository, file_otherRepository, file_nestedWorkflowRepository }) + var file_workflowRepositoryUsingSsh = Path.Combine(workflowRepositoryUsingSsh, "workflow-repo-using-ssh.txt"); + foreach (var file in new[] { file_noRepository, file_workflowRepository, file_workflowRepository_nestedDirectory, file_workflowRepository_failsafe, file_nestedOtherRepository, file_otherRepository, file_nestedWorkflowRepository, file_workflowRepositoryUsingSsh }) { Directory.CreateDirectory(Path.GetDirectoryName(file)); File.WriteAllText(file, ""); @@ -718,8 +722,9 @@ namespace GitHub.Runner.Common.Tests.Worker Process($"{file_nestedOtherRepository}: some error 6"); Process($"{file_otherRepository}: some error 7"); Process($"{file_nestedWorkflowRepository}: some error 8"); + Process($"{file_workflowRepositoryUsingSsh}: some error 9"); - Assert.Equal(8, _issues.Count); + Assert.Equal(9, _issues.Count); Assert.Equal("some error 1", _issues[0].Item1.Message); Assert.False(_issues[0].Item1.Data.ContainsKey("file")); @@ -744,6 +749,9 @@ namespace GitHub.Runner.Common.Tests.Worker Assert.Equal("some error 8", _issues[7].Item1.Message); Assert.Equal(file_nestedWorkflowRepository.Substring(nestedWorkflowRepository.Length + 1).Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar), _issues[7].Item1.Data["file"]); + + Assert.Equal("some error 9", _issues[8].Item1.Message); + Assert.Equal(file_workflowRepositoryUsingSsh.Substring(workflowRepositoryUsingSsh.Length + 1).Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar), _issues[8].Item1.Data["file"]); } Environment.SetEnvironmentVariable("RUNNER_TEST_GET_REPOSITORY_PATH_FAILSAFE", "");