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)
}
}