run: generate final report on failures

Always generate the combined report, even if one of the
smoke test suites fails. This way we always have the same
file name to check for the results.  Also, refactor more.