// 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); }