git.iko.soy/typeable/cabal2nix
on master help sign in
Drop support for reading Stackage build description YAML files.
commit9458be4c760914a17eab8c3e206cb25b58c4fcf7 authorPeter Simons <simons@cryp.to> dateThu 15 Sep 2016, 18:13 (10 years ago) parentca03454
5 files changed+6−138
cabal2nix.cabal−2 hackage2nix/Main.hs+3−18 hackage2nix/Stackage.hs−106 package.yaml−2 update-nixpkgs.sh+3−10
cabal2nix.cabal−2
@@ -174,11 +174,9 @@ executable hackage2nix
174174 , monad-par
175175 , monad-par-extras
176176 , mtl
177− , stackage-types
178177 , time
179178 , utf8-string
180179 other-modules:
181180 Paths_cabal2nix
182181 HackageGit
183− Stackage
184182 default-language: Haskell2010
hackage2nix/Main.hs+3−18
@@ -3,6 +3,8 @@
33
44module Main ( main ) where
55
6+import HackageGit
7+
68import Control.Lens
79import Control.Monad
810import Control.Monad.Par.Combinator
@@ -29,11 +31,9 @@ import Distribution.PackageDescription hiding ( options, buildDepends, extraLibs
2931import Distribution.System
3032import Distribution.Text
3133import Distribution.Version
32−import HackageGit
3334import Language.Nix
3435import Options.Applicative
3536import qualified Paths_cabal2nix as Main
36−import Stackage
3737import System.FilePath
3838import System.IO
3939import Text.PrettyPrint.HughesPJClass hiding ( (<>) )
@@ -45,7 +45,6 @@ data CLI = CLI
4545 { hackageRepository :: FilePath
4646 , preferredVersionsFile :: Maybe FilePath
4747 , nixpkgsRepository :: FilePath
48− , ltsHaskellRepository :: FilePath
4948 , configFile :: FilePath
5049 , targetPlatform :: Platform
5150 }
@@ -58,7 +57,6 @@ main = do
5857 <$> strOption (long "hackage" <> help "path to Hackage git repository" <> value "hackage" <> showDefaultWith id <> metavar "PATH")
5958 <*> optional (strOption (long "preferred-versions" <> help "path to Hackage preferred-versions file" <> value "hackage/preferred-versions" <> showDefault <> metavar "PATH"))
6059 <*> strOption (long "nixpkgs" <> help "path to Nixpkgs repository" <> value "nixpkgs" <> showDefaultWith id <> metavar "PATH")
61− <*> strOption (long "lts-haskell" <> help "path to LTS Haskell repository" <> value "lts-haskell" <> showDefaultWith id <> metavar "PATH")
6260 <*> strOption (long "config" <> help "path to configuration file inside of Nixpkgs" <> value "pkgs/development/haskell-modules/configuration-hackage2nix.yaml" <> showDefaultWith id <> metavar "PATH")
6361 <*> option (fmap fromString str) (long "platform" <> help "target platform to generate package set for" <> value "x86_64-linux" <> showDefaultWith display <> metavar "PLATFORM")
6462
@@ -73,18 +71,14 @@ main = do
7371 )
7472 CLI {..} <- execParser pinfo
7573
76− config' <- readConfiguration (nixpkgsRepository </> configFile)
74+ config <- readConfiguration (nixpkgsRepository </> configFile)
7775 nixpkgs <- readNixpkgPackageMap nixpkgsRepository Nothing
7876 preferredVersions <- readPreferredVersions (fromMaybe (hackageRepository </> "preferred-versions") preferredVersionsFile)
7977 let fixup = Map.delete "acme-everything" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
8078 . Map.delete "som" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
8179 . Map.delete "type" -- TODO: https://github.com/NixOS/cabal2nix/issues/163
8280 hackage <- fixup <$> readHackage hackageRepository
83− lts <- readLTSHaskell ltsHaskellRepository
8481 let
85− config :: Configuration
86− config = config' { defaultPackageOverrides = [ Dependency n (thisVersion (Stackage.version spec)) | (n, spec) <- Map.toList (packages lts) ] }
87−
8882 hackagePackagesFile :: FilePath
8983 hackagePackagesFile = nixpkgsRepository </> "pkgs/development/haskell-modules/hackage-packages.nix"
9084
@@ -110,15 +104,11 @@ main = do
110104 extraPackageSet = Map.unionsWith Set.union
111105 [ Map.singleton name (Set.singleton (resolveConstraint c hackage)) | c@(Dependency name _) <- extraPackages config ]
112106
113− stackagePackageSet :: Map PackageName (Map Version Spec)
114− stackagePackageSet = Map.fromListWith (Map.unionWith mergeSpecs) [ (n, Map.singleton (Stackage.version spec) spec) | snapshot <- [lts], (n, spec) <- Map.toList (packages snapshot) ]
115−
116107 db :: PackageMultiSet
117108 db = Map.unionsWith Set.union [ Map.map Set.singleton generatedDefaultPackageSet
118109 , Map.map Set.singleton latestCorePackageSet
119110 , Map.map Set.singleton latestOverridePackageSet
120111 , extraPackageSet
121− , Map.map Map.keysSet stackagePackageSet
122112 ]
123113
124114 haskellResolver :: Dependency -> Bool
@@ -148,9 +138,6 @@ main = do
148138 tarballSHA256 = fromMaybe (error (display pkgId ++ ": meta data has no hash for the tarball"))
149139 (view (hashes . at "SHA256") meta)
150140
151− spec :: Spec
152− spec = Spec v True True `fromMaybe` (Map.lookup name stackagePackageSet >>= Map.lookup v)
153−
154141 flagAssignment :: FlagAssignment -- We don't use the flags from Stackage Nightly here, because
155142 flagAssignment = configureCabalFlags pkgId -- they are chosen specifically for GHC 7.10.2.
156143
@@ -161,8 +148,6 @@ main = do
161148 drv = fromGenericPackageDescription haskellResolver nixpkgsResolver targetPlatform (compilerInfo config) flagAssignment [] descr
162149 & src .~ DerivationSource "url" ("mirror://hackage/" ++ display pkgId ++ ".tar.gz") "" tarballSHA256
163150 & editedCabalFile .~ cabalSHA256
164− & Derivation.runHaddock &&~ Stackage.runHaddock spec
165− & doCheck &&~ runTests spec
166151 & metaSection.hydraPlatforms %~ (`Set.difference` Map.findWithDefault Set.empty name (dontDistributePackages config))
167152 & metaSection.maintainers .~ Map.findWithDefault Set.empty name globalPackageMaintainers
168153 & metaSection.hydraPlatforms %~ (if isInDefaultPackageSet then id else const Set.empty)
hackage2nix/Stackage.hsdeleted−106
@@ -1,106 +0,0 @@
1−{-# LANGUAGE DeriveGeneric #-}
2−{-# LANGUAGE StandaloneDeriving #-}
3−{-# OPTIONS_GHC -fno-warn-orphans #-}
4−
5−module Stackage where
6−
7−import Control.Exception ( assert )
8−import Control.Monad
9−import Control.Monad.Trans
10−import Data.List
11−import Data.List.Split
12−import Data.Map as Map
13−import Data.Maybe
14−import Data.Time.Calendar
15−import Data.Yaml
16−import Distribution.Compiler
17−import Distribution.Package
18−import Distribution.Version
19−import GHC.Generics ( Generic )
20−import Stackage.Types hiding ( display )
21−import System.Directory
22−import System.FilePath
23−import Text.PrettyPrint.HughesPJClass
24−
25−data Spec = Spec
26− { version :: Version
27− -- , flagOverrides :: Map FlagName Bool
28− , runTests :: Bool
29− , runHaddock :: Bool
30− -- , runLinuxBuilds :: Bool
31− }
32− deriving (Show, Generic)
33−
34−instance Eq Spec where
35− a == b = version a == version b
36−
37−instance Ord Spec where
38− compare a b = compare (version a) (version b)
39−
40−data Snapshot = Snapshot
41− { snapshot :: SnapshotType
42− , compiler :: CompilerId
43− , corePackages :: Map PackageName Version
44− , packages :: Map PackageName Spec
45− }
46− deriving (Show)
47−
48−instance Pretty SnapshotType where
49− pPrint STNightly = text "stackage-nightly"
50− pPrint (STNightly2 _) = text "stackage-nightly"
51− pPrint (STLTS m n) = text "lts-" <> int m <> char '.' <> int n
52−
53−readLTSHaskell :: FilePath -> IO Snapshot
54−readLTSHaskell dirPath = do
55− filePaths <- liftIO (listFiles dirPath)
56− let latest = maximum (Prelude.filter (\p -> takeExtension p == ".yaml") filePaths)
57− readSnapshot (dirPath </> latest)
58−
59−readStackageNightly :: FilePath -> IO Snapshot
60−readStackageNightly dirPath = do
61− filePaths <- liftIO (listFiles dirPath)
62− let filePath = maximum [ p | p <- filePaths, takeExtension p == ".yaml" ]
63− readSnapshot (dirPath </> filePath)
64−
65−readSnapshot :: FilePath -> IO Snapshot
66−readSnapshot p = fmap (fromBuildPlan (parseSnapshotType (takeFileName p))) (readBuildPlan p)
67−
68−parseSnapshotType :: FilePath -> SnapshotType
69−parseSnapshotType p
70− | "lts-" `isPrefixOf` p
71− , [major,minor] <- splitOn "." (drop 4 (dropExtension p))
72− = STLTS (read major) (read minor)
73− | "nightly-" `isPrefixOf` p
74− , [year,month,day] <- splitOn "-" (drop 8 (dropExtension p))
75− = STNightly2 (fromGregorian (read year) (read month) (read day))
76− | otherwise = error ("parseSnapshotType: invalid file name " ++ p)
77−
78−readBuildPlan :: FilePath -> IO BuildPlan
79−readBuildPlan = fmap fromJust . decodeFile
80−
81−fromBuildPlan :: SnapshotType -> BuildPlan -> Snapshot
82−fromBuildPlan snt bp = Snapshot snt
83− (CompilerId GHC (siGhcVersion (bpSystemInfo bp)))
84− (siCorePackages (bpSystemInfo bp))
85− (Map.map fromPackagePlan (bpPackages bp))
86−
87−fromPackagePlan :: PackagePlan -> Spec
88−fromPackagePlan pp = Spec (ppVersion pp)
89− -- (pcFlagOverrides ppc)
90− (pcTests ppc == ExpectSuccess)
91− (pcHaddocks ppc == ExpectSuccess)
92− -- (not (pcSkipBuild ppc))
93− where ppc = ppConstraints pp
94−
95−listFiles :: FilePath -> IO [FilePath]
96−listFiles path = do
97− let isFile p = doesFileExist (path </> p)
98− getDirectoryContents path >>= filterM isFile . Prelude.filter (\x -> head x /= '.')
99−
100−mergeSpecs :: Spec -> Spec -> Spec
101−mergeSpecs a b = Spec { version = assert (version a == version b) version a
102− -- , flagOverrides = flagOverrides a
103− , runTests = runTests a && runTests b
104− , runHaddock = runHaddock a && runHaddock b
105− -- , runLinuxBuilds = runLinuxBuilds a
106− }
package.yaml−2
@@ -118,13 +118,11 @@ executables:
118118 other-modules:
119119 - Paths_cabal2nix
120120 - HackageGit
121− - Stackage
122121 dependencies:
123122 - cabal2nix
124123 - monad-par
125124 - monad-par-extras
126125 - mtl
127− - stackage-types
128126 - time
129127 - utf8-string
130128 ghc-options:
update-nixpkgs.sh+3−10
@@ -21,11 +21,6 @@ export NIX_PATH=nixpkgs=$PWD
2121nixpkgs=$(git rev-parse --verify HEAD)
2222cd ..
2323
24−cd lts-haskell
25−git pull -q
26−ltshaskell=$(git rev-parse --verify HEAD)
27−cd ..
28−
2924cd hackage
3025git pull -q
3126rm -f preferred-versions
@@ -49,12 +44,10 @@ cd nixpkgs
4944git add pkgs/development/haskell-modules
5045if [ -n "$(git status --porcelain)" ]; then
5146 cat <<EOF | git commit -q -F -
52−hackage-packages.nix: update Haskell package set
53−
54−This update was generated by hackage2nix $cabal2nix using the following inputs:
47+hackage-packages.nix: automatic Haskell package set update
5548
56− - Hackage: https://github.com/commercialhaskell/all-cabal-hashes/commit/$hackage
57− - LTS Haskell: https://github.com/fpco/lts-haskell/commit/$ltshaskell
49+This update was generated by hackage2nix $cabal2nix from Hackage revision
50+https://github.com/commercialhaskell/all-cabal-hashes/commit/$hackage.
5851EOF
5952 git push -q
6053fi