Regres: Don't nuke the daily test dir before using the test results

`runDailyTest()` calls `test.cleanup()` before returning, removing the entire checkout directory, along with coverage data, and the git repo.

This breaks both `postDailyResults()` and `postCoverageResults()`.

Instead use a callback to handle the daily results. This way we can keep the `defer` to clean up even in case of error.

Change-Id: I9730d7dd8ac9c3a19d82d07a68325afdf38bfd40
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/44748
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
diff --git a/tests/regres/cmd/regres/main.go b/tests/regres/cmd/regres/main.go
index 6a7b2e5..383892c 100644
--- a/tests/regres/cmd/regres/main.go
+++ b/tests/regres/cmd/regres/main.go
@@ -632,47 +632,45 @@
 		dailyHash = git.ParseHash(r.dailyChange)
 	}
 
-	test, testLists, results, err := r.runDailyTest(dailyHash, reactorBackend, genCov)
-	if err != nil {
-		return err
-	}
+	return r.runDailyTest(dailyHash, reactorBackend, genCov,
+		func(test *test, testLists testlist.Lists, results *deqp.Results) error {
+			errs := []error{}
 
-	errs := []error{}
+			if err := r.postDailyResults(client, test, testLists, results, reactorBackend, dailyHash); err != nil {
+				errs = append(errs, err)
+			}
 
-	if err := r.postDailyResults(client, test, testLists, results, reactorBackend, dailyHash); err != nil {
-		errs = append(errs, err)
-	}
+			if genCov {
+				if err := r.postCoverageResults(results.Coverage, dailyHash); err != nil {
+					errs = append(errs, err)
+				}
+			}
 
-	if genCov {
-		if err := r.postCoverageResults(results.Coverage, dailyHash); err != nil {
-			errs = append(errs, err)
-		}
-	}
-
-	return cause.Merge(errs...)
+			return cause.Merge(errs...)
+		})
 }
 
-// runDailyTest performs the full deqp run on the HEAD change, returning the
-// results.
-func (r *regres) runDailyTest(dailyHash git.Hash, reactorBackend reactorBackend, genCov bool) (*test, testlist.Lists, *deqp.Results, error) {
+// runDailyTest performs the full deqp run on the HEAD change, calling
+// withResults with the test results.
+func (r *regres) runDailyTest(dailyHash git.Hash, reactorBackend reactorBackend, genCov bool, withResults func(*test, testlist.Lists, *deqp.Results) error) error {
 	// Get the full test results.
 	test := r.newTest(dailyHash).setReactorBackend(reactorBackend)
 	defer test.cleanup()
 
 	// Always need to checkout the change.
 	if err := test.checkout(); err != nil {
-		return nil, nil, nil, cause.Wrap(err, "Failed to checkout '%s'", dailyHash)
+		return cause.Wrap(err, "Failed to checkout '%s'", dailyHash)
 	}
 
 	d, err := r.getOrBuildDEQP(test)
 	if err != nil {
-		return nil, nil, nil, cause.Wrap(err, "Failed to build deqp for '%s'", dailyHash)
+		return cause.Wrap(err, "Failed to build deqp for '%s'", dailyHash)
 	}
 
 	// Load the test lists.
 	testLists, err := test.loadTestLists(fullTestListRelPath)
 	if err != nil {
-		return nil, nil, nil, cause.Wrap(err, "Failed to load full test lists for '%s'", dailyHash)
+		return cause.Wrap(err, "Failed to load full test lists for '%s'", dailyHash)
 	}
 
 	if genCov {
@@ -686,16 +684,16 @@
 
 	// Build the change.
 	if err := test.build(); err != nil {
-		return nil, nil, nil, cause.Wrap(err, "Failed to build '%s'", dailyHash)
+		return cause.Wrap(err, "Failed to build '%s'", dailyHash)
 	}
 
 	// Run the tests on the change.
 	results, err := test.run(testLists, d)
 	if err != nil {
-		return nil, nil, nil, cause.Wrap(err, "Failed to test '%s'", dailyHash)
+		return cause.Wrap(err, "Failed to test '%s'", dailyHash)
 	}
 
-	return test, testLists, results, nil
+	return withResults(test, testLists, results)
 }
 
 // postDailyResults posts the results of the daily full deqp run to gerrit as