166 references to Text
AnalyzeCiFailure (140)
AnalysisPublicationQueries.cs (4)
43if (!(response is JsonObject && CiFailureJson.Text(response["state"]) is not null && 49return CiFailureJson.Text(response!["state"]) == "open" && CiFailureJson.IsFalse(response["locked"]); 63var match = comments.Where(comment => CiFailureJson.Text(CiFailureJson.Field(CiFailureJson.Field(comment, "user"), "login")) == "github-actions[bot]" && 64(CiFailureJson.Text(CiFailureJson.Field(comment, "body")) ?? "").StartsWith("<!-- analyze-ci-failure -->\n", StringComparison.Ordinal))
AnalysisPublisher.cs (16)
138if (!TryReadEnum<CauseType>(Text(existing["type"]), out var storedType)) 176var linked = Text(history["issue_url"]); 190.OrderBy(i => Text(i["state"]) == "closed").FirstOrDefault(); 203if (!(issue is null || GitHubJson.TryReadId(issue["number"], out _) && Text(issue["state"]) is "open" or "closed")) 211if (!(issue is null || Text(issue["state"]) != "closed" || Text(issue["state_reason"]) != "duplicate")) 311if (Text(issue["state"]) == "closed") 355var date = Text(occurrence["observed_at"])!.Split('T')[0]; 363var storedJob = DiagnosticTextSanitizer.Sanitize(Text(occurrence["job"]) ?? ""); 369var row = $"| {date} | [{GetValueText(runId)}]({Text(occurrence["run_url"])}) | {tableJobs} | {scope} |"; 382body = Text(issue["body"]) ?? ""; 423.DistinctBy(o => (ReadNormalizedNumber(Field(o, "run_id")), Text(Field(o, "run_id")))) 424.OrderBy(o => Text(Field(o, "observed_at")), StringComparer.Ordinal); 476var lines = (Text(issue["body"]) ?? "").ReplaceLineEndings("\n").Split('\n'); 478labels.Any(l => Text(Field(l, "name")) == "ci-failure-cause") && 607result = Text(Field(response, "html_url")) ?? "";
AnalysisPublisher.Overflow.cs (16)
24OverflowIssueRenderer.HasMarker(Text(issue["body"]), marker)) 31var linked = Text(storedRun?["overflow_issue_url"]); 45Text(existing["html_url"]) != $"https://github.com/{_repository}/issues/{number}" || 46Text(Field(existing["user"], "login")) != "github-actions[bot]" || 47!IsFalse(existing["locked"]) || Text(existing["state"]) is not ("open" or "closed") || 48Text(existing["state_reason"]) == "duplicate" || existing["pull_request"] is not null || 49!OverflowIssueRenderer.HasMarker(Text(existing["body"]), marker)) 56var body = OverflowIssueRenderer.Merge(Text(existing?["body"]), marker, pages[0]); 63Text(Field(comment["user"], "login")) == "github-actions[bot]")) 65var text = Text(comment["body"]) ?? ""; 88OverflowIssueRenderer.Merge(Text(previous?["body"]), pageMarker, content))); 98var title = MarkdownFormatting.CodeSpan(DiagnosticTextSanitizer.Sanitize(Text(item.History["title"]) ?? item.Cause.Id, limit: 238)); 100var diagnostic = DiagnosticTextSanitizer.Sanitize(Text(item.History["error_pattern"]) ?? "", limit: 500); 102var issueUrl = Text(item.History["issue_url"]); 114var storedJobs = DiagnosticTextSanitizer.Sanitize(Text(occurrence?["job"]) ?? ""); 162url = Text(publication.Existing["html_url"])!;
BranchHistoryReader.cs (18)
55Text(Field(run, "created_at")) is not null && Text(Field(run, "head_sha")) is { Length: > 0 }); 98var newest = rows.Where(run => string.CompareOrdinal(Text(run!["created_at"]), Time(start)) >= 0 && 99(string.CompareOrdinal(Text(run!["created_at"]), Time(end)) < 0 || 100Time(end) == failedTime && Text(run!["created_at"]) == failedTime && 102.OrderBy(run => Text(run!["created_at"]), StringComparer.Ordinal) 126if (pages is not JsonArray { Count: > 0 } array || Text(Field(array[0], "status")) != "ahead" || 130c is not JsonObject || Text(c["sha"]) is not { Length: > 0 } || 131c["commit"] is not JsonObject || Text(Field(c["commit"], "message")) is null || Text(c["html_url"]) is null)) 136var commits = array.SelectMany(p => (JsonArray)p!["commits"]!).DistinctBy(c => Text(c!["sha"])).ToArray(); 145var sha = Text(commit!["sha"])!; 167Message = Text(Field(commit["commit"], "message")), 168HtmlUrl = Text(commit["html_url"]), 172Title = Text(pr["title"]), 173Url = Text(pr["html_url"]), 183=> candidates.OfType<JsonObject>().Where(pr => Text(Field(Field(pr["base"], "repo"), "full_name")) == repository && 184Text(Field(pr["base"], "ref")) == _branchName && pr["merged_at"] is not null)
CauseIssueRenderer.cs (14)
41var id = Text(cause["id"])!; 42var type = Text(cause["type"])!; 44var title = DiagnosticTextSanitizer.Sanitize(Text(cause["title"]) ?? "", limit: 238); 45var test = DiagnosticTextSanitizer.Sanitize(Text(cause["test_name"]) ?? "", limit: 500); 80var error = Text(cause["error_pattern"]) ?? ""; 163var row = $"- {MarkdownFormatting.CodeSpan(DiagnosticTextSanitizer.Sanitize(Text(t["name"])!, limit: 500))} — job {GetValueText(t["job_id"])} ({MarkdownFormatting.CodeSpan(DiagnosticTextSanitizer.Sanitize(Text(t["job"])!, limit: 500))})"; 164if (Text(t["observation_id"]) is { } observation) 166row += $" — {MarkdownFormatting.CodeSpan(DiagnosticTextSanitizer.Sanitize(observation, limit: 100))}, result {MarkdownFormatting.CodeSpan(DiagnosticTextSanitizer.Sanitize(Text(t["result_file"]) ?? "", limit: 500))}"; 167if (Text(t["execution_id"]) is { } execution) 173if (Text(t[field]) is { Length: > 0 } diagnostic) 319.DistinctBy(item => (Text(item.Test["name"]), ReadNormalizedNumber(item.Test["job_id"]), 320Text(item.Test["observation_id"]), Text(item.Test["observation_id"]) is null ? null : item.Run))
CiFailureJson.cs (2)
169JsonValue value when Text(value) is { } text => text, 200if (Text(node) is not { } text)
CollectionProjection.cs (25)
16Name = Text(job["name"]) ?? throw new ValidationException("A collected job needs a name"), 17Url = Text(job["html_url"]), 18Conclusion = Text(job["conclusion"]) ?? "", 22Name = Text(step?["name"]) ?? "", 23Conclusion = Text(step?["conclusion"]), 29Title = Text(metadata["title"]) ?? "", Author = Text(Field(metadata["user"], "login")) ?? "", 30State = Text(metadata["state"]) ?? "", HeadBranch = Text(Field(metadata["head"], "ref")) ?? "", 31BaseBranch = Text(Field(metadata["base"], "ref")) ?? "", Url = Text(metadata["html_url"]) ?? "", 44Id = GitHubJson.ReadRequiredId(last["id"]), HeadSha = Text(last["head_sha"]) ?? "", 45CreatedAt = Text(last["created_at"]) ?? "", Url = Text(last["html_url"]), 49Number = GitHubJson.ReadRequiredId(merge["number"]), Title = Text(merge["title"]) ?? "", 50Author = Text(Field(merge["user"], "login")) ?? "", State = Text(merge["state"]) ?? "", 51HeadBranch = Text(Field(merge["head"], "ref")) ?? "", BaseBranch = Text(Field(merge["base"], "ref")) ?? "", 52Url = Text(merge["html_url"]) ?? "", MergedAt = Text(merge["merged_at"]), 88HeadSha = Text(run["head_sha"]) ?? "", Scope = progress.RunScope!.Value, 89Event = Text(run["event"]) ?? "", HeadBranch = Text(run["head_branch"]) ?? "", 90Url = Text(run["html_url"]) ?? "",
DiagnosticTextSanitizer.cs (2)
77_ when Text(node) is { } text => JsonValue.Create(Sanitize(text, limit, multiline)), 107if (Text(node[field]) is { } text)
TestResultArtifacts.cs (2)
66Text(artifact["name"]), 69Text(artifact["created_at"]))).ToArray();
WorkflowRunEvidenceCollector.cs (32)
76private static bool IsFailedOrInterrupted(JsonNode? conclusion) => Text(conclusion) is "failure" or "cancelled" or "timed_out"; 128if (!(Text(run["path"]) == _workflow.WorkflowPath)) 130throw new ValidationException($"Run {runId} belongs to workflow '{Display(Text(run["path"]) ?? "")}', not '{Display(_workflow.WorkflowPath)}'"); 132RunScope? runScope = Text(run["event"]) switch 134"push" when Text(run["head_branch"]) == "main" => RunScope.Main, 138if (runScope is null || Text(run["conclusion"]) == "success") 150progress.HeadSha = Text(run["head_sha"]); 151progress.RunUrl = Text(run["html_url"]); 346Text(Field(Field(Field(pullRequest, "base"), "repo"), "url")) == $"https://api.github.com/repos/{_repository}") 350var headSha = Text(run["head_sha"]) ?? ""; 355(subjectPrNumber, ambiguous) = SelectSinglePullRequestNumber(associatedPullRequests.Where(pullRequest => Text(Field(Field(Field(pullRequest, "base"), "repo"), "full_name")) == _repository) 358var headOwner = Text(Field(Field(run["head_repository"], "owner"), "login")) ?? ""; 359var headBranch = Text(run["head_branch"]) ?? ""; 365mismatchedHead = associatedPullRequests.Count > 0 && !associatedPullRequests.Any(pullRequest => Text(Field(Field(pullRequest, "head"), "sha")) == headSha); 366(subjectPrNumber, ambiguous) = SelectSinglePullRequestNumber(associatedPullRequests.Where(pullRequest => Text(Field(Field(pullRequest, "head"), "sha")) == headSha).Select(pullRequest => Field(pullRequest, "number"))); 385var headSha = Text(run["head_sha"]) ?? ""; 406Text(run["created_at"]) ?? "", 415var (candidateMerges, historyState) = await mainHistory.FindCandidateMergesAsync(Text(lastSuccessfulRun["head_sha"]) ?? "", headSha); 468var checkRunUrl = Text(job["check_run_url"]) ?? ""; 488if ((job["steps"] as JsonArray ?? []).Any(step => Text(Field(step, "status")) == "in_progress") && 490Text(annotation["message"])?.StartsWith(RunnerLostAnnotation, StringComparison.Ordinal) == true)) 642if (plan.JobName != Text(job["name"])) 645$"job='{Display(DiagnosticTextSanitizer.Sanitize(Text(job["name"]) ?? "", limit: 80))}'; " + 652!artifacts.OfType<JsonObject>().Any(artifact => Text(artifact["name"]) == plan.ArtifactName && 653(Text(artifact["created_at"]) is not { } created || 654string.CompareOrdinal(created, Text(run["run_started_at"]) ?? "") > 0 && 655string.CompareOrdinal(created, Text(run["updated_at"]) ?? "") <= 0))).ToHashSet(); 660Text(run["run_started_at"]) ?? "", 661Text(run["updated_at"]) ?? "", 728if (!(ReadNormalizedNumber(associatedRun["id"]) == ReadNormalizedNumber(run["id"]) && Text(associatedRun["head_sha"]) == Text(run["head_sha"]))) 791var matches = failedJobs.OfType<JsonObject>().Where(job => Text(job["name"]) == jobName).ToArray();
Workflows\AspireCiWorkflowConventions.cs (9)
21if (Text(job["name"]) == FinalResultsJob) 26.FirstOrDefault(step => Text(Field(step, "conclusion")) is "failure" or "cancelled" or "timed_out"); 28return firstFailure is not null && AggregationStepNameRegex().IsMatch(Text(Field(firstFailure, "name")) ?? ""); 33var name = Text(job["name"]); 39var required = steps.Any(step => Text(Field(step, "name")) == ResultsUploadStep) || 65var interrupted = !steps.Any(step => Text(Field(step, "conclusion")) == "failure") || 66steps.Any(step => Text(Field(step, "status")) == "in_progress") || 67steps.Any(step => Text(Field(step, "name")) == ExtensionTestStep && 68Text(Field(step, "conclusion")) is "cancelled" or "timed_out");
AnalyzeCiFailure.Tests (26)
AnalyzeCiFailureFixtures.cs (24)
95var scope = CiFailureJson.ReadEnum<RunScope>(CiFailureJson.Text(context["run_scope"]), "Run scope is invalid"); 96var state = CiFailureJson.ReadEnum<EvidenceState>(CiFailureJson.Text(Read("test-evidence.json")?["state"]), "Test evidence state is invalid"); 131SubjectPrNumber = long.TryParse(CiFailureJson.Text(context["pr_numbers"]), NumberStyles.None, CultureInfo.InvariantCulture, out var pr) && pr > 0 ? pr : null, 153Title = CiFailureJson.Text(prMetadata["title"]) ?? "", Author = CiFailureJson.Text(prMetadata["user"]) ?? "", 154State = CiFailureJson.Text(prMetadata["state"]) ?? "", HeadBranch = CiFailureJson.Text(prMetadata["head_branch"]) ?? "", 155BaseBranch = CiFailureJson.Text(prMetadata["base_branch"]) ?? "", Url = CiFailureJson.Text(prMetadata["html_url"]) ?? "", 163CiFailureJson.Text(metadata["head_sha"]) ?? "", 171var matching = bundle.TestEvidence.Failures.Where(collected => collected.Name == CiFailureJson.Text(test?["name"]) && 172(test?["job_id"] is { } id ? collected.JobId == GitHubJson.ReadRequiredId(id) : jobs.Any(job => job.Id == collected.JobId && job.Name == CiFailureJson.Text(test?["job"])))).ToArray(); 173var observation = CiFailureJson.Text(test?["observation_id"]); 179Classification = CiFailureJson.ReadEnum<TestClassification>(CiFailureJson.Text(test?["classification"]), "Test classification is invalid"), 180Reason = CiFailureJson.Text(test?["reason"]) ?? "", 187var id = CiFailureJson.Text(cause["id"])!; 189var type = CiFailureJson.ReadEnum<CauseType>(CiFailureJson.Text(cause["type"]), "Cause type is invalid"); 192? explicitTests.Any(reference => CiFailureJson.Text(reference?["name"]) == test.Name && 194(reference?["observation_id"] is null || CiFailureJson.Text(reference["observation_id"]) == $"observation-{bundle.TestEvidence.Failures.IndexOf(test) + 1}")) 195: test.Name == CiFailureJson.Text(cause["test_name"]) && jobIds.Contains(test.JobId)) 215Title = CiFailureJson.Text(cause["title"])!, 216ErrorPattern = CiFailureJson.Text(cause["error_pattern"])!, 233Classification = CiFailureJson.ReadEnum<JobClassification>(CiFailureJson.Text(job?["classification"]), "Job classification is invalid"), 234Reason = CiFailureJson.Text(job?["reason"]) ?? "",
TestServices\AlternateWorkflowConventions.cs (2)
19=> CiFailureJson.Text(job["name"]) == "Alternate gate"; 23var name = CiFailureJson.Text(job["name"])!;