Skip to content

Commit

Permalink
Print headlines in bot report comment (#193)
Browse files Browse the repository at this point in the history
Co-authored-by: Tim Besard <tim.besard@gmail.com>
  • Loading branch information
IanButterworth and maleadt authored Jan 7, 2025
1 parent fde884e commit 116ddae
Showing 1 changed file with 105 additions and 73 deletions.
178 changes: 105 additions & 73 deletions src/jobs/PkgEvalJob.jl
Original file line number Diff line number Diff line change
Expand Up @@ -849,11 +849,18 @@ function report(job::PkgEvalJob, results)
results["has_issues"] ? "possible issues were detected" :
"no issues were detected"
end
hasagainstbuild = job.against !== nothing
package_results = make_package_results(results, hasagainstbuild)
report_summary = sprint(io -> printpackageresults(io, job, package_results, hasagainstbuild; headlines_only=true))

# reply with the job's final status
comment = """
The package evaluation job [you requested]($(submission(job).url)) has completed - $status.
The [**full report**]($(target_url)) is available."""
The [**full report**]($(target_url)) is available.
<details><summary>Report summary</summary>
$report_summary
</details>
"""
reply_comment(submission(job), comment)
end
end
Expand Down Expand Up @@ -958,6 +965,17 @@ function readable_duration(seconds)
return str
end

function make_package_results(results, hasagainstbuild)
if hasagainstbuild
return leftjoin(results["primary"], results["against"],
on=:package, makeunique=true, source=:source)
else
package_results = results["primary"]
package_results[!, :source] .= "left_only" # fake a left join
return package_results
end
end

function printreport(io::IO, job::PkgEvalJob, results)
cfg = submission(job).config
build = submission(job).build
Expand Down Expand Up @@ -1063,9 +1081,9 @@ function printreport(io::IO, job::PkgEvalJob, results)
# print result list #
#-------------------#

package_results = make_package_results(results, hasagainstbuild)

if hasagainstbuild
package_results = leftjoin(results["primary"], results["against"],
on=:package, makeunique=true, source=:source)

# if this isn't a daily job, print the invocation to retest failures.
# we do this first so that the proposed invocation includes all failure modes.
Expand Down Expand Up @@ -1099,13 +1117,52 @@ function printreport(io::IO, job::PkgEvalJob, results)
end
results["has_issues"] = !isempty(new_failures)
else
package_results = results["primary"]
package_results[!, :source] .= "left_only" # fake a left join

results["has_issues"] = !isempty(filter(test->test.status in [:fail, :crash],
package_results))
end

# main results body
printpackageresults(io, job, package_results, hasagainstbuild)

# print build version info #
#--------------------------#

print(io, """
## Version Info
#### Primary Build
```
$(results["primary.vinfo"])
```
""")

if haskey(submission(job).kwargs, :configuration)
println(io, "*Configuration*: `", submission(job).kwargs[:configuration], "`")
end

if hasagainstbuild
println(io)
print(io, """
#### Comparison Build
```
$(results["against.vinfo"])
```
""")

if haskey(submission(job).kwargs, :vs_configuration)
println(io, "*Configuration*: `", submission(job).kwargs[:vs_configuration], "`")
end
end

println(io, "<!-- Generated on $(now()) -->")

return nothing
end

function printpackageresults(io::IO, job::PkgEvalJob, package_results, hasagainstbuild::Bool; headlines_only::Bool=false)
cfg = submission(job).config
# report test results in groups based on the test status
history_heading, history = get_history(submission(job).config)
dependents = package_dependents()
Expand Down Expand Up @@ -1174,30 +1231,36 @@ function printreport(io::IO, job::PkgEvalJob, results)
end

# report on a group of tests, prefixed with the reason
function reportgroup(group)
function reportgroup(group; headlines_only::Bool=false)
subgroups = groupby(group, :reason; skipmissing=true)
for key in sort(keys(subgroups); by=key->PkgEval.reason_severity(key.reason))
subgroup = subgroups[key]
println(io, """
<details open><summary>$(uppercasefirst(PkgEval.reason_message(first(subgroup).reason))) ($(nrow(subgroup)) packages):</summary>
<p>
""")
println(io)
reportsubgroup(subgroup)
println(io, """
</p>
</details>
""")
if headlines_only
println(io, " - $(nrow(subgroup)) : $(uppercasefirst(PkgEval.reason_message(first(subgroup).reason))) :")
else
println(io, """
<details open><summary>"$(uppercasefirst(PkgEval.reason_message(first(subgroup).reason))) ($(nrow(subgroup)) packages):"</summary>
<p>
""")
println(io)
reportsubgroup(subgroup)
println(io, """
</p>
</details>
""")
end
end

# print tests without a reason separately, at the end
subgroup = group[group[!, :reason] .=== missing, :]
if !isempty(subgroup)
if length(subgroups) > 0
println(io, "Other:")
println(io)
if !headlines_only
# print tests without a reason separately, at the end
subgroup = group[group[!, :reason] .=== missing, :]
if !isempty(subgroup)
if length(subgroups) > 0
println(io, "Other:")
println(io)
end
reportsubgroup(subgroup)
end
reportsubgroup(subgroup)
end
end

Expand All @@ -1209,71 +1272,40 @@ function printreport(io::IO, job::PkgEvalJob, results)
if !isempty(changed_tests)
println(io, "**$(nrow(changed_tests)) packages $verb only on the current version.**")
println(io)
reportgroup(changed_tests)
reportgroup(changed_tests; headlines_only)
end

# now report the other ones
unchanged_tests = filter(test->test.source == "left_only" ||
test.status == test.status_1, group)
if !isempty(unchanged_tests)
println(io, """
<details><summary><strong>$(nrow(unchanged_tests)) packages $verb on the previous version too.</strong></summary>
<p>
""")
unchanged_tests = copy(unchanged_tests) # only report the
unchanged_tests[!, :source] .= "left_only" # primary result
reportgroup(unchanged_tests)
println(io, """
</p>
</details>
""")
headline = "$(nrow(unchanged_tests)) packages $verb on the previous version too."
if headlines_only
println(io, headline)
else
println(io, """
<details><summary><strong>$headline</strong></summary>
<p>
""")
unchanged_tests = copy(unchanged_tests) # only report the
unchanged_tests[!, :source] .= "left_only" # primary result
reportgroup(unchanged_tests)
println(io, """
</p>
</details>
""")
end
end
else
# just report on all tests
println(io, "$(nrow(group)) packages $verb.")
println(io)
reportgroup(group)
reportgroup(group; headlines_only)
end

println(io)
end
end

# print build version info #
#--------------------------#

print(io, """
## Version Info
#### Primary Build
```
$(results["primary.vinfo"])
```
""")

if haskey(submission(job).kwargs, :configuration)
println(io, "*Configuration*: `", submission(job).kwargs[:configuration], "`")
end

if hasagainstbuild
println(io)
print(io, """
#### Comparison Build
```
$(results["against.vinfo"])
```
""")

if haskey(submission(job).kwargs, :vs_configuration)
println(io, "*Configuration*: `", submission(job).kwargs[:vs_configuration], "`")
end
end

println(io, "<!-- Generated on $(now()) -->")

return nothing
end

# JSON Database Generation #
Expand Down

0 comments on commit 116ddae

Please sign in to comment.