From 9f6a23e1f4258f0cfccd3135e97c27e8ae700aa3 Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Sat, 13 Sep 2025 07:27:48 +0900 Subject: [PATCH 01/11] add any keyword --- Sources/PostgresMigrations/Migrations.swift | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Sources/PostgresMigrations/Migrations.swift b/Sources/PostgresMigrations/Migrations.swift index a7cf227..ad38db3 100644 --- a/Sources/PostgresMigrations/Migrations.swift +++ b/Sources/PostgresMigrations/Migrations.swift @@ -18,13 +18,13 @@ 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 From 3f16b81dfb61675e5fbb7d1cb6f9db63b50dbd06 Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Sat, 13 Sep 2025 07:28:01 +0900 Subject: [PATCH 02/11] add .enableUpcomingFeature("ExistentialAny") --- Package.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 18f854a..34a04e6 100644 --- a/Package.swift +++ b/Package.swift @@ -17,14 +17,20 @@ let package = Package( name: "PostgresMigrations", dependencies: [ .product(name: "PostgresNIO", package: "postgres-nio") + ], + swiftSettings: [ + .enableUpcomingFeature("ExistentialAny") ] ), .testTarget( name: "PostgresMigrationsTests", dependencies: [ "PostgresMigrations" + ], + swiftSettings: [ + .enableUpcomingFeature("ExistentialAny") ] ), ], - swiftLanguageVersions: [.v5, .version("6")] + swiftLanguageModes: [.v5, .v6] ) From ea817c333b90b3fdead6cfe6fb49e73709dd45aa Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Mon, 20 Oct 2025 15:34:39 +0900 Subject: [PATCH 03/11] add support platform macCatlyst, tvOS and visionOS --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 34a04e6..4d12c4e 100644 --- a/Package.swift +++ b/Package.swift @@ -5,7 +5,7 @@ import PackageDescription 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"]) ], From 38b8d315310fee4f756b62cf6a1de3c79d13d0da Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Mon, 20 Oct 2025 15:35:16 +0900 Subject: [PATCH 04/11] bump to swift 6.0 --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 4d12c4e..0b3a051 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// 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 From c16d5fd2151938166b6e3c3b94f19bec8d481f07 Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Mon, 20 Oct 2025 15:35:41 +0900 Subject: [PATCH 05/11] add swiftSettings --- Package.swift | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Package.swift b/Package.swift index 0b3a051..35dc1f6 100644 --- a/Package.swift +++ b/Package.swift @@ -3,6 +3,17 @@ 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), .macCatalyst(.v17), .tvOS(.v17), .visionOS(.v1)], @@ -18,9 +29,7 @@ let package = Package( dependencies: [ .product(name: "PostgresNIO", package: "postgres-nio") ], - swiftSettings: [ - .enableUpcomingFeature("ExistentialAny") - ] + swiftSettings: swiftSettings ), .testTarget( name: "PostgresMigrationsTests", From 1b9346df410dd237afaf3cae8bbc3f6deb8af76a Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Mon, 20 Oct 2025 15:36:15 +0900 Subject: [PATCH 06/11] remove explicit swiftLanguageModes --- Package.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Package.swift b/Package.swift index 35dc1f6..d82b55f 100644 --- a/Package.swift +++ b/Package.swift @@ -41,5 +41,4 @@ let package = Package( ] ), ], - swiftLanguageModes: [.v5, .v6] ) From 4e9b9a33b26f99f833766733e1ff819abbaac7c6 Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Mon, 20 Oct 2025 15:42:23 +0900 Subject: [PATCH 07/11] fix error for InternalImportsByDefault --- Sources/PostgresMigrations/Migration.swift | 2 +- Sources/PostgresMigrations/MigrationService.swift | 4 ++-- Sources/PostgresMigrations/Migrations.swift | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) 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 ad38db3..dc8f620 100644 --- a/Sources/PostgresMigrations/Migrations.swift +++ b/Sources/PostgresMigrations/Migrations.swift @@ -13,7 +13,7 @@ //===----------------------------------------------------------------------===// import Logging -import PostgresNIO +public import PostgresNIO /// Database migration support public actor DatabaseMigrations { From 2c6df90a7bc9d441f574aa713141d589120ab7e7 Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Mon, 20 Oct 2025 15:45:49 +0900 Subject: [PATCH 08/11] fix test --- Package.swift | 4 +--- Tests/PostgresMigrationsTests/MigrationTests.swift | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Package.swift b/Package.swift index d82b55f..bdbb770 100644 --- a/Package.swift +++ b/Package.swift @@ -36,9 +36,7 @@ let package = Package( dependencies: [ "PostgresMigrations" ], - swiftSettings: [ - .enableUpcomingFeature("ExistentialAny") - ] + swiftSettings: swiftSettings ), ], ) 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 From 82506777f8aea2b4b4e41bae47fbc3e464f522dd Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Mon, 20 Oct 2025 15:58:01 +0900 Subject: [PATCH 09/11] fix --- Package.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index bdbb770..52ac318 100644 --- a/Package.swift +++ b/Package.swift @@ -21,7 +21,7 @@ let package = Package( .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( @@ -38,5 +38,5 @@ let package = Package( ], swiftSettings: swiftSettings ), - ], + ] ) From 81cc82208e02de79d797239e31414e7e828296a4 Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Mon, 20 Oct 2025 16:15:39 +0900 Subject: [PATCH 10/11] update swift version to 6 in ci --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6deeff..8274a3a 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' From 29344cfea066f4e8fa921cb988bb1400a13c6f44 Mon Sep 17 00:00:00 2001 From: "zunda.dev@gmail.com" Date: Mon, 20 Oct 2025 16:29:39 +0900 Subject: [PATCH 11/11] downgrade codecov-action to v4 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8274a3a..06a5eb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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