From c24ff1da9052a9129a6c37e4e0cde4c0f2d8bb8c Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Tue, 22 Jul 2025 09:17:02 -0700 Subject: [PATCH 1/7] wip --- .../xcshareddata/swiftpm/Package.resolved | 13 +- Examples/Reminders/Schema.swift | 142 +++++++++++++++++- Examples/Reminders/SearchReminders.swift | 17 +++ test.db | Bin 0 -> 57344 bytes 4 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 test.db diff --git a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 59541a19..146bc1b9 100644 --- a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "revision" : "6bd870099083ef269eeee8835808cb6233151654", - "version" : "0.7.0" + "revision" : "a2a7c06f5b3c60811558bd9552fbbbd0cc027d91", + "version" : "0.9.0" } }, { @@ -136,6 +136,15 @@ "version" : "601.0.1" } }, + { + "identity" : "swift-tagged", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-tagged", + "state" : { + "revision" : "3907a9438f5b57d317001dc99f3f11b46882272b", + "version" : "0.10.0" + } + }, { "identity" : "xctest-dynamic-overlay", "kind" : "remoteSourceControl", diff --git a/Examples/Reminders/Schema.swift b/Examples/Reminders/Schema.swift index 788f8f27..12a3b416 100644 --- a/Examples/Reminders/Schema.swift +++ b/Examples/Reminders/Schema.swift @@ -47,9 +47,18 @@ extension Reminder { static let incomplete = Self.where { !$0.isCompleted } static func searching(_ text: String) -> Where { Self.where { - $0.title.collate(.nocase).contains(text) - || $0.notes.collate(.nocase).contains(text) + if !text.isEmpty { + $0.id.in( + RemindersText + .where { $0.match(text) } + .select(\.reminderID) + ) + } } +// Self.where { +// $0.title.collate(.nocase).contains(text) +// || $0.notes.collate(.nocase).contains(text) +// } } static let withTags = group(by: \.id) .leftJoin(ReminderTag.all) { $0.id.eq($1.reminderID) } @@ -92,6 +101,60 @@ struct ReminderTag: Hashable, Identifiable { var tagID: Tag.ID } +protocol FTS5: StructuredQueriesCore.Table {} + +extension StructuredQueriesCore.TableDefinition where QueryValue: FTS5 { + var rank: some QueryExpression { + SQLQueryExpression( + """ + \(QueryValue.self)."rank" + """ + ) + } + + func match(_ pattern: some QueryExpression) -> some QueryExpression { + SQLQueryExpression( + """ + (\(QueryValue.self) MATCH \(pattern)) + """ + ) + } + + func highlight( + _ column: KeyPath>, + _ open: String, + _ close: String + ) -> some QueryExpression { + let column = self[keyPath: column] + let offset = Self.allColumns.firstIndex { $0.name == column.name }! + return SQLQueryExpression( + """ + highlight(\ + \(QueryValue.self), \ + \(raw: offset), + \(quote: open, delimiter: .text), \ + \(quote: close, delimiter: .text)\ + ) + """ + ) + } +} + +@Table +struct RemindersText: FTS5 { + let reminderID: Reminder.ID + let title: String + let notes: String + let listID: RemindersList.ID + let listTitle: String + let tags: String +} + +@Table @Selection +struct TagText { + let titles: String +} + func appDatabase() throws -> any DatabaseWriter { @Dependency(\.context) var context let database: any DatabaseWriter @@ -174,6 +237,21 @@ func appDatabase() throws -> any DatabaseWriter { """ ) .execute(db) + try #sql( + """ + CREATE VIRTUAL TABLE "remindersTexts" USING fts5( + "reminderID", + "title", + "notes", + "listID", + "listTitle", + "tags", + tokenize = 'trigram' + ) + """ + ) + .execute(db) + // TODO: Populate virtual table here } try migrator.migrate(database) @@ -222,6 +300,66 @@ func appDatabase() throws -> any DatabaseWriter { """ ) .execute(db) + + try Reminder.createTemporaryTrigger(after: .insert { new in + RemindersText.insert { + ($0.reminderID, $0.title, $0.notes, $0.listID, $0.listTitle) + } select: { + Reminder + .find(new.id) + .join(RemindersList.all) { $0.remindersListID.eq($1.id) } + .select { ($0.id, $0.title, $0.notes, $1.id, $1.title) } + } + }) + .execute(db) + try Reminder.createTemporaryTrigger(after: .update { + ($0.title, $0.notes, $0.remindersListID) + } forEachRow: { _, new in + RemindersText + .where { $0.reminderID.eq(new.id) } + .update { + $0.title = new.title + $0.notes = new.notes + $0.listID = new.remindersListID + } + }) + .execute(db) + try Reminder.createTemporaryTrigger(after: .delete { old in + RemindersText + .where { $0.reminderID.eq(old.id) } + .delete() + }) + .execute(db) + try RemindersList.createTemporaryTrigger(after: .update { + $0.title + } forEachRow: { _, new in + RemindersText + .where { $0.listID.eq(new.id) } + .update { $0.listTitle = new.title } + }) + .execute(db) + try ReminderTag.createTemporaryTrigger(after: .insert { new in + RemindersText + .where { $0.reminderID.eq(new.reminderID) } + .update { + $0.tags = ReminderTag + .where { $0.reminderID.eq(new.reminderID) } + .join(Tag.all) { $0.tagID.eq($1.id) } + .select { $1.title.groupConcat(" ") ?? "" } + } + }) + .execute(db) + try ReminderTag.createTemporaryTrigger(after: .delete { old in + RemindersText + .where { $0.reminderID.eq(old.reminderID) } + .update { + $0.tags = ReminderTag + .where { $0.reminderID.eq(old.reminderID) } + .join(Tag.all) { $0.tagID.eq($1.id) } + .select { $1.title.groupConcat(" ") ?? "" } + } + }) + .execute(db) } return database diff --git a/Examples/Reminders/SearchReminders.swift b/Examples/Reminders/SearchReminders.swift index 0cc0ed5a..16845023 100644 --- a/Examples/Reminders/SearchReminders.swift +++ b/Examples/Reminders/SearchReminders.swift @@ -50,6 +50,10 @@ class SearchRemindersModel { .count(), animation: .default ) + + + let x = + try await $reminders.load( Reminder .searching(searchText) @@ -70,6 +74,19 @@ class SearchRemindersModel { tags: #sql("\($2.jsonNames)") ) }, +// Reminder +// .join(RemindersText.all) { $0.id.eq($1.reminderID) } +// .where { $1.match(searchText) } +// .join(RemindersList.all) { $0.remindersListID.eq($2.id) } +// .select { +// Row.Columns( +// isPastDue: $0.isPastDue, +// notes: $0.inlineNotes, +// reminder: $0, +// remindersList: $2, +// tags: #bind([]) +// ) +// }, animation: .default ) } diff --git a/test.db b/test.db new file mode 100644 index 0000000000000000000000000000000000000000..e48754409178bd2c1807c5f02a00e341d436a70c GIT binary patch literal 57344 zcmeI(O;6)S7{GCxmn4J`dO=ocRYtiak)moTyFv)9)DR4f)|+gD>2}ov$|feV2r-S# z7Pf~KY^&aS?-%H$hu(VV*XgB)O1<<0beuQr)S=r0QaAcr80_(QW}e?O9t9Z=J~eF5 z630&WwC;%wcWqUxx_Dt?f6ge)z}a6A{zn-Ab`OCM&RpoT-)4KuU5SJ^S0HsPVG+9 z>bjCXz{MP58Do1at< zO;M{pE$_Zsifdb2>eahZoj09^Yrh;H(x7zd*6s(DvN^jc$`w=J*K6T{xG%+yQQgU3 zrBnS8Y(|YhhVNM&@1L>xrKwv-Ft~N{2pabaqOmUbkL11~_xo~xkiS}5jBD%b>XjZf zAiH@nHW*p5c25XT6VJ_Jga+J5NEB9QwVYdFXzWHbeW868yk}{RQKv*<7vvG zEjBuXt#fB6ognH*@)XfMhrX8FatVVMBpBGTMmCBi6lYO)u|P z{IwuA8n(P4FZl>`KW&GIlc3vAwbXhXgzegaCLt^uC1)7*N=M1 z^Skx;SU6R^(cD>v`ja-C9GPOn@Ym@|RpRO65ocpDZF^->#Qt!P*8T7CZ&qgG+S;1> z-DP-kjuhs?k&epmZbCNCt=+n3^=ISFl*rg_$vHi1Tb?DS|8VsmPS(*3zZbe=uU&7o z-nf2$G3Y@DS~+uE+q0d{8+LluwVkf*U5=^;ni}aD{Z%HM(?G?jloyh>KXC4#(eQ&3 z>T>drn|CH{G6zY1RC{n)VO^u)XtH`N1+V{^4@TFIfI-yqI$Y5I_I{ z1Q0*~0R#|0009ILm?8oHr9Qv^Pf>dM4{C6X00IagfB*srAb Date: Tue, 22 Jul 2025 11:22:31 -0700 Subject: [PATCH 2/7] wip --- Examples/Reminders/Schema.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Examples/Reminders/Schema.swift b/Examples/Reminders/Schema.swift index 12a3b416..3b0c19e9 100644 --- a/Examples/Reminders/Schema.swift +++ b/Examples/Reminders/Schema.swift @@ -240,10 +240,10 @@ func appDatabase() throws -> any DatabaseWriter { try #sql( """ CREATE VIRTUAL TABLE "remindersTexts" USING fts5( - "reminderID", + "reminderID" UNINDEXED, "title", "notes", - "listID", + "listID" UNINDEXED, "listTitle", "tags", tokenize = 'trigram' From 94e616639cdf7b0d1f64fd8d7da91a71af7c91d7 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Wed, 20 Aug 2025 16:05:13 -0700 Subject: [PATCH 3/7] wip --- Package.resolved | 47 ++++++++++++++++++++++++++++------------------- Package.swift | 2 +- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/Package.resolved b/Package.resolved index 55540f18..a4e00c4e 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "12f0b0a2d75ac94fa86238ac64719d53b4116d58b62d2f0bbdbd50c0a617b32a", + "originHash" : "d87ac3bfcdef05674d1d54c62277ab77a7f1a74d2b106a3e0a8eb5567e2ff1ed", "pins" : [ { "identity" : "combine-schedulers", @@ -15,8 +15,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/groue/GRDB.swift", "state" : { - "revision" : "a5a1be26b4513dc7ec360eb56bc08a345bac6649", - "version" : "7.5.0" + "revision" : "8ba1bc9a96afc731a000fd4136dd13a5a46297bd", + "version" : "7.6.1" } }, { @@ -33,8 +33,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-collections", "state" : { - "revision" : "c1805596154bb3a265fd91b8ac0c4433b4348fb0", - "version" : "1.2.0" + "revision" : "8c0c0a8b49e080e54e5e328cc552821ff07cd341", + "version" : "1.2.1" } }, { @@ -60,8 +60,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-dependencies", "state" : { - "revision" : "4c90d6b2b9bf0911af87b103bb40f41771891596", - "version" : "1.9.2" + "revision" : "a501eebe552fd23691c560adf474fca2169ad8aa", + "version" : "1.9.4" } }, { @@ -69,8 +69,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-docc-plugin", "state" : { - "revision" : "d1691545d53581400b1de9b0472d45eb25c19fed", - "version" : "1.4.4" + "revision" : "3e4f133a77e644a5812911a0513aeb7288b07d06", + "version" : "1.4.5" } }, { @@ -96,8 +96,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-perception", "state" : { - "revision" : "d924c62a70fca5f43872f286dbd7cef0957f1c01", - "version" : "1.6.0" + "revision" : "7d3509c7f4de78ad3eb3d804e036fb62e3585141", + "version" : "2.0.5" } }, { @@ -105,8 +105,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-sharing", "state" : { - "revision" : "75e846ee3159dc75b3a29bfc24b6ce5a557ddca9", - "version" : "2.5.2" + "revision" : "530c98ac2c3e393615616bd6d8fc604600c99f6f", + "version" : "2.7.2" } }, { @@ -114,8 +114,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-snapshot-testing", "state" : { - "revision" : "37230a37e83f1b7023be08e1b1a2603fcb1567fb", - "version" : "1.18.4" + "revision" : "d7e40607dcd6bc26543f5d9433103f06e0b28f8f", + "version" : "1.18.6" } }, { @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "revision" : "6bd870099083ef269eeee8835808cb6233151654", - "version" : "0.7.0" + "revision" : "b5b5a9ed9ff321f43a02f07394f2831eba5e11f2", + "version" : "0.13.0" } }, { @@ -136,13 +136,22 @@ "version" : "601.0.1" } }, + { + "identity" : "swift-tagged", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-tagged", + "state" : { + "revision" : "3907a9438f5b57d317001dc99f3f11b46882272b", + "version" : "0.10.0" + } + }, { "identity" : "xctest-dynamic-overlay", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", "state" : { - "revision" : "39de59b2d47f7ef3ca88a039dff3084688fe27f4", - "version" : "1.5.2" + "revision" : "b2ed9eabefe56202ee4939dd9fc46b6241c88317", + "version" : "1.6.1" } } ], diff --git a/Package.swift b/Package.swift index e6e5b4b8..33ddf08c 100644 --- a/Package.swift +++ b/Package.swift @@ -33,7 +33,7 @@ let package = Package( .package(url: "https://github.com/pointfreeco/swift-dependencies", from: "1.9.0"), .package(url: "https://github.com/pointfreeco/xctest-dynamic-overlay", from: "1.5.0"), .package(url: "https://github.com/pointfreeco/swift-sharing", from: "2.3.0"), - .package(url: "https://github.com/pointfreeco/swift-structured-queries", branch: "better-insert-builder"), + .package(url: "https://github.com/pointfreeco/swift-structured-queries", from: "0.13.0"), ], targets: [ .target( From 9cca323c41e9fc8df53a3e55371097d3c08a0e3b Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Wed, 20 Aug 2025 16:08:08 -0700 Subject: [PATCH 4/7] wip --- Examples/Reminders/Schema.swift | 87 +----------------------- Examples/Reminders/SearchReminders.swift | 17 ----- 2 files changed, 2 insertions(+), 102 deletions(-) diff --git a/Examples/Reminders/Schema.swift b/Examples/Reminders/Schema.swift index 0091273a..ab54ffff 100644 --- a/Examples/Reminders/Schema.swift +++ b/Examples/Reminders/Schema.swift @@ -51,13 +51,8 @@ extension Reminder { static let incomplete = Self.where { !$0.isCompleted } static func searching(_ text: String) -> Where { Self.where { - if !text.isEmpty { - $0.id.in( - RemindersText - .where { $0.match(text) } - .select(\.reminderID) - ) - } + $0.title.collate(.nocase).contains(text) + || $0.notes.collate(.nocase).contains(text) } } static let withTags = group(by: \.id) @@ -101,14 +96,6 @@ struct ReminderTag: Hashable, Identifiable { var tagID: Tag.ID } -@Table @Selection -struct RemindersText: StructuredQueries.FTS5 { - let reminderID: Reminder.ID - let title: String - let notes: String - let tags: String -} - func appDatabase() throws -> any DatabaseWriter { @Dependency(\.context) var context let database: any DatabaseWriter @@ -186,19 +173,6 @@ func appDatabase() throws -> any DatabaseWriter { """ ) .execute(db) - try #sql( - """ - CREATE VIRTUAL TABLE "remindersTexts" USING fts5( - "reminderID" UNINDEXED, - "title", - "notes", - "tags", - tokenize = 'trigram' - ) - """ - ) - .execute(db) - // TODO: Populate virtual table here } try migrator.migrate(database) @@ -214,14 +188,12 @@ func appDatabase() throws -> any DatabaseWriter { .update { $0.position = RemindersList.select { ($0.position.max() ?? -1) + 1} } }) .execute(db) - try Reminder.createTemporaryTrigger(after: .insert { new in Reminder .find(new.id) .update { $0.position = Reminder.select { ($0.position.max() ?? -1) + 1} } }) .execute(db) - try RemindersList.createTemporaryTrigger(after: .delete { _ in RemindersList.insert { RemindersList.Draft( @@ -233,61 +205,6 @@ func appDatabase() throws -> any DatabaseWriter { !RemindersList.exists() }) .execute(db) - - try Reminder.createTemporaryTrigger(after: .insert { new in - RemindersText.insert { - RemindersText.Columns( - reminderID: new.id, - title: new.title, - notes: new.notes, - tags: "" - ) - } - }) - .execute(db) - - try Reminder.createTemporaryTrigger(after: .update { - ($0.title, $0.notes, $0.remindersListID) - } forEachRow: { _, new in - RemindersText - .where { $0.reminderID.eq(new.id) } - .update { - $0.title = new.title - $0.notes = new.notes - } - }) - .execute(db) - - try Reminder.createTemporaryTrigger(after: .delete { old in - RemindersText - .where { $0.reminderID.eq(old.id) } - .delete() - }) - .execute(db) - - try ReminderTag.createTemporaryTrigger(after: .insert { new in - RemindersText - .where { $0.reminderID.eq(new.reminderID) } - .update { - $0.tags = ReminderTag - .where { $0.reminderID.eq(new.reminderID) } - .join(Tag.all) { $0.tagID.eq($1.id) } - .select { $1.title.groupConcat(" ") ?? "" } - } - }) - .execute(db) - - try ReminderTag.createTemporaryTrigger(after: .delete { old in - RemindersText - .where { $0.reminderID.eq(old.reminderID) } - .update { - $0.tags = ReminderTag - .where { $0.reminderID.eq(old.reminderID) } - .join(Tag.all) { $0.tagID.eq($1.id) } - .select { $1.title.groupConcat(" ") ?? "" } - } - }) - .execute(db) } return database diff --git a/Examples/Reminders/SearchReminders.swift b/Examples/Reminders/SearchReminders.swift index 65972ea2..1c73ba6b 100644 --- a/Examples/Reminders/SearchReminders.swift +++ b/Examples/Reminders/SearchReminders.swift @@ -50,10 +50,6 @@ class SearchRemindersModel { .count(), animation: .default ) - - - let x = - try await $reminders.load( Reminder .searching(searchText) @@ -74,19 +70,6 @@ class SearchRemindersModel { tags: #sql("\($2.jsonTitles)") ) }, -// Reminder -// .join(RemindersText.all) { $0.id.eq($1.reminderID) } -// .where { $1.match(searchText) } -// .join(RemindersList.all) { $0.remindersListID.eq($2.id) } -// .select { -// Row.Columns( -// isPastDue: $0.isPastDue, -// notes: $0.inlineNotes, -// reminder: $0, -// remindersList: $2, -// tags: #bind([]) -// ) -// }, animation: .default ) } From 7fbaef27a7684590756f853d3447d24806eaef59 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Wed, 20 Aug 2025 16:08:33 -0700 Subject: [PATCH 5/7] wip --- test.db | Bin 57344 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test.db diff --git a/test.db b/test.db deleted file mode 100644 index e48754409178bd2c1807c5f02a00e341d436a70c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57344 zcmeI(O;6)S7{GCxmn4J`dO=ocRYtiak)moTyFv)9)DR4f)|+gD>2}ov$|feV2r-S# z7Pf~KY^&aS?-%H$hu(VV*XgB)O1<<0beuQr)S=r0QaAcr80_(QW}e?O9t9Z=J~eF5 z630&WwC;%wcWqUxx_Dt?f6ge)z}a6A{zn-Ab`OCM&RpoT-)4KuU5SJ^S0HsPVG+9 z>bjCXz{MP58Do1at< zO;M{pE$_Zsifdb2>eahZoj09^Yrh;H(x7zd*6s(DvN^jc$`w=J*K6T{xG%+yQQgU3 zrBnS8Y(|YhhVNM&@1L>xrKwv-Ft~N{2pabaqOmUbkL11~_xo~xkiS}5jBD%b>XjZf zAiH@nHW*p5c25XT6VJ_Jga+J5NEB9QwVYdFXzWHbeW868yk}{RQKv*<7vvG zEjBuXt#fB6ognH*@)XfMhrX8FatVVMBpBGTMmCBi6lYO)u|P z{IwuA8n(P4FZl>`KW&GIlc3vAwbXhXgzegaCLt^uC1)7*N=M1 z^Skx;SU6R^(cD>v`ja-C9GPOn@Ym@|RpRO65ocpDZF^->#Qt!P*8T7CZ&qgG+S;1> z-DP-kjuhs?k&epmZbCNCt=+n3^=ISFl*rg_$vHi1Tb?DS|8VsmPS(*3zZbe=uU&7o z-nf2$G3Y@DS~+uE+q0d{8+LluwVkf*U5=^;ni}aD{Z%HM(?G?jloyh>KXC4#(eQ&3 z>T>drn|CH{G6zY1RC{n)VO^u)XtH`N1+V{^4@TFIfI-yqI$Y5I_I{ z1Q0*~0R#|0009ILm?8oHr9Qv^Pf>dM4{C6X00IagfB*srAb Date: Wed, 20 Aug 2025 16:10:22 -0700 Subject: [PATCH 6/7] wip --- .../xcshareddata/swiftpm/Package.resolved | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 952c0474..c35f7919 100644 --- a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "branch" : "better-insert-builder", - "revision" : "61ef6100f69e57260e2302d68659dda428849e53" + "revision" : "b5b5a9ed9ff321f43a02f07394f2831eba5e11f2", + "version" : "0.13.0" } }, { @@ -136,6 +136,15 @@ "version" : "601.0.1" } }, + { + "identity" : "swift-tagged", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-tagged", + "state" : { + "revision" : "3907a9438f5b57d317001dc99f3f11b46882272b", + "version" : "0.10.0" + } + }, { "identity" : "xctest-dynamic-overlay", "kind" : "remoteSourceControl", From debfc9fad4e99c3abcd67efcc7462161f6a2b640 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Wed, 20 Aug 2025 16:15:34 -0700 Subject: [PATCH 7/7] Remove Linux from CI while GRDB doesn't support it --- .github/workflows/ci.yml | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9656451d..6b624064 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,19 +43,20 @@ jobs: - name: xcodebuild ${{ matrix.scheme }} run: make DERIVED_DATA_PATH=~/.derivedData SCHEME="${{ matrix.scheme }}" xcodebuild-raw - linux: - name: Linux - strategy: - matrix: - swift: - - '6.1' - runs-on: ubuntu-latest - container: swift:${{ matrix.swift }} - steps: - - uses: actions/checkout@v4 - - name: Install Build Dependencies - run: | - apt-get update - apt-get install -y libsqlite3-dev - - name: Build - run: swift build + # NB: GRDB 7.6.1 does not currently build on Linux. + # linux: + # name: Linux + # strategy: + # matrix: + # swift: + # - '6.1' + # runs-on: ubuntu-latest + # container: swift:${{ matrix.swift }} + # steps: + # - uses: actions/checkout@v4 + # - name: Install Build Dependencies + # run: | + # apt-get update + # apt-get install -y libsqlite3-dev + # - name: Build + # run: swift build