Skip to content

Commit 6971634

Browse files
committed
Fully adopt SwiftVersion.v6_2, including triggering
1 parent df27faa commit 6971634

27 files changed

+240
-127
lines changed

Sources/App/Commands/TriggerBuilds.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,8 +389,7 @@ struct BuildPair {
389389
case .iOS, .linux, .macosSpm, .macosXcodebuild, .tvOS, .watchOS:
390390
return BuildPair(platform, swiftVersion)
391391
case .visionOS:
392-
// visionOS is only available for Swift versions 5.9+
393-
return swiftVersion >= .v5_9 ? BuildPair(platform, swiftVersion) : nil
392+
return BuildPair(platform, swiftVersion)
394393
case .wasm:
395394
// Android is supported from Swift version 6.1+
396395
return swiftVersion >= .v6_1 ? BuildPair(platform, swiftVersion) : nil

Sources/App/Core/SwiftVersion+Build.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,27 @@ extension SwiftVersion {
1818
// https://github.com/SwiftPackageIndex/SwiftPackageIndex-Server/issues/1267#issuecomment-975379966
1919
// Patch versions are irrelevant here but the underlying type requires one, so use 0
2020
// in general.
21-
static let v5_9: Self = .init(5, 9, 0)
2221
static let v5_10: Self = .init(5, 10, 0)
2322
static let v6_0: Self = .init(6, 0, 0)
2423
static let v6_1: Self = .init(6, 1, 0)
24+
static let v6_2: Self = .init(6, 2, 0)
2525

2626
/// Currently supported swift versions for building
2727
static var allActive: [Self] {
28-
[.v5_9, .v5_10, .v6_0, .v6_1]
28+
[.v5_10, .v6_0, .v6_1, .v6_2]
2929
}
3030

3131
var xcodeVersion: String? {
3232
// NB: this is used for display purposes and not critical for compiler selection
3333
switch self {
34-
case .v5_9:
35-
return "Xcode 15.2"
3634
case .v5_10:
3735
return "Xcode 15.4"
3836
case .v6_0:
3937
return "Xcode 16.2"
4038
case .v6_1:
4139
return "Xcode 16.3"
40+
case .v6_2:
41+
return "Xcode 26.0"
4242
default:
4343
return nil
4444
}

Sources/App/Views/PackageController/SwiftVersion+BuildResultPresentable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extension SwiftVersion: BuildResultPresentable {
1717
var longDisplayName: String { "Swift \(displayName)" }
1818
var note: String? {
1919
switch self {
20-
// case .v6_0: return "beta"
20+
case .v6_2: return "beta"
2121
default: return nil
2222
}
2323
}

Tests/AppTests/AlertingTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ extension AllTests.AlertingTests {
3434
Alerting.BuildInfo.mock(swiftVersion: $0)
3535
}
3636
#expect(all.validateSwiftVersionsPresent() == .ok)
37-
#expect(all.filter { $0.swiftVersion != .v1 }.validateSwiftVersionsPresent() == .failed(reasons: ["Missing Swift version: 5.9"]))
38-
#expect(all.filter { $0.swiftVersion != .v1 && $0.swiftVersion != .v2 }.validateSwiftVersionsPresent() == .failed(reasons: ["Missing Swift version: 5.9", "Missing Swift version: 5.10"]))
37+
#expect(all.filter { $0.swiftVersion != .v1 }.validateSwiftVersionsPresent() == .failed(reasons: ["Missing Swift version: 5.10"]))
38+
#expect(all.filter { $0.swiftVersion != .v1 && $0.swiftVersion != .v2 }.validateSwiftVersionsPresent() == .failed(reasons: ["Missing Swift version: 5.10", "Missing Swift version: 6.0"]))
3939
}
4040

4141
@Test func validatePlatformsSuccessful() throws {
@@ -57,13 +57,13 @@ extension AllTests.AlertingTests {
5757
Alerting.BuildInfo.mock(swiftVersion: $0, status: .ok)
5858
}
5959
#expect(all.validateSwiftVersionsSuccessful() == .ok)
60-
#expect(all.filter { $0.swiftVersion != .v1 }.validateSwiftVersionsSuccessful() == .failed(reasons: ["Swift version without successful builds: 5.9"]))
60+
#expect(all.filter { $0.swiftVersion != .v1 }.validateSwiftVersionsSuccessful() == .failed(reasons: ["Swift version without successful builds: 5.10"]))
6161
#expect(
6262
Array(all.filter { $0.swiftVersion != .v1 })
6363
.appending(.mock(swiftVersion: .v1, status: .failed))
64-
.validateSwiftVersionsSuccessful() == .failed(reasons: ["Swift version without successful builds: 5.9"])
64+
.validateSwiftVersionsSuccessful() == .failed(reasons: ["Swift version without successful builds: 5.10"])
6565
)
66-
#expect(all.filter { $0.swiftVersion != .v1 && $0.swiftVersion != .v2 }.validateSwiftVersionsSuccessful() == .failed(reasons: ["Swift version without successful builds: 5.9", "Swift version without successful builds: 5.10"]))
66+
#expect(all.filter { $0.swiftVersion != .v1 && $0.swiftVersion != .v2 }.validateSwiftVersionsSuccessful() == .failed(reasons: ["Swift version without successful builds: 5.10", "Swift version without successful builds: 6.0"]))
6767
}
6868

6969
@Test func validateRunnerIdsPresent() throws {

Tests/AppTests/ApiTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -818,7 +818,7 @@ extension AllTests.ApiTests {
818818
let badge = try res.content.decode(Badge.self)
819819
#expect(badge.schemaVersion == 1)
820820
#expect(badge.label == "Swift")
821-
#expect(badge.message == "5.10 | 5.9")
821+
#expect(badge.message == "6.0 | 5.10")
822822
#expect(badge.isError == false)
823823
#expect(badge.color == "blue")
824824
#expect(badge.cacheSeconds == 6*3600)

Tests/AppTests/BadgeTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import Testing
2020
extension AllTests.BadgeTests {
2121

2222
@Test func badgeMessage_swiftVersions() throws {
23-
#expect(Badge.badgeMessage(swiftVersions: [.v1, .v2, .v3, .v4]) == "6.1 | 6.0 | 5.10 | 5.9")
23+
#expect(Badge.badgeMessage(swiftVersions: [.v1, .v2, .v3, .v4]) == "6.2 | 6.1 | 6.0 | 5.10")
2424
#expect(Badge.badgeMessage(swiftVersions: []) == nil)
2525
}
2626

Tests/AppTests/BuildIndexModelTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ extension AllTests.BuildIndexModelTests {
9696
let matrix = model.buildMatrix
9797

9898
// validate
99-
#expect(matrix.values.keys.count == 30)
99+
#expect(matrix.values.keys.count == 32)
100100
#expect(
101101
matrix.values[.init(swiftVersion: .v3, platform: .iOS)]?.map(\.column.label) == ["1.2.3", "2.0.0-b1", "main"]
102102
)
@@ -141,7 +141,7 @@ extension AllTests.BuildIndexModelTests {
141141
let matrix = model.buildMatrix
142142

143143
// validate
144-
#expect(matrix.values.keys.count == 30)
144+
#expect(matrix.values.keys.count == 32)
145145
#expect(
146146
matrix.values[.init(swiftVersion: .v3, platform: .iOS)]?.map(\.column.label) == ["1.2.3", "main"]
147147
)

Tests/AppTests/BuildTriggerTests.swift

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -266,10 +266,10 @@ extension AllTests.BuildTriggerTests {
266266
"\(v) could not be converted to a SPIManifest Swift version")
267267
}
268268
// Check the values specifically (which we can't easily do in the loop above)
269-
#expect(BuildPair(.iOS, .v5_9).manifestSwiftVersion == .v5_9)
270269
#expect(BuildPair(.iOS, .v5_10).manifestSwiftVersion == .v5_10)
271270
#expect(BuildPair(.iOS, .v6_0).manifestSwiftVersion == .v6_0)
272271
#expect(BuildPair(.iOS, .v6_1).manifestSwiftVersion == .v6_1)
272+
#expect(BuildPair(.iOS, .v6_2).manifestSwiftVersion == .v6_2)
273273
}
274274

275275
@Test func SPIManifest_docPairs() throws {
@@ -289,9 +289,9 @@ extension AllTests.BuildTriggerTests {
289289
configs:
290290
- documentation_targets: [t0]
291291
platform: ios
292-
swift_version: 5.9
292+
swift_version: 5.10
293293
""")
294-
#expect(manifest.docPairs == [.init(.iOS, .v5_9)])
294+
#expect(manifest.docPairs == [.init(.iOS, .v5_10)])
295295
}
296296
do {
297297
let manifest = try SPIManifest.Manifest(yml: """
@@ -301,12 +301,12 @@ extension AllTests.BuildTriggerTests {
301301
configs:
302302
- documentation_targets: [t0]
303303
platform: ios
304-
swift_version: 5.9
304+
swift_version: 5.10
305305
- documentation_targets: [t0]
306306
platform: macos-spm
307-
swift_version: 5.10
307+
swift_version: 6.0
308308
""")
309-
#expect(manifest.docPairs == [.init(.iOS, .v5_9), .init(.macosSpm, .v5_10)])
309+
#expect(manifest.docPairs == [.init(.iOS, .v5_10), .init(.macosSpm, .v6_0)])
310310
}
311311
}
312312

@@ -389,7 +389,7 @@ extension AllTests.BuildTriggerTests {
389389
#expect(queries.count == 1)
390390
#expect(queries.value.map { $0.variables["VERSION_ID"] } == [versionId.uuidString])
391391
#expect(queries.value.map { $0.variables["BUILD_PLATFORM"] } == ["ios"])
392-
#expect(queries.value.map { $0.variables["SWIFT_VERSION"] } == ["5.9"])
392+
#expect(queries.value.map { $0.variables["SWIFT_VERSION"] } == ["5.10"])
393393

394394
// ensure the Build stubs is created to prevent re-selection
395395
let v = try await Version.find(versionId, on: app.db)
@@ -436,30 +436,30 @@ extension AllTests.BuildTriggerTests {
436436

437437
// validate
438438
// ensure Gitlab requests go out
439-
#expect(queries.count == 30)
440-
#expect(queries.value.map { $0.variables["VERSION_ID"] } == Array(repeating: versionId.uuidString, count: 30))
439+
#expect(queries.count == 32)
440+
#expect(queries.value.map { $0.variables["VERSION_ID"] } == Array(repeating: versionId.uuidString, count: 32))
441441
let buildPlatforms = queries.value.compactMap { $0.variables["BUILD_PLATFORM"] }
442442
#expect(Dictionary(grouping: buildPlatforms, by: { $0 })
443-
.mapValues(\.count) == ["android": 1,
443+
.mapValues(\.count) == ["android": 2,
444444
"ios": 4,
445445
"macos-spm": 4,
446446
"macos-xcodebuild": 4,
447447
"linux": 4,
448-
"wasm": 1,
448+
"wasm": 2,
449449
"watchos": 4,
450450
"visionos": 4,
451451
"tvos": 4])
452452
let swiftVersions = queries.value.compactMap { $0.variables["SWIFT_VERSION"] }
453453
#expect(Dictionary(grouping: swiftVersions, by: { $0 })
454454
.mapValues(\.count) == [SwiftVersion.v1.description(droppingZeroes: .patch): 7,
455455
SwiftVersion.v2.description(droppingZeroes: .patch): 7,
456-
SwiftVersion.v3.description(droppingZeroes: .patch): 7,
456+
SwiftVersion.v3.description(droppingZeroes: .patch): 9,
457457
SwiftVersion.v4.description(droppingZeroes: .patch): 9])
458458

459459
// ensure the Build stubs are created to prevent re-selection
460460
let v = try await Version.find(versionId, on: app.db)
461461
try await v?.$builds.load(on: app.db)
462-
#expect(v?.builds.count == 30)
462+
#expect(v?.builds.count == 32)
463463

464464
// ensure re-selection is empty
465465
let candidates = try await fetchBuildCandidates(app.db)
@@ -597,11 +597,11 @@ extension AllTests.BuildTriggerTests {
597597
try await triggerBuilds(on: app.db, mode: .packageId(pkgId, force: false))
598598

599599
// validate
600-
#expect(triggerCount.value == 30)
600+
#expect(triggerCount.value == 32)
601601
// ensure builds are now in progress
602602
let v = try await Version.find(versionId, on: app.db)
603603
try await v?.$builds.load(on: app.db)
604-
#expect(v?.builds.count == 30)
604+
#expect(v?.builds.count == 32)
605605
}
606606
}
607607

@@ -622,11 +622,11 @@ extension AllTests.BuildTriggerTests {
622622
try await triggerBuilds(on: app.db, mode: .packageId(pkgId, force: true))
623623

624624
// validate
625-
#expect(triggerCount.value == 30)
625+
#expect(triggerCount.value == 32)
626626
// ensure builds are now in progress
627627
let v = try await Version.find(versionId, on: app.db)
628628
try await v?.$builds.load(on: app.db)
629-
#expect(v?.builds.count == 30)
629+
#expect(v?.builds.count == 32)
630630
}
631631
}
632632
}
@@ -671,7 +671,7 @@ extension AllTests.BuildTriggerTests {
671671
try await triggerBuilds(on: app.db, mode: .limit(4))
672672

673673
// validate - only the first batch must be allowed to trigger
674-
#expect(triggerCount.value == 30)
674+
#expect(triggerCount.value == 32)
675675
}
676676
}
677677
}
@@ -883,7 +883,7 @@ extension AllTests.BuildTriggerTests {
883883
try await triggerBuilds(on: app.db, mode: .packageId(pkgId, force: false))
884884

885885
// validate
886-
#expect(triggerCount.value == 30)
886+
#expect(triggerCount.value == 32)
887887
}
888888
}
889889
}
@@ -945,7 +945,7 @@ extension AllTests.BuildTriggerTests {
945945
try await triggerBuilds(on: app.db, mode: .packageId(pkgId, force: false))
946946

947947
// validate
948-
#expect(triggerCount.value == 30)
948+
#expect(triggerCount.value == 32)
949949
}
950950
}
951951
}
@@ -986,7 +986,7 @@ extension AllTests.BuildTriggerTests {
986986
try await triggerBuilds(on: app.db, mode: .packageId(.id0, force: false))
987987

988988
// validate
989-
#expect(triggerCount.value == 30)
989+
#expect(triggerCount.value == 32)
990990
}
991991
}
992992
}
@@ -1230,7 +1230,7 @@ extension AllTests.BuildTriggerTests {
12301230

12311231
@Test func BuildPair_all() throws {
12321232
// Sanity checks for critical counts used in canadidate selection
1233-
#expect(BuildPair.all.count == 30)
1233+
#expect(BuildPair.all.count == 32)
12341234
#expect(BuildPair.all == [
12351235
.init(.iOS, .v1),
12361236
.init(.iOS, .v2),
@@ -1260,10 +1260,12 @@ extension AllTests.BuildTriggerTests {
12601260
.init(.linux, .v2),
12611261
.init(.linux, .v3),
12621262
.init(.linux, .v4),
1263+
.init(.wasm, .v3),
12631264
.init(.wasm, .v4),
1265+
.init(.android, .v3),
12641266
.init(.android, .v4),
12651267
])
1266-
#expect(BuildPair.allExceptLatestSwiftVersion.count == 21)
1268+
#expect(BuildPair.allExceptLatestSwiftVersion.count == 23)
12671269
}
12681270

12691271
@Test func BuildPair_Equatable() throws {
@@ -1308,7 +1310,7 @@ extension AllTests.BuildTriggerTests {
13081310
let res = try await findMissingBuilds(app.db, packageId: pkgId)
13091311
#expect(res.count == 1)
13101312
let triggerInfo = try #require(res.first)
1311-
#expect(triggerInfo.buildPairs.count == 29)
1313+
#expect(triggerInfo.buildPairs.count == 31)
13121314
#expect(!triggerInfo.buildPairs.contains(.init(.iOS, .v1)))
13131315
}
13141316
}

Tests/AppTests/Helpers/SwiftVersion+ext.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ extension SwiftVersion {
7171
/// ```
7272
///
7373
/// And then all that remains is to adjust the mapping below whenever we change the range of Swift versions.
74-
static var v1: Self { .v5_9 }
75-
static var v2: Self { .v5_10 }
76-
static var v3: Self { .v6_0 }
77-
static var v4: Self { .v6_1 }
74+
static var v1: Self { .v5_10 }
75+
static var v2: Self { .v6_0 }
76+
static var v3: Self { .v6_1 }
77+
static var v4: Self { .v6_2 }
7878

7979
func incrementingPatchVersion(by value: Int = 1) -> Self {
8080
.init(major, minor, patch + value)

Tests/AppTests/PackageCollectionTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ extension AllTests.PackageCollectionTests {
265265
#expect(res.version == "1.2.3")
266266
#expect(res.summary == "Bar")
267267
#expect(res.verifiedCompatibility == [
268-
.init(platform: .init(name: "ios"), swiftVersion: .init("5.9")),
269-
.init(platform: .init(name: "macos"), swiftVersion: .init("5.10")),
268+
.init(platform: .init(name: "ios"), swiftVersion: .init("5.10")),
269+
.init(platform: .init(name: "macos"), swiftVersion: .init("6.0")),
270270
])
271271
#expect(res.license == .init(name: "MIT", url: URL(string: "https://foo/mit")!))
272272
#expect(res.createdAt == Date(timeIntervalSince1970: 0))

0 commit comments

Comments
 (0)