This commit is contained in:
Adam Bergmark 2023-12-23 19:27:17 +01:00 committed by Jens Petersen
parent d49e1b107a
commit e666743f91
7 changed files with 35 additions and 19 deletions

View File

@ -0,0 +1,2 @@
package *
ghc-options: -fwrite-ide-info

View File

@ -30,6 +30,7 @@ executable lts-constraints
, Cabal , Cabal
, containers , containers
, mtl , mtl
, optparse-generic
, pantry , pantry
, parsec , parsec
, rio , rio

View File

@ -1,4 +1,7 @@
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE ScopedTypeVariables #-}
{-# OPTIONS -Wno-name-shadowing #-} {-# OPTIONS -Wno-name-shadowing #-}
@ -8,12 +11,12 @@ import Control.Monad
import Control.Monad.IO.Class (MonadIO (..)) import Control.Monad.IO.Class (MonadIO (..))
import Control.Monad.State (MonadState (..), runStateT) import Control.Monad.State (MonadState (..), runStateT)
import Data.Text (Text) import Data.Text (Text)
import Options.Generic (getRecord, ParseRecord)
import Data.Text qualified as T
import Data.Text.IO qualified as T
import GHC.Generics (Generic)
import RIO.Map (Map) import RIO.Map (Map)
import System.IO (openFile, IOMode (..), hFlush, hClose) import System.IO (openFile, IOMode (..), hFlush, hClose)
import qualified Data.Text as T
import qualified Data.Text.IO as T
import Safe (at)
import System.Environment (getArgs)
import BuildConstraints (parsePackageDecl, handlePackage) import BuildConstraints (parsePackageDecl, handlePackage)
import Snapshot (snapshotMap, loadSnapshot) import Snapshot (snapshotMap, loadSnapshot)
@ -23,7 +26,14 @@ src :: String
src = "../../build-constraints.yaml" src = "../../build-constraints.yaml"
target :: Int -> String target :: Int -> String
target major = "../../lts-" <> show major <> "-build-constraints.yaml" target major = "lts-" <> show major <> "-build-constraints.yaml"
data Args = Args
{ major :: Int
, baseSnapshotPath :: FilePath
} deriving Generic
instance ParseRecord Args
data State data State
= LookingForLibBounds = LookingForLibBounds
@ -32,10 +42,8 @@ data State
main :: IO () main :: IO ()
main = do main = do
args :: [String] <- getArgs Args { major, baseSnapshotPath } <- getRecord "lts-constraints"
print args map <- snapshotMap <$> loadSnapshot baseSnapshotPath
let major :: Int = read . (`at` 0) $ args
map <- snapshotMap <$> loadSnapshot ("../../../stackage-snapshots/lts/" <> show major <> "/0.yaml")
output <- openFile (target major) WriteMode output <- openFile (target major) WriteMode
let putLine = liftIO . T.hPutStrLn output let putLine = liftIO . T.hPutStrLn output
lines <- T.lines <$> T.readFile src lines <- T.lines <$> T.readFile src
@ -43,7 +51,7 @@ main = do
forM_ lines $ putLine <=< processLine map forM_ lines $ putLine <=< processLine map
hFlush output hFlush output
hClose output hClose output
putStrLn $ "Done. Wrote to " <> (target major) putStrLn $ "Done. Wrote to " <> target major
processLine :: MonadState State m => Map PackageName Version -> Text -> m Text processLine :: MonadState State m => Map PackageName Version -> Text -> m Text
processLine map line = do processLine map line = do

View File

@ -1,6 +1,5 @@
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# OPTIONS -Wno-name-shadowing #-} {-# OPTIONS -Wno-name-shadowing #-}
module Types where module Types where
@ -9,13 +8,12 @@ import Data.Aeson
import Data.String.Conversions.Monomorphic import Data.String.Conversions.Monomorphic
import Distribution.Text (simpleParse) import Distribution.Text (simpleParse)
import Distribution.Types.VersionRange (VersionRange) import Distribution.Types.VersionRange (VersionRange)
import GHC.Generics
import RIO.Text (Text) import RIO.Text (Text)
import qualified Distribution.Types.PackageName as C (PackageName, mkPackageName) import qualified Distribution.Types.PackageName as C (PackageName, mkPackageName)
import qualified Distribution.Types.Version as C (Version) import qualified Distribution.Types.Version as C (Version)
newtype PackageName = PackageName { unPackageName :: C.PackageName } newtype PackageName = PackageName { unPackageName :: C.PackageName }
deriving (Eq, Generic, Ord, FromJSONKey, Show) deriving (Eq, Ord, FromJSONKey, Show)
mkPackageName :: Text -> PackageName mkPackageName :: Text -> PackageName
mkPackageName = PackageName . C.mkPackageName . fromStrictText mkPackageName = PackageName . C.mkPackageName . fromStrictText
@ -24,7 +22,7 @@ instance FromJSON PackageName where
parseJSON = fmap (PackageName . C.mkPackageName) . parseJSON parseJSON = fmap (PackageName . C.mkPackageName) . parseJSON
newtype Version = Version { unVersion :: C.Version } newtype Version = Version { unVersion :: C.Version }
deriving (Generic, Show) deriving Show
instance FromJSON Version where instance FromJSON Version where
parseJSON = parseJSON =

View File

@ -1,4 +1,4 @@
resolver: resolver:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/24.yaml url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/22/0.yaml
packages: packages:
- . - .

View File

@ -6,8 +6,8 @@
packages: [] packages: []
snapshots: snapshots:
- completed: - completed:
sha256: abcc4a65c15c7c2313f1a87f01bfd4d910516e1930b99653eef1d2d006515916 sha256: e176944bc843f740e05242fa7a66ca1f440c127e425254f7f1257f9b19add23f
size: 640074 size: 712153
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/24.yaml url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/22/0.yaml
original: original:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/24.yaml url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/22/0.yaml

View File

@ -0,0 +1,7 @@
roots = ["Main.main","^Paths_.*"]
type-class-roots = false
root-instances = [{ class = "\\.IsString$" },{ class = "\\.IsList$" }]
unused-types = false