Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 28 additions & 6 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
42 changes: 32 additions & 10 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,37 +17,59 @@ 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",
"TestConfigurator",
"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",
Expand All @@ -61,7 +83,7 @@ let targets: [PackageDescription.Target] = [
]
),
dependencies: ["xcode-selective-test"]
),
)
]

let package = Package(
Expand Down
12 changes: 8 additions & 4 deletions Plugins/SelectiveTestingPlugin/SelectiveTestingPlugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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()])
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions Sources/Workspace/Target.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
//

import Foundation
import PathKit
@preconcurrency import PathKit
import XcodeProj

extension PBXNativeTarget {
Expand All @@ -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
}
Expand Down