diff --git a/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift b/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift index 0e28c20..e617c09 100644 --- a/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift +++ b/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift @@ -126,7 +126,7 @@ public struct LinuxRecipe: SwiftSDKRecipe { httpClient client: HTTPClient ) async throws -> SwiftSDKProduct { let sdkDirPath = self.sdkDirPath(paths: generator.pathsConfiguration) - if generator.isIncremental { + if !generator.isIncremental { try await generator.removeRecursively(at: sdkDirPath) } try await generator.createDirectoryIfNeeded(at: sdkDirPath) diff --git a/Tests/SwiftSDKGeneratorTests/EndToEndTests.swift b/Tests/SwiftSDKGeneratorTests/EndToEndTests.swift index 76c11c1..fe43765 100644 --- a/Tests/SwiftSDKGeneratorTests/EndToEndTests.swift +++ b/Tests/SwiftSDKGeneratorTests/EndToEndTests.swift @@ -100,5 +100,41 @@ final class EndToEndTests: XCTestCase { } } } + + func testRepeatedSDKBuilds() async throws { + let fm = FileManager.default + + var packageDirectory = FilePath(#file) + packageDirectory.removeLastComponent() + packageDirectory.removeLastComponent() + + // Test that an existing SDK can be rebuilt without cleaning up. + // Test with no arguments by default: + var possibleArguments = [""] + do { + try await Shell.run("docker ps") + possibleArguments.append("--with-docker --linux-distribution-name rhel --linux-distribution-version ubi9") + } catch { + self.logger.warning("Docker CLI does not seem to be working, skipping tests that involve Docker.") + } + + for runArguments in possibleArguments { + let testPackageURL = FileManager.default.temporaryDirectory.appendingPathComponent("swift-sdk-generator-test") + let testPackageDir = FilePath(testPackageURL.path) + try? fm.removeItem(atPath: testPackageDir.string) + try fm.createDirectory(atPath: testPackageDir.string, withIntermediateDirectories: true) + defer { try? fm.removeItem(atPath: testPackageDir.string) } + + let firstGeneratorOutput = try await Shell.readStdout( + "cd \(packageDirectory) && swift run swift-sdk-generator \(runArguments)" + ) + XCTAssert(firstGeneratorOutput.contains("swift experimental-sdk install")) + + let repeatGeneratorOutput = try await Shell.readStdout( + "cd \(packageDirectory) && swift run swift-sdk-generator \(runArguments)" + ) + XCTAssert(repeatGeneratorOutput.contains("swift experimental-sdk install")) + } + } #endif }