diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 82956c0..f831bcd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,10 +4,10 @@ on: push: branches: [ "main" ] pull_request: - types: [opened, reopened] + types: [opened, reopened, synchronize] jobs: - test: + test-16-2: runs-on: macos-latest steps: - name: Set Xcode version @@ -16,12 +16,20 @@ jobs: - name: Run tests run: swift test -v - test-linux: - if: false - runs-on: ubuntu-22.04 + test-26: + runs-on: macos-26 + steps: + - name: Set Xcode version + run: sudo xcode-select -s /Applications/Xcode_26.0.app + - uses: actions/checkout@v3 + - name: Run tests + run: swift test -v + + test-linux-6-1: + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: swift-actions/setup-swift@v2 + - uses: SwiftyLab/setup-swift@latest with: swift-version: "6.1.0" - name: Get swift version @@ -30,3 +38,17 @@ jobs: run: git config --global user.email "test@example.com" && git config --global user.name "Test User" - name: Run tests run: swift test -v + + test-linux-6-2: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: SwiftyLab/setup-swift@latest + with: + swift-version: "6.2.0" + - name: Get swift version + run: swift --version + - name: Prepare Git + run: git config --global user.email "test@example.com" && git config --global user.name "Test User" + - name: Run tests + run: swift test -v diff --git a/Package.swift b/Package.swift index 754c662..397262d 100644 --- a/Package.swift +++ b/Package.swift @@ -17,11 +17,14 @@ let products: [PackageDescription.Product] = [ ) ] +let flags: [PackageDescription.SwiftSetting] = [.enableExperimentalFeature("StrictConcurrency")] + let targets: [PackageDescription.Target] = [ .executableTarget( name: "xcode-selective-test", dependencies: ["SelectiveTestingCore", - .product(name: "ArgumentParser", package: "swift-argument-parser")] + .product(name: "ArgumentParser", package: "swift-argument-parser")], + swiftSettings: flags ), .target(name: "SelectiveTestingCore", dependencies: ["DependencyCalculator", @@ -29,25 +32,44 @@ let targets: [PackageDescription.Target] = [ "Git", "PathKit", "Yams", - .product(name: "ArgumentParser", package: "swift-argument-parser")]), + .product(name: "ArgumentParser", package: "swift-argument-parser")], + swiftSettings: flags + ), .target(name: "DependencyCalculator", - dependencies: ["Workspace", "PathKit", "Git", .product(name: "Logging", package: "swift-log")]), + dependencies: ["Workspace", "PathKit", "Git", .product(name: "Logging", package: "swift-log")], + swiftSettings: flags + ), .target(name: "TestConfigurator", - dependencies: ["Workspace", "PathKit", .product(name: "Logging", package: "swift-log")]), + dependencies: [ + "Workspace", + "PathKit", + .product(name: "Logging", package: "swift-log"), + .product(name: "ArgumentParser", package: "swift-argument-parser") + ], + swiftSettings: flags + ), .target(name: "Workspace", - dependencies: ["XcodeProj", .product(name: "Logging", package: "swift-log")]), + dependencies: ["XcodeProj", .product(name: "Logging", package: "swift-log")], + swiftSettings: flags + ), .target(name: "Git", - dependencies: ["SelectiveTestShell", "PathKit", .product(name: "Logging", package: "swift-log")]), - .target(name: "SelectiveTestShell"), + dependencies: ["SelectiveTestShell", "PathKit", .product(name: "Logging", package: "swift-log")], + swiftSettings: flags + ), + .target(name: "SelectiveTestShell", + swiftSettings: flags + ), .testTarget( name: "SelectiveTestingTests", dependencies: ["xcode-selective-test", "PathKit"], - resources: [.copy("ExampleProject")] + resources: [.copy("ExampleProject")], + swiftSettings: flags ), .testTarget( name: "DependencyCalculatorTests", dependencies: ["DependencyCalculator", "Workspace", "PathKit", "SelectiveTestingCore"], - resources: [.copy("ExamplePackages")] + resources: [.copy("ExamplePackages")], + swiftSettings: flags ), .plugin( name: "SelectiveTestingPlugin", @@ -61,7 +83,7 @@ let targets: [PackageDescription.Target] = [ ] ), dependencies: ["xcode-selective-test"] - ), + ) ] let package = Package( diff --git a/Plugins/SelectiveTestingPlugin/SelectiveTestingPlugin.swift b/Plugins/SelectiveTestingPlugin/SelectiveTestingPlugin.swift index 7f0dc29..2a73c2d 100644 --- a/Plugins/SelectiveTestingPlugin/SelectiveTestingPlugin.swift +++ b/Plugins/SelectiveTestingPlugin/SelectiveTestingPlugin.swift @@ -48,19 +48,23 @@ struct SelectiveTestingPlugin: CommandPlugin { } if !toolArguments.contains(where: { $0 == "--test-plan" }) { - let testPlans = context.xcodeProject.filePaths.filter { - $0.extension == "xctestplan" + let allFiles = context.xcodeProject.targets.reduce([]) { partialResult, target in + partialResult + target.inputFiles + } + + let testPlans = allFiles.filter { + $0.url.pathExtension == "xctestplan" } if !testPlans.isEmpty { if testPlans.count == 1 { - print("Using \(testPlans[0].string) test plan") + print("Using \(testPlans[0].url.path()) test plan") } else { print("Using \(testPlans.count) test plans") } for testPlan in testPlans { - toolArguments.append(contentsOf: ["--test-plan", testPlan.string]) + toolArguments.append(contentsOf: ["--test-plan", testPlan.url.path()]) } } } diff --git a/Sources/Workspace/Target.swift b/Sources/Workspace/Target.swift index 0c59a4f..e3cca85 100644 --- a/Sources/Workspace/Target.swift +++ b/Sources/Workspace/Target.swift @@ -3,7 +3,7 @@ // import Foundation -import PathKit +@preconcurrency import PathKit import XcodeProj extension PBXNativeTarget { @@ -17,8 +17,8 @@ extension PBXNativeTarget { } } -public struct TargetIdentity: Hashable { - public enum TargetType { +public struct TargetIdentity: Hashable, Sendable { + public enum TargetType: Sendable { case project case package }