diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6deeff..06a5eb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,9 +20,9 @@ jobs: strategy: matrix: image: - - 'swift:5.9' - - 'swift:5.10' - 'swift:6.0' + - 'swift:6.1' + - 'swift:6.2' postgres-image: - 'postgres:17' - 'postgres:16' @@ -68,7 +68,7 @@ jobs: -ignore-filename-regex="\/Benchmarks\/" \ -instr-profile .build/debug/codecov/default.profdata > info.lcov - name: Upload to codecov.io - uses: codecov/codecov-action@v5 + uses: codecov/codecov-action@v4 with: files: info.lcov token: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file diff --git a/Package.swift b/Package.swift index 18f854a..52ac318 100644 --- a/Package.swift +++ b/Package.swift @@ -1,30 +1,42 @@ -// swift-tools-version: 5.9 +// swift-tools-version:6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription +let swiftSettings: [SwiftSetting] = [ + // https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md + .enableUpcomingFeature("ExistentialAny"), + + // https://github.com/swiftlang/swift-evolution/blob/main/proposals/0444-member-import-visibility.md + .enableUpcomingFeature("MemberImportVisibility"), + + // https://github.com/swiftlang/swift-evolution/blob/main/proposals/0409-access-level-on-imports.md + .enableUpcomingFeature("InternalImportsByDefault"), +] + let package = Package( name: "postgres-migrations", - platforms: [.macOS(.v14), .iOS(.v17), .tvOS(.v17)], + platforms: [.macOS(.v14), .iOS(.v17), .macCatalyst(.v17), .tvOS(.v17), .visionOS(.v1)], products: [ .library(name: "PostgresMigrations", targets: ["PostgresMigrations"]) ], dependencies: [ - .package(url: "https://github.com/vapor/postgres-nio", from: "1.25.0") + .package(url: "https://github.com/vapor/postgres-nio.git", from: "1.25.0") ], targets: [ .target( name: "PostgresMigrations", dependencies: [ .product(name: "PostgresNIO", package: "postgres-nio") - ] + ], + swiftSettings: swiftSettings ), .testTarget( name: "PostgresMigrationsTests", dependencies: [ "PostgresMigrations" - ] + ], + swiftSettings: swiftSettings ), - ], - swiftLanguageVersions: [.v5, .version("6")] + ] ) diff --git a/Sources/PostgresMigrations/Migration.swift b/Sources/PostgresMigrations/Migration.swift index e4df9f3..05dcf80 100644 --- a/Sources/PostgresMigrations/Migration.swift +++ b/Sources/PostgresMigrations/Migration.swift @@ -13,7 +13,7 @@ //===----------------------------------------------------------------------===// import Logging -import PostgresNIO +public import PostgresNIO /// Protocol for a database migration /// diff --git a/Sources/PostgresMigrations/MigrationService.swift b/Sources/PostgresMigrations/MigrationService.swift index d4ba312..3e6896f 100644 --- a/Sources/PostgresMigrations/MigrationService.swift +++ b/Sources/PostgresMigrations/MigrationService.swift @@ -13,8 +13,8 @@ //===----------------------------------------------------------------------===// import Logging -import PostgresNIO -import ServiceLifecycle +public import PostgresNIO +public import ServiceLifecycle /// Service that runs a database migration public struct DatabaseMigrationService: Service { diff --git a/Sources/PostgresMigrations/Migrations.swift b/Sources/PostgresMigrations/Migrations.swift index a7cf227..dc8f620 100644 --- a/Sources/PostgresMigrations/Migrations.swift +++ b/Sources/PostgresMigrations/Migrations.swift @@ -13,18 +13,18 @@ //===----------------------------------------------------------------------===// import Logging -import PostgresNIO +public import PostgresNIO /// Database migration support public actor DatabaseMigrations { enum State { - case waiting([CheckedContinuation]) + case waiting([CheckedContinuation]) case completed - case failed(Error) + case failed(any Error) } - var migrations: [DatabaseMigration] - var reverts: [String: DatabaseMigration] + var migrations: [any DatabaseMigration] + var reverts: [String: any DatabaseMigration] var state: State /// Initialize a DatabaseMigrations object @@ -38,7 +38,7 @@ public actor DatabaseMigrations { /// - Parameters /// - migration: DatabaseMigration to be applied /// - skipDuplicates: Only add migration if it doesn't exist in the list - public func add(_ migration: DatabaseMigration, skipDuplicates: Bool = false) { + public func add(_ migration: any DatabaseMigration, skipDuplicates: Bool = false) { if skipDuplicates { let existingMigration = self.migrations.first { type(of: $0) == type(of: migration) @@ -52,7 +52,7 @@ public actor DatabaseMigrations { /// /// This is useful for migrations you might have to revert. /// - Parameter migration: DatabaseMigration to be registerd - public func register(_ migration: DatabaseMigration) { + public func register(_ migration: any DatabaseMigration) { self.reverts[migration.name] = migration } @@ -96,7 +96,7 @@ public actor DatabaseMigrations { groups.count == 0 ? (migrations.map(\.group) + appliedMigrations.map(\.group)).uniqueElements : groups - var migrationsToApply: [DatabaseMigration] = .init() + var migrationsToApply: [any DatabaseMigration] = .init() // for each group apply/revert migrations for group in groups { let groupMigrations = migrations.filter { $0.group == group } @@ -180,7 +180,7 @@ public actor DatabaseMigrations { groups.count == 0 ? (migrations.map(\.group) + appliedMigrations.map(\.group)).uniqueElements : groups - var migrationsToRevert: [DatabaseMigration] = .init() + var migrationsToRevert: [any DatabaseMigration] = .init() // for each group revert migrations for group in groups { let appliedGroupMigrations = appliedMigrations.filter { $0.group == group } @@ -255,7 +255,7 @@ public actor DatabaseMigrations { // get migrations currently applied in the order they were applied let appliedMigrations = try await repository.getAll(client: client, logger: logger) - var migrationsToRevert: [DatabaseMigration] = .init() + var migrationsToRevert: [any DatabaseMigration] = .init() // if groups array passed in is empty then work out list of migration groups by combining // list of groups from migrations and applied migrations let groups = @@ -338,7 +338,7 @@ public actor DatabaseMigrations { } } - func setFailed(_ error: Error) { + func setFailed(_ error: any Error) { switch self.state { case .waiting(let continuations): for cont in continuations { @@ -437,14 +437,14 @@ struct PostgresMigrationRepository: Sendable { try await self.createMigrationsTable(client: client, logger: logger) } - func add(_ migration: DatabaseMigration, context: Context) async throws { + func add(_ migration: any DatabaseMigration, context: Context) async throws { try await context.connection.query( "INSERT INTO _hb_pg_migrations (\"name\", \"group\") VALUES (\(migration.name), \(migration.group.name))", logger: context.logger ) } - func remove(_ migration: DatabaseMigration, context: Context) async throws { + func remove(_ migration: any DatabaseMigration, context: Context) async throws { try await context.connection.query( "DELETE FROM _hb_pg_migrations WHERE name = \(migration.name)", logger: context.logger diff --git a/Tests/PostgresMigrationsTests/MigrationTests.swift b/Tests/PostgresMigrationsTests/MigrationTests.swift index 234d1a8..aaeafc5 100644 --- a/Tests/PostgresMigrationsTests/MigrationTests.swift +++ b/Tests/PostgresMigrationsTests/MigrationTests.swift @@ -3,6 +3,7 @@ import Foundation import Logging import PostgresNIO import ServiceLifecycle +import UnixSignals import XCTest @testable import PostgresMigrations