Commit c7a09685 by Ben Clayton

Regres: Reduce scope of regres CI emails

Limit CI results to the owner when things are good. Limit CI results to owner + reviewers when things are not so good. Should reduce email spam. Change-Id: I1b71f17f306bf04ecb9fb87ffd95aea42a8e84b4 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/39308Reviewed-by: 's avatarAntonio Maiorano <amaiorano@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarBen Clayton <bclayton@google.com>
parent 8ed7ae4c
...@@ -263,7 +263,7 @@ func (r *regres) run() error { ...@@ -263,7 +263,7 @@ func (r *regres) run() error {
log.Printf("Testing change '%s'\n", change.id) log.Printf("Testing change '%s'\n", change.id)
// Test the latest patchset in the change, diff against parent change. // Test the latest patchset in the change, diff against parent change.
msg, err := r.test(change) msg, alert, err := r.test(change)
if err != nil { if err != nil {
log.Println(cause.Wrap(err, "Failed to test changelist '%s'", change.latest)) log.Println(cause.Wrap(err, "Failed to test changelist '%s'", change.latest))
time.Sleep(time.Minute) time.Sleep(time.Minute)
...@@ -280,9 +280,14 @@ func (r *regres) run() error { ...@@ -280,9 +280,14 @@ func (r *regres) run() error {
log.Printf("DRY RUN: add review to change '%v':\n%v\n", change.id, msg) log.Printf("DRY RUN: add review to change '%v':\n%v\n", change.id, msg)
} else { } else {
log.Printf("Posting review to '%s'\n", change.id) log.Printf("Posting review to '%s'\n", change.id)
notify := "OWNER"
if alert {
notify = "OWNER_REVIEWERS"
}
_, _, err = client.Changes.SetReview(change.id, change.latest.String(), &gerrit.ReviewInput{ _, _, err = client.Changes.SetReview(change.id, change.latest.String(), &gerrit.ReviewInput{
Message: msg, Message: msg,
Tag: "autogenerated:regress", Tag: "autogenerated:regress",
Notify: notify,
}) })
if err != nil { if err != nil {
return cause.Wrap(err, "Failed to post comments on change '%s'", change.id) return cause.Wrap(err, "Failed to post comments on change '%s'", change.id)
...@@ -292,35 +297,35 @@ func (r *regres) run() error { ...@@ -292,35 +297,35 @@ func (r *regres) run() error {
} }
} }
func (r *regres) test(change *changeInfo) (string, error) { func (r *regres) test(change *changeInfo) (string, bool, error) {
latest := r.newTest(change.latest) latest := r.newTest(change.latest)
defer latest.cleanup() defer latest.cleanup()
if err := latest.checkout(); err != nil { if err := latest.checkout(); err != nil {
return "", cause.Wrap(err, "Failed to checkout '%s'", change.latest) return "", true, cause.Wrap(err, "Failed to checkout '%s'", change.latest)
} }
deqpBuild, err := r.getOrBuildDEQP(latest) deqpBuild, err := r.getOrBuildDEQP(latest)
if err != nil { if err != nil {
return "", cause.Wrap(err, "Failed to build dEQP '%v' for change", change.id) return "", true, cause.Wrap(err, "Failed to build dEQP '%v' for change", change.id)
} }
log.Printf("Testing latest patchset for change '%s'\n", change.id) log.Printf("Testing latest patchset for change '%s'\n", change.id)
latestResults, testlists, err := r.testLatest(change, latest, deqpBuild) latestResults, testlists, err := r.testLatest(change, latest, deqpBuild)
if err != nil { if err != nil {
return "", cause.Wrap(err, "Failed to test latest change of '%v'", change.id) return "", true, cause.Wrap(err, "Failed to test latest change of '%v'", change.id)
} }
log.Printf("Testing parent of change '%s'\n", change.id) log.Printf("Testing parent of change '%s'\n", change.id)
parentResults, err := r.testParent(change, testlists, deqpBuild) parentResults, err := r.testParent(change, testlists, deqpBuild)
if err != nil { if err != nil {
return "", cause.Wrap(err, "Failed to test parent change of '%v'", change.id) return "", true, cause.Wrap(err, "Failed to test parent change of '%v'", change.id)
} }
log.Println("Comparing latest patchset's results with parent") log.Println("Comparing latest patchset's results with parent")
msg := compare(parentResults, latestResults) msg, alert := compare(parentResults, latestResults)
return msg, nil return msg, alert, nil
} }
type deqpBuild struct { type deqpBuild struct {
...@@ -972,14 +977,15 @@ func commonFailures(results *deqp.Results) []commonFailure { ...@@ -972,14 +977,15 @@ func commonFailures(results *deqp.Results) []commonFailure {
} }
// compare returns a string describing all differences between two // compare returns a string describing all differences between two
// deqprun.Results. This string is used as the report message posted to the // deqprun.Results, and a boolean indicating that this there are differences
// gerrit code review. // that are considered important.
func compare(old, new *deqp.Results) string { // This string is used as the report message posted to the gerrit code review.
func compare(old, new *deqp.Results) (msg string, alert bool) {
if old.Error != "" { if old.Error != "" {
return old.Error return old.Error, false
} }
if new.Error != "" { if new.Error != "" {
return new.Error return new.Error, true
} }
oldStatusCounts, newStatusCounts := map[testlist.Status]int{}, map[testlist.Status]int{} oldStatusCounts, newStatusCounts := map[testlist.Status]int{}, map[testlist.Status]int{}
...@@ -996,12 +1002,15 @@ func compare(old, new *deqp.Results) string { ...@@ -996,12 +1002,15 @@ func compare(old, new *deqp.Results) string {
switch { switch {
case !old.Status.Failing() && new.Status.Failing(): case !old.Status.Failing() && new.Status.Failing():
broken = append(broken, test) broken = append(broken, test)
alert = true
case !old.Status.Passing() && new.Status.Passing(): case !old.Status.Passing() && new.Status.Passing():
fixed = append(fixed, test) fixed = append(fixed, test)
case old.Status != new.Status: case old.Status != new.Status:
changed = append(changed, test) changed = append(changed, test)
alert = true
case old.Status.Failing() && new.Status.Failing(): case old.Status.Failing() && new.Status.Failing():
failing = append(failing, test) // Still broken failing = append(failing, test) // Still broken
alert = true
} }
totalTests++ totalTests++
if found { if found {
...@@ -1155,7 +1164,7 @@ func compare(old, new *deqp.Results) string { ...@@ -1155,7 +1164,7 @@ func compare(old, new *deqp.Results) string {
} }
} }
return sb.String() return sb.String(), alert
} }
// loadTestLists loads the full test lists from the json file. // loadTestLists loads the full test lists from the json file.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment