keiro-migrations 0.18.0.0 → 0.19.0.0
raw patch · 3 files changed
+51/−31 lines, 3 filesdep ~kiroku-storedep ~kiroku-store-migrationsdep ~pg-migratePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: kiroku-store, kiroku-store-migrations, pg-migrate, pg-migrate-cli, pg-migrate-embed, pg-migrate-import-codd, pg-migrate-test-support
API changes (from Hackage documentation)
Files
- CHANGELOG.md +14/−0
- keiro-migrations.cabal +15/−15
- test/Main.hs +22/−16
CHANGELOG.md view
@@ -6,6 +6,20 @@ ## [Unreleased] +## 0.19.0.0 — 2026-09-25++### Breaking Changes++- Require `kiroku-store-migrations ^>=0.6.0.0` and+ `kiroku-store >=0.9.0.1 && <0.10`. The composed migration plan gains Kiroku+ migration `0012` ahead of Keiro's own migrations and grows from 43 to 44+ entries. `0012` is new, so no recorded checksum moves, but it blocks appends+ while it runs and Kiroku 0.8 writers cannot append after it; see the root+ changelog for the cutover.+- Move to the `pg-migrate` 1.2 family: `pg-migrate`, `pg-migrate-cli`,+ `pg-migrate-embed`, `pg-migrate-import-codd`, and, in tests,+ `pg-migrate-test-support`.+ ## 0.18.0.0 — 2026-09-20
keiro-migrations.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: keiro-migrations-version: 0.18.0.0+version: 0.19.0.0 synopsis: Schema migrations for keiro description: Embedded PostgreSQL schema migrations and a migration runner for the Keiro@@ -333,10 +333,10 @@ bytestring >=0.11 && <0.13, containers >=0.6 && <0.8, hasql >=1.10 && <1.11,- kiroku-store-migrations ^>=0.4.0.0,- pg-migrate ^>=1.1.0.0,- pg-migrate-embed ^>=1.1.0.0,- pg-migrate-import-codd ^>=1.1.0.0,+ kiroku-store-migrations ^>=0.6.0.0,+ pg-migrate ^>=1.2.0.0,+ pg-migrate-embed ^>=1.2.0.0,+ pg-migrate-import-codd ^>=1.2.0.0, template-haskell >=2.20 && <2.24, text >=2.0 && <2.2, @@ -369,11 +369,11 @@ bytestring >=0.11 && <0.13, hasql >=1.10 && <1.11, keiro-migrations,- kiroku-store-migrations ^>=0.4.0.0,+ kiroku-store-migrations ^>=0.6.0.0, optparse-applicative >=0.17 && <0.20,- pg-migrate ^>=1.1.0.0,- pg-migrate-cli ^>=1.1.0.0,- pg-migrate-import-codd ^>=1.1.0.0,+ pg-migrate ^>=1.2.0.0,+ pg-migrate-cli ^>=1.2.0.0,+ pg-migrate-import-codd ^>=1.2.0.0, text >=2.0 && <2.2, executable keiro-write-expected-schema@@ -415,10 +415,10 @@ hasql >=1.10 && <1.11, hspec >=2.10 && <2.12, keiro-migrations,- kiroku-store-migrations ^>=0.4.0.0,- pg-migrate ^>=1.1.0.0,- pg-migrate-import-codd ^>=1.1.0.0,- pg-migrate-test-support ^>=1.1.0.0,+ kiroku-store-migrations ^>=0.6.0.0,+ pg-migrate ^>=1.2.0.0,+ pg-migrate-import-codd ^>=1.2.0.0,+ pg-migrate-test-support ^>=1.2.0.0, text >=2.0 && <2.2, unix >=2.8 && <2.9, @@ -451,8 +451,8 @@ hasql-pool >=1.2 && <1.5, hspec >=2.10, keiro-migrations,- kiroku-store >=0.8 && <0.9,- kiroku-store-migrations ^>=0.4.0.0,+ kiroku-store >=0.9.0.1 && <0.10,+ kiroku-store-migrations ^>=0.6.0.0, lens >=5.2 && <5.4, temporary, text >=2.0 && <2.2,
test/Main.hs view
@@ -79,7 +79,7 @@ ] -> do componentNameText kirokuName `shouldBe` "kiroku" kirokuDependencies `shouldBe` mempty- length kirokuEntries `shouldBe` 11+ length kirokuEntries `shouldBe` 12 componentNameText keiroName `shouldBe` "keiro" dependencyName <- requireRight (componentName "kiroku") keiroDependencies `shouldBe` Set.singleton dependencyName@@ -186,7 +186,7 @@ plan >>= requireRight Keiro.pendingMigrations handshake `shouldBe` planMigrationIds plan- length (Keiro.pendingMigrations handshake) `shouldBe` 43+ length (Keiro.pendingMigrations handshake) `shouldBe` 44 Keiro.ledgerIssues handshake `shouldBe` [] handshakePassed handshake `shouldBe` False @@ -211,7 +211,7 @@ _ <- runMigrationPlan defaultRunOptions settings kirokuOnly >>= requireRight handshake <- missingMigrations defaultRunOptions provider plan >>= requireRight- Keiro.pendingMigrations handshake `shouldBe` drop 11 (planMigrationIds plan)+ Keiro.pendingMigrations handshake `shouldBe` drop 12 (planMigrationIds plan) length (Keiro.pendingMigrations handshake) `shouldBe` 32 Keiro.ledgerIssues handshake `shouldBe` [] handshakePassed handshake `shouldBe` False@@ -295,12 +295,12 @@ assertSchema connection let provider = providerFor connection rerun <- runMigrationPlanWith defaultRunOptions provider plan >>= requireRight- reportOutcomes rerun `shouldBe` replicate 43 AlreadyApplied+ reportOutcomes rerun `shouldBe` replicate 44 AlreadyApplied verified <- verifyMigrationPlanWith defaultRunOptions provider plan >>= requireRight case verified of VerificationReport verificationIssues applied pending unknown -> do verificationIssues `shouldBe` []- length applied `shouldBe` 43+ length applied `shouldBe` 44 pending `shouldBe` [] unknown `shouldBe` [] either (expectationFailure . show) pure result@@ -349,7 +349,7 @@ (runMigrationPlan defaultRunOptions settings plan >>= requireRight) (runMigrationPlan defaultRunOptions settings plan >>= requireRight) sort [reportOutcomes first, reportOutcomes second]- `shouldBe` sort [replicate 43 AppliedNow, replicate 43 AlreadyApplied]+ `shouldBe` sort [replicate 44 AppliedNow, replicate 44 AlreadyApplied] it "upgrades singleton read-model rows into deterministic rebuild groups" $ do fullPlan <- requirePlan@@ -368,7 +368,8 @@ withConnection settings $ \connection -> useSession connection (Session.script legacyReadModelFixtureSql) report <- runMigrationPlan defaultRunOptions settings fullPlan >>= requireRight- Prelude.drop 32 (reportOutcomes report) `shouldBe` replicate 11 AppliedNow+ Prelude.drop (length (planMigrationIds priorPlan)) (reportOutcomes report)+ `shouldBe` replicate 11 AppliedNow withConnection settings $ \connection -> do rows <- useSession connection (Session.statement () legacyGroupUpgradeStatement) rows@@ -394,7 +395,8 @@ withConnection settings $ \connection -> useSession connection (Session.script preCanonicalRebuildFixtureSql) report <- runMigrationPlan defaultRunOptions settings fullPlan >>= requireRight- Prelude.drop 34 (reportOutcomes report) `shouldBe` replicate 9 AppliedNow+ Prelude.drop (length (planMigrationIds priorPlan)) (reportOutcomes report)+ `shouldBe` replicate 9 AppliedNow withConnection settings $ \connection -> do rows <- useSession connection (Session.statement () preCanonicalRebuildShapeStatement) rows@@ -419,7 +421,8 @@ withConnection settings $ \connection -> useSession connection (Session.script preStatusContractFixtureSql) report <- runMigrationPlan defaultRunOptions settings fullPlan >>= requireRight- Prelude.drop 36 (reportOutcomes report) `shouldBe` replicate 7 AppliedNow+ Prelude.drop (length (planMigrationIds priorPlan)) (reportOutcomes report)+ `shouldBe` replicate 7 AppliedNow withConnection settings $ \connection -> do facts <- useSession connection (Session.statement () preStatusContractFactsStatement) facts `shouldBe` ("unmanaged", 0, "unmanaged", True, True)@@ -442,7 +445,8 @@ withConnection settings $ \connection -> useSession connection (Session.statement () guardFunctionOidStatement) report <- runMigrationPlan defaultRunOptions settings fullPlan >>= requireRight- Prelude.drop 40 (reportOutcomes report) `shouldBe` replicate 3 AppliedNow+ Prelude.drop (length (planMigrationIds priorPlan)) (reportOutcomes report)+ `shouldBe` replicate 3 AppliedNow withConnection settings $ \connection -> do (afterOid, epochFenced, publicRevoked) <- useSession connection (Session.statement () upgradedGuardFactsStatement)@@ -467,7 +471,8 @@ withConnection settings $ \connection -> useSession connection (Session.script preRejectionOutboxFixtureSql) report <- runMigrationPlan defaultRunOptions settings fullPlan >>= requireRight- Prelude.drop 41 (reportOutcomes report) `shouldBe` replicate 2 AppliedNow+ Prelude.drop (length (planMigrationIds priorPlan)) (reportOutcomes report)+ `shouldBe` replicate 2 AppliedNow withConnection settings $ \connection -> do useSession connection (Session.script validRejectionAuditSql) missingAudit <- Connection.use connection (Session.script missingRejectionAuditSql)@@ -678,7 +683,7 @@ up <- runMigrationPlan defaultRunOptions settings plan >>= requireRight reportOutcomes up `shouldBe` replicate 7 AlreadyApplied- <> replicate 4 AppliedNow+ <> replicate 5 AppliedNow <> replicate 16 AlreadyApplied <> replicate 16 AppliedNow @@ -1115,14 +1120,14 @@ up <- runMigrationPlan defaultRunOptions settings plan >>= requireRight reportOutcomes up `shouldBe` replicate 7 AlreadyApplied- <> replicate 4 AppliedNow+ <> replicate 5 AppliedNow <> replicate 16 AlreadyApplied <> replicate 16 AppliedNow verifiedAfterCanaries <- verifyMigrationPlan defaultRunOptions settings plan >>= requireRight case verifiedAfterCanaries of VerificationReport verificationIssues _ _ _ -> verificationIssues `shouldBe` [] rerun <- runMigrationPlan defaultRunOptions settings plan >>= requireRight- reportOutcomes rerun `shouldBe` replicate 43 AlreadyApplied+ reportOutcomes rerun `shouldBe` replicate 44 AlreadyApplied second <- importCoddHistory defaultImportOptions config provider plan frameworkCoddHistoryMappings >>= requireRight@@ -1132,7 +1137,7 @@ sourceRows <- useSession connection (Session.statement () (sourceRowCountStatement sourceSchema)) sourceRows `shouldBe` 23 facts <- useSession connection (Session.statement () importFactsStatement)- facts `shouldBe` (43, 23, True)+ facts `shouldBe` (44, 23, True) postCoddImportPendingIssues :: IO [VerificationIssue] postCoddImportPendingIssues =@@ -1146,6 +1151,7 @@ ("kiroku", "0009"), ("kiroku", "0010"), ("kiroku", "0011"),+ ("kiroku", "0012"), ("keiro", "0017-schema-management-comment"), ("keiro", "0018"), ("keiro", "0019-keiro-snapshots-state-shape-hash"),@@ -1413,7 +1419,7 @@ (to_regclass('keiro_read.projection_group_status_v1') IS NOT NULL), (obj_description(to_regnamespace('keiro_read'), 'pg_namespace') = 'Versioned, owner-rights read contracts for out-of-process Keiro consumers.'),- (obj_description(to_regnamespace('kiroku'), 'pg_namespace') = 'Managed by pg-migrate component kiroku through 0011'),+ (obj_description(to_regnamespace('kiroku'), 'pg_namespace') = 'Managed by pg-migrate component kiroku through 0012'), (obj_description(to_regnamespace('keiro'), 'pg_namespace') = 'Managed by pg-migrate component keiro through 0017-schema-management-comment') ) AS checks(ok) """