packages feed

keiro-migrations-0.6.0.0: src/Keiro/Migrations/Internal/Definition.hs

{-# LANGUAGE TemplateHaskell #-}
-- GHC 9.12 has no Template Haskell directory-dependency API, so a sibling SQL
-- file that is added or removed without being listed in the manifest leaves this
-- module looking up to date and silently skips manifest membership validation.
-- The plugin forces GHC to reconsider this module on every build it runs.
-- Note this cannot help when no Haskell source changes at all: cabal then
-- reports "Up to date" and never invokes GHC. A clean build revalidates, and
-- the migrations.native.lock suite test checks directory membership at test
-- runtime regardless.
{-# OPTIONS_GHC -fplugin=Database.PostgreSQL.Migrate.Embed.RecompilePlugin #-}

module Keiro.Migrations.Internal.Definition
  ( embeddedMigrationEntries,
    keiroMigrations,
  )
where

import Data.ByteString (ByteString)
import Data.List.NonEmpty (NonEmpty)
import Data.Set qualified as Set
import Database.PostgreSQL.Migrate
  ( DefinitionError,
    MigrationComponent,
    migrationComponentFromEmbeddedSql,
  )
import Database.PostgreSQL.Migrate.Embed (embedMigrationManifest)

embeddedMigrationEntries :: NonEmpty (FilePath, ByteString)
embeddedMigrationEntries =
  $(embedMigrationManifest "migrations/manifest")

keiroMigrations :: Either DefinitionError MigrationComponent
keiroMigrations =
  migrationComponentFromEmbeddedSql
    "keiro"
    (Set.singleton "kiroku")
    embeddedMigrationEntries