     }
 
     override func runImpl() throws {
-        let graph = try loadPackageGraph()
-
         switch options.mode {
         case .version:
             print(Versioning.currentVersion.completeDisplayString)
 
         case .listTests:
+            let graph = try loadPackageGraph()
             let testPath = try buildTestsIfNeeded(options, graph: graph)
             let testSuites = try getTestSuites(path: testPath)
             let tests = testSuites.filteredTests(specifier: options.testCaseSpecifier)

            }

        case .runParallel:
            let testPath = try buildTestsIfNeeded(options, graph: graph)
            let testSuites = try getTestSuites(path: testPath)
            let tests = testSuites.filteredTests(specifier: options.testCaseSpecifier)

          #if os(Linux)
            warning(message: "can't discover new tests on Linux; please use this option on macOS instead")
          #endif
            let graph = try loadPackageGraph()
            let testPath = try buildTestsIfNeeded(options, graph: graph)
            let testSuites = try getTestSuites(path: testPath)
            let generator = LinuxMainGenerator(graph: graph, testSuites: testSuites)
            try generator.generate()

        case .runSerial:
            let graph = try loadPackageGraph()
            let testPath = try buildTestsIfNeeded(options, graph: graph)
            var ranSuccessfully = true

