func runTestWorkflow()

in testworkflow.go [1028:1072]


func runTestWorkflow(ctx context.Context, metrics *testMetrics, test *TestWorkflow) testResult {
	metrics.started()

	res := testResult{testWorkflow: test}
	if test.skipped {
		res.skipped = true
		res.err = fmt.Errorf("test suite was skipped with message: %q", res.testWorkflow.SkippedMessage())
		return res
	}

	clean := func() {
		metrics.done()
		log.Printf("cleaning up after test %s/%s (ID %s) in project %s, progress: %s\n", test.Name, test.Image.Name, test.wf.ID(), test.wf.Project, metrics.progress())
		cleaned, errs := cleanTestWorkflow(test)
		for _, err := range errs {
			log.Printf("error cleaning test %s/%s: %v\n", test.Name, test.Image.Name, err)
		}
		if len(cleaned) > 0 {
			log.Printf("test %s/%s had %d leftover resources\n", test.Name, test.Image.Name, len(cleaned))
		}
		for _, c := range cleaned {
			log.Printf("deleted resource %s from test %s/%s", c, test.Name, test.Image.Name)
		}
	}
	defer clean()

	start := time.Now()
	log.Printf("running test %s/%s (ID %s) in project %s, progress: %s\n", test.Name, test.Image.Name, test.wf.ID(), test.wf.Project, metrics.progress())
	if err := test.wf.Run(ctx); err != nil {
		res.err = err
		return res
	}
	delta := formatTimeDelta("04m 05s", time.Now().Sub(start))
	log.Printf("finished test %s/%s (ID %s) in project %s, time spent: %s\n", test.Name, test.Image.Name, test.wf.ID(), test.wf.Project, delta)

	results, err := getTestResults(ctx, test)
	if err != nil {
		res.err = err
		return res
	}
	res.results = results
	res.workflowSuccess = true

	return res
}