Exemple #1
0
        // 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);
        }