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
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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 }}
26 changes: 19 additions & 7 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -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")]
]
)
2 changes: 1 addition & 1 deletion Sources/PostgresMigrations/Migration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
//===----------------------------------------------------------------------===//

import Logging
import PostgresNIO
public import PostgresNIO

/// Protocol for a database migration
///
Expand Down
4 changes: 2 additions & 2 deletions Sources/PostgresMigrations/MigrationService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
26 changes: 13 additions & 13 deletions Sources/PostgresMigrations/Migrations.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@
//===----------------------------------------------------------------------===//

import Logging
import PostgresNIO
public import PostgresNIO

/// Database migration support
public actor DatabaseMigrations {
enum State {
case waiting([CheckedContinuation<Void, Error>])
case waiting([CheckedContinuation<Void, any Error>])
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
Expand All @@ -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)
Expand All @@ -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
}

Expand Down Expand Up @@ -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 }
Expand Down Expand Up @@ -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 }
Expand Down Expand Up @@ -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 =
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions Tests/PostgresMigrationsTests/MigrationTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Foundation
import Logging
import PostgresNIO
import ServiceLifecycle
import UnixSignals
import XCTest

@testable import PostgresMigrations
Expand Down
Loading