// check runner access to api.github.com public async Task <bool> RunCheck(string url, string pat) { await File.AppendAllLinesAsync(_logFile, HostContext.WarnLog()); await File.AppendAllLinesAsync(_logFile, HostContext.CheckProxy()); var checkTasks = new List <Task <CheckResult> >(); checkTasks.Add(CheckUtil.CheckDns("https://api.github.com")); checkTasks.Add(CheckUtil.CheckPing("https://api.github.com")); // We don't need to pass a PAT since it might be a token for GHES. checkTasks.Add(HostContext.CheckHttpsGetRequests("https://api.github.com", pat: null, expectedHeader: "X-GitHub-Request-Id")); var result = true; while (checkTasks.Count > 0) { var finishedCheckTask = await Task.WhenAny <CheckResult>(checkTasks); var finishedCheck = await finishedCheckTask; result = result && finishedCheck.Pass; await File.AppendAllLinesAsync(_logFile, finishedCheck.Logs); checkTasks.Remove(finishedCheckTask); } await Task.WhenAll(checkTasks); return(result); }
// node access to ghes/gh public async Task <bool> RunCheck(string url, string pat) { await File.AppendAllLinesAsync(_logFile, HostContext.WarnLog()); await File.AppendAllLinesAsync(_logFile, HostContext.CheckProxy()); // Request to github.com or ghes server var urlBuilder = new UriBuilder(url); if (UrlUtil.IsHostedServer(urlBuilder)) { urlBuilder.Host = $"api.{urlBuilder.Host}"; urlBuilder.Path = ""; } else { urlBuilder.Path = "api/v3"; } var checkNode = await CheckNodeJs(urlBuilder.Uri.AbsoluteUri, pat); var result = checkNode.Pass; await File.AppendAllLinesAsync(_logFile, checkNode.Logs); // try fix SSL error by providing extra CA certificate. if (checkNode.SslError) { var downloadCert = await HostContext.DownloadExtraCA(urlBuilder.Uri.AbsoluteUri, pat); await File.AppendAllLinesAsync(_logFile, downloadCert.Logs); if (downloadCert.Pass) { var recheckNode = await CheckNodeJs(urlBuilder.Uri.AbsoluteUri, pat, extraCA : true); await File.AppendAllLinesAsync(_logFile, recheckNode.Logs); if (recheckNode.Pass) { await File.AppendAllLinesAsync(_logFile, new[] { $"{DateTime.UtcNow.ToString("O")} Fixed SSL error by providing extra CA certs." }); } } } return(result); }
// git access to ghes/gh public async Task <bool> RunCheck(string url, string pat) { await File.AppendAllLinesAsync(_logFile, HostContext.WarnLog()); await File.AppendAllLinesAsync(_logFile, HostContext.CheckProxy()); if (string.IsNullOrEmpty(_gitPath)) { await File.AppendAllLinesAsync(_logFile, new[] { $"{DateTime.UtcNow.ToString("O")} Can't verify git with GitHub.com or GitHub Enterprise Server since git is not installed." }); return(false); } var checkGit = await CheckGit(url, pat); var result = checkGit.Pass; await File.AppendAllLinesAsync(_logFile, checkGit.Logs); // try fix SSL error by providing extra CA certificate. if (checkGit.SslError) { await File.AppendAllLinesAsync(_logFile, new[] { $"{DateTime.UtcNow.ToString("O")} Try fix SSL error by providing extra CA certificate." }); var downloadCert = await HostContext.DownloadExtraCA(url, pat); await File.AppendAllLinesAsync(_logFile, downloadCert.Logs); if (downloadCert.Pass) { var recheckGit = await CheckGit(url, pat, extraCA : true); await File.AppendAllLinesAsync(_logFile, recheckGit.Logs); if (recheckGit.Pass) { await File.AppendAllLinesAsync(_logFile, new[] { $"{DateTime.UtcNow.ToString("O")} Fixed SSL error by providing extra CA certs." }); } } } return(result); }
// runner access to actions service public async Task <bool> RunCheck(string url, string pat) { await File.AppendAllLinesAsync(_logFile, HostContext.WarnLog()); await File.AppendAllLinesAsync(_logFile, HostContext.CheckProxy()); var checkTasks = new List <Task <CheckResult> >(); string githubApiUrl = null; string actionsTokenServiceUrl = null; string actionsPipelinesServiceUrl = null; var urlBuilder = new UriBuilder(url); if (UrlUtil.IsHostedServer(urlBuilder)) { urlBuilder.Host = $"api.{urlBuilder.Host}"; urlBuilder.Path = ""; githubApiUrl = urlBuilder.Uri.AbsoluteUri; actionsTokenServiceUrl = "https://vstoken.actions.githubusercontent.com/_apis/health"; actionsPipelinesServiceUrl = "https://pipelines.actions.githubusercontent.com/_apis/health"; } else { urlBuilder.Path = "api/v3"; githubApiUrl = urlBuilder.Uri.AbsoluteUri; urlBuilder.Path = "_services/vstoken/_apis/health"; actionsTokenServiceUrl = urlBuilder.Uri.AbsoluteUri; urlBuilder.Path = "_services/pipelines/_apis/health"; actionsPipelinesServiceUrl = urlBuilder.Uri.AbsoluteUri; } // check github api checkTasks.Add(CheckUtil.CheckDns(githubApiUrl)); checkTasks.Add(CheckUtil.CheckPing(githubApiUrl)); checkTasks.Add(HostContext.CheckHttpsGetRequests(githubApiUrl, pat, expectedHeader: "X-GitHub-Request-Id")); // check actions token service checkTasks.Add(CheckUtil.CheckDns(actionsTokenServiceUrl)); checkTasks.Add(CheckUtil.CheckPing(actionsTokenServiceUrl)); checkTasks.Add(HostContext.CheckHttpsGetRequests(actionsTokenServiceUrl, pat, expectedHeader: "x-vss-e2eid")); // check actions pipelines service checkTasks.Add(CheckUtil.CheckDns(actionsPipelinesServiceUrl)); checkTasks.Add(CheckUtil.CheckPing(actionsPipelinesServiceUrl)); checkTasks.Add(HostContext.CheckHttpsGetRequests(actionsPipelinesServiceUrl, pat, expectedHeader: "x-vss-e2eid")); // check HTTP POST to actions pipelines service checkTasks.Add(HostContext.CheckHttpsPostRequests(actionsPipelinesServiceUrl, pat, expectedHeader: "x-vss-e2eid")); var result = true; while (checkTasks.Count > 0) { var finishedCheckTask = await Task.WhenAny <CheckResult>(checkTasks); var finishedCheck = await finishedCheckTask; result = result && finishedCheck.Pass; await File.AppendAllLinesAsync(_logFile, finishedCheck.Logs); checkTasks.Remove(finishedCheckTask); } await Task.WhenAll(checkTasks); return(result); }