func readConfigAndRunTests()

in Sources/PackageRegistryCompatibilityTestSuite/Commands.swift [729:769]


    func readConfigAndRunTests(configPath: String, generateData: Bool,
                               test: (PackageRegistryCompatibilityTestSuite.Configuration) async throws -> Void) async throws {
        print("Reading configuration file at \(configPath)")
        let configData: Data
        do {
            configData = try readData(at: configPath)
        } catch {
            throw TestError("Failed to read configuration file: \(error)")
        }

        if generateData {
            var generatorConfig: TestConfigurationGenerator.Configuration = try self.decodeConfiguration(configData)

            // Convert `resourceBaseDirectory` to absolute path if needed. The generator has logic to transform
            // other file paths in the configuration so there is no need to do that here.
            if let resourceBaseDirectory = generatorConfig.resourceBaseDirectory {
                do {
                    let configDirectory = AbsolutePath(URL(fileURLWithPath: configPath).path).parentDirectory
                    generatorConfig.resourceBaseDirectory = try makeAbsolutePath(resourceBaseDirectory, relativeTo: configDirectory).pathString
                } catch {
                    throw TestError("Invalid \"resourceBaseDirectory\": \(error)")
                }
            }

            let generator = TestConfigurationGenerator(fileSystem: localFileSystem)
            do {
                try await withTemporaryDirectory(removeTreeOnDeinit: true) { tmpDir in
                    let configuration = try generator.run(configuration: generatorConfig, tmpDir: tmpDir)
                    try await test(configuration)
                }
            } catch {
                if error is TestError {
                    throw error
                }
                throw TestError("Failed to create temporary directory: \(error)")
            }
        } else {
            let configuration: PackageRegistryCompatibilityTestSuite.Configuration = try self.decodeConfiguration(configData)
            try await test(configuration)
        }
    }