diff --git a/ChangeLog.md b/ChangeLog.md new file mode 100644 index 00000000..7c816071 --- /dev/null +++ b/ChangeLog.md @@ -0,0 +1,5 @@ +## 0.1.0.0 + +First version of Stackage which is made available as its own package. The +codebase has been completely rewritten at this point, to be ready for generated +both Stackage Nightly and LTS Haskell distributions. diff --git a/README.md b/README.md index f729c667..db90abad 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ stackage __NOTE__ This repository is for package authors to get their code into Stackage. If you simply want to use Stackage as an end user, please follow the -instructions on http://www.stackage.org/. +instructions on [http://www.stackage.org/](http://www.stackage.org). A note about the codebase: the goal is to minimize dependencies and have the maximum range of supported compiler versions. Therefore, we avoid @@ -16,7 +16,7 @@ Get your package included ------------------------- In order to get your package included in the set of stable packages, you should -send a pull request against this repository. In the `Stackage.Config` module, +send a pull request against this repository. In the `build-constraints.yaml` file, there's a function called `defaultStablePackages`. In general, to add a set of packages, you would add: diff --git a/Stackage2/BuildConstraints.hs b/Stackage/BuildConstraints.hs similarity index 98% rename from Stackage2/BuildConstraints.hs rename to Stackage/BuildConstraints.hs index 276515b7..d2e788ff 100644 --- a/Stackage2/BuildConstraints.hs +++ b/Stackage/BuildConstraints.hs @@ -3,7 +3,7 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TupleSections #-} -- | The constraints on package selection for a new build plan. -module Stackage2.BuildConstraints +module Stackage.BuildConstraints ( BuildConstraints (..) , PackageConstraints (..) , TestState (..) @@ -23,8 +23,8 @@ import Distribution.Version (anyVersion) import Distribution.Version (anyVersion) import Filesystem (isFile) import Network.HTTP.Client (Manager, httpLbs, responseBody) -import Stackage2.CorePackages -import Stackage2.Prelude +import Stackage.CorePackages +import Stackage.Prelude data TestState = ExpectSuccess | ExpectFailure diff --git a/Stackage2/BuildPlan.hs b/Stackage/BuildPlan.hs similarity index 97% rename from Stackage2/BuildPlan.hs rename to Stackage/BuildPlan.hs index ef212a32..a9880cdb 100644 --- a/Stackage2/BuildPlan.hs +++ b/Stackage/BuildPlan.hs @@ -9,7 +9,7 @@ {-# LANGUAGE TypeFamilies #-} -- | Representation of a concrete build plan, and how to generate a new one -- based on constraints. -module Stackage2.BuildPlan +module Stackage.BuildPlan ( BuildPlan (..) , PackagePlan (..) , newBuildPlan @@ -22,11 +22,11 @@ import qualified Data.Map as Map import qualified Data.Set as Set import qualified Distribution.Compiler import Distribution.PackageDescription -import Stackage2.BuildConstraints -import Stackage2.GithubPings -import Stackage2.PackageDescription -import Stackage2.PackageIndex -import Stackage2.Prelude +import Stackage.BuildConstraints +import Stackage.GithubPings +import Stackage.PackageDescription +import Stackage.PackageIndex +import Stackage.Prelude data BuildPlan = BuildPlan { bpSystemInfo :: SystemInfo diff --git a/Stackage2/CheckBuildPlan.hs b/Stackage/CheckBuildPlan.hs similarity index 95% rename from Stackage2/CheckBuildPlan.hs rename to Stackage/CheckBuildPlan.hs index ea4acb84..91dff762 100644 --- a/Stackage2/CheckBuildPlan.hs +++ b/Stackage/CheckBuildPlan.hs @@ -5,15 +5,15 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ViewPatterns #-} -- | Confirm that a build plan has a consistent set of dependencies. -module Stackage2.CheckBuildPlan +module Stackage.CheckBuildPlan ( checkBuildPlan ) where import Control.Monad.Writer.Strict (Writer, execWriter, tell) -import Stackage2.BuildConstraints -import Stackage2.BuildPlan -import Stackage2.PackageDescription -import Stackage2.Prelude +import Stackage.BuildConstraints +import Stackage.BuildPlan +import Stackage.PackageDescription +import Stackage.Prelude -- FIXME check cycles in dependencies, only looking at libraries and -- executables diff --git a/Stackage2/CompleteBuild.hs b/Stackage/CompleteBuild.hs similarity index 95% rename from Stackage2/CompleteBuild.hs rename to Stackage/CompleteBuild.hs index beba7702..ab587e94 100644 --- a/Stackage2/CompleteBuild.hs +++ b/Stackage/CompleteBuild.hs @@ -1,7 +1,7 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} -module Stackage2.CompleteBuild +module Stackage.CompleteBuild ( BuildType (..) , BumpType (..) , completeBuild @@ -12,14 +12,14 @@ import Data.Text.Read (decimal) import Data.Time import Data.Yaml (decodeFileEither, encodeFile) import Network.HTTP.Client -import Stackage2.BuildConstraints -import Stackage2.BuildPlan -import Stackage2.CheckBuildPlan -import Stackage2.PerformBuild -import Stackage2.Prelude -import Stackage2.ServerBundle -import Stackage2.UpdateBuildPlan -import Stackage2.Upload +import Stackage.BuildConstraints +import Stackage.BuildPlan +import Stackage.CheckBuildPlan +import Stackage.PerformBuild +import Stackage.Prelude +import Stackage.ServerBundle +import Stackage.UpdateBuildPlan +import Stackage.Upload import System.IO (BufferMode (LineBuffering), hSetBuffering) data BuildType = Nightly | LTS BumpType diff --git a/Stackage2/CorePackages.hs b/Stackage/CorePackages.hs similarity index 96% rename from Stackage2/CorePackages.hs rename to Stackage/CorePackages.hs index 8097ce8b..48d2ac56 100644 --- a/Stackage2/CorePackages.hs +++ b/Stackage/CorePackages.hs @@ -1,6 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} -module Stackage2.CorePackages +module Stackage.CorePackages ( getCorePackages , getCoreExecutables , getGhcVersion @@ -8,7 +8,7 @@ module Stackage2.CorePackages import qualified Data.Text as T import Filesystem (listDirectory) -import Stackage2.Prelude +import Stackage.Prelude import System.Directory (findExecutable) -- | Get a @Map@ of all of the core packages. Core packages are defined as diff --git a/Stackage2/GithubPings.hs b/Stackage/GithubPings.hs similarity index 92% rename from Stackage2/GithubPings.hs rename to Stackage/GithubPings.hs index 9b37a759..bb7369f4 100644 --- a/Stackage2/GithubPings.hs +++ b/Stackage/GithubPings.hs @@ -1,13 +1,13 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ViewPatterns #-} -module Stackage2.GithubPings +module Stackage.GithubPings ( getGithubPings ) where import Distribution.PackageDescription -import Stackage2.BuildConstraints -import Stackage2.Prelude +import Stackage.BuildConstraints +import Stackage.Prelude -- | Determine accounts to be pinged on Github based on various metadata in the -- package description. diff --git a/Stackage2/PackageDescription.hs b/Stackage/PackageDescription.hs similarity index 99% rename from Stackage2/PackageDescription.hs rename to Stackage/PackageDescription.hs index a07b48fd..ab5fe50a 100644 --- a/Stackage2/PackageDescription.hs +++ b/Stackage/PackageDescription.hs @@ -9,7 +9,7 @@ {-# LANGUAGE TypeFamilies #-} -- | Manipulate @GenericPackageDescription@ from Cabal into something more -- useful for us. -module Stackage2.PackageDescription +module Stackage.PackageDescription ( SimpleDesc (..) , toSimpleDesc , CheckCond (..) @@ -25,7 +25,7 @@ import Distribution.Compiler (CompilerFlavor) import Distribution.Package (Dependency (..)) import Distribution.PackageDescription import Distribution.System (Arch, OS) -import Stackage2.Prelude +import Stackage.Prelude data Component = CompLibrary | CompExecutable diff --git a/Stackage2/PackageIndex.hs b/Stackage/PackageIndex.hs similarity index 98% rename from Stackage2/PackageIndex.hs rename to Stackage/PackageIndex.hs index 14702ea3..13a1e3c9 100644 --- a/Stackage2/PackageIndex.hs +++ b/Stackage/PackageIndex.hs @@ -5,7 +5,7 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} -- | Dealing with the 00-index file and all its cabal files. -module Stackage2.PackageIndex +module Stackage.PackageIndex ( sourcePackageIndex , UnparsedCabalFile (..) , getLatestDescriptions @@ -20,7 +20,7 @@ import Distribution.PackageDescription (package, import Distribution.PackageDescription.Parse (ParseResult (..), parsePackageDescription) import Distribution.ParseUtils (PError) -import Stackage2.Prelude +import Stackage.Prelude import System.Directory (getAppUserDataDirectory) -- | Name of the 00-index.tar downloaded from Hackage. diff --git a/Stackage2/PerformBuild.hs b/Stackage/PerformBuild.hs similarity index 98% rename from Stackage2/PerformBuild.hs rename to Stackage/PerformBuild.hs index e0d6dba0..e0e0883a 100644 --- a/Stackage2/PerformBuild.hs +++ b/Stackage/PerformBuild.hs @@ -5,17 +5,17 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} -module Stackage2.PerformBuild +module Stackage.PerformBuild ( performBuild , PerformBuild (..) , BuildException (..) , pbDocDir ) where -import Stackage2.BuildConstraints -import Stackage2.PackageDescription -import Stackage2.BuildPlan -import Stackage2.Prelude hiding (pi) +import Stackage.BuildConstraints +import Stackage.PackageDescription +import Stackage.BuildPlan +import Stackage.Prelude hiding (pi) import qualified Data.Map as Map import Control.Concurrent.STM.TSem import Data.NonNull (fromNullable) diff --git a/Stackage2/Prelude.hs b/Stackage/Prelude.hs similarity index 98% rename from Stackage2/Prelude.hs rename to Stackage/Prelude.hs index a16a9721..aa6f34b4 100644 --- a/Stackage2/Prelude.hs +++ b/Stackage/Prelude.hs @@ -3,9 +3,9 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeFamilies #-} -module Stackage2.Prelude +module Stackage.Prelude ( module X - , module Stackage2.Prelude + , module Stackage.Prelude ) where import ClassyPrelude.Conduit as X diff --git a/Stackage2/ServerBundle.hs b/Stackage/ServerBundle.hs similarity index 96% rename from Stackage2/ServerBundle.hs rename to Stackage/ServerBundle.hs index c572f299..474060f8 100644 --- a/Stackage2/ServerBundle.hs +++ b/Stackage/ServerBundle.hs @@ -2,7 +2,7 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} -module Stackage2.ServerBundle +module Stackage.ServerBundle ( serverBundle , epochTime , bpAllPackages @@ -14,9 +14,9 @@ import qualified Codec.Archive.Tar.Entry as Tar import qualified Codec.Compression.GZip as GZip import qualified Data.Yaml as Y import Foreign.C.Types (CTime (CTime)) -import Stackage2.BuildConstraints -import Stackage2.BuildPlan -import Stackage2.Prelude +import Stackage.BuildConstraints +import Stackage.BuildPlan +import Stackage.Prelude import qualified System.PosixCompat.Time as PC import qualified Text.XML as X import Text.XML.Cursor diff --git a/Stackage2/UpdateBuildPlan.hs b/Stackage/UpdateBuildPlan.hs similarity index 92% rename from Stackage2/UpdateBuildPlan.hs rename to Stackage/UpdateBuildPlan.hs index 237b73ea..68e795fc 100644 --- a/Stackage2/UpdateBuildPlan.hs +++ b/Stackage/UpdateBuildPlan.hs @@ -3,7 +3,7 @@ {-# LANGUAGE RecordWildCards #-} -- | Take an existing build plan and bump all packages to the newest version in -- the same major version number. -module Stackage2.UpdateBuildPlan +module Stackage.UpdateBuildPlan ( updateBuildConstraints , updateBuildPlan ) where @@ -11,9 +11,9 @@ module Stackage2.UpdateBuildPlan import qualified Data.Map as Map import Distribution.Version (anyVersion, earlierVersion, orLaterVersion) -import Stackage2.BuildConstraints -import Stackage2.BuildPlan -import Stackage2.Prelude +import Stackage.BuildConstraints +import Stackage.BuildPlan +import Stackage.Prelude updateBuildPlan :: BuildPlan -> IO BuildPlan updateBuildPlan = newBuildPlan . updateBuildConstraints diff --git a/Stackage2/Upload.hs b/Stackage/Upload.hs similarity index 97% rename from Stackage2/Upload.hs rename to Stackage/Upload.hs index 39eee631..469f97a3 100644 --- a/Stackage2/Upload.hs +++ b/Stackage/Upload.hs @@ -4,7 +4,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TupleSections #-} -module Stackage2.Upload +module Stackage.Upload ( UploadBundle (..) , SnapshotIdent (..) , uploadBundle @@ -20,9 +20,9 @@ import Data.Default.Class (Default (..)) import Filesystem (isDirectory, isFile) import Network.HTTP.Client import Network.HTTP.Client.MultipartFormData -import Stackage2.BuildPlan (BuildPlan) -import Stackage2.Prelude -import Stackage2.ServerBundle (bpAllPackages, docsListing) +import Stackage.BuildPlan (BuildPlan) +import Stackage.Prelude +import Stackage.ServerBundle (bpAllPackages, docsListing) import System.IO.Temp (withSystemTempFile) newtype StackageServer = StackageServer { unStackageServer :: Text } diff --git a/app/lts-major-bump.hs b/app/lts-major-bump.hs deleted file mode 100644 index a165ac08..00000000 --- a/app/lts-major-bump.hs +++ /dev/null @@ -1,4 +0,0 @@ -import Stackage2.CompleteBuild - -main :: IO () -main = completeBuild (LTS Major) diff --git a/app/lts-minor-bump.hs b/app/lts-minor-bump.hs deleted file mode 100644 index fe38d855..00000000 --- a/app/lts-minor-bump.hs +++ /dev/null @@ -1,4 +0,0 @@ -import Stackage2.CompleteBuild - -main :: IO () -main = completeBuild (LTS Minor) diff --git a/app/stackage-nightly.hs b/app/stackage-nightly.hs deleted file mode 100644 index 1f78ab3a..00000000 --- a/app/stackage-nightly.hs +++ /dev/null @@ -1,4 +0,0 @@ -import Stackage2.CompleteBuild - -main :: IO () -main = completeBuild Nightly diff --git a/app/stackage.hs b/app/stackage.hs new file mode 100644 index 00000000..6f52362e --- /dev/null +++ b/app/stackage.hs @@ -0,0 +1,15 @@ +import Stackage.CompleteBuild +import System.Environment (getArgs) + +main :: IO () +main = do + args <- getArgs + case args of + [x] | Just y <- lookup x m -> completeBuild y + _ -> error $ "Expected one argument, one of: " ++ unwords (map fst m) + where + m = + [ ("nightly", Nightly) + , ("lts-major", LTS Major) + , ("lts-minor", LTS Minor) + ] diff --git a/stackage.cabal b/stackage.cabal index 7cf5dc37..1ee00fe7 100644 --- a/stackage.cabal +++ b/stackage.cabal @@ -1,7 +1,7 @@ name: stackage version: 0.1.0.0 synopsis: "Stable Hackage," tools for creating a vetted set of packages from Hackage. --- description: +description: Please see for a description and documentation. homepage: https://github.com/fpco/stackage license: MIT license-file: LICENSE @@ -10,22 +10,25 @@ maintainer: michael@fpcomplete.com category: Distribution build-type: Simple cabal-version: >=1.10 +extra-source-files: README.md + ChangeLog.md + build-constraints.yaml library default-language: Haskell2010 - exposed-modules: Stackage2.Prelude - Stackage2.BuildConstraints - Stackage2.CorePackages - Stackage2.PackageIndex - Stackage2.BuildPlan - Stackage2.CheckBuildPlan - Stackage2.UpdateBuildPlan - Stackage2.GithubPings - Stackage2.PackageDescription - Stackage2.ServerBundle - Stackage2.Upload - Stackage2.PerformBuild - Stackage2.CompleteBuild + exposed-modules: Stackage.Prelude + Stackage.BuildConstraints + Stackage.CorePackages + Stackage.PackageIndex + Stackage.BuildPlan + Stackage.CheckBuildPlan + Stackage.UpdateBuildPlan + Stackage.GithubPings + Stackage.PackageDescription + Stackage.ServerBundle + Stackage.Upload + Stackage.PerformBuild + Stackage.CompleteBuild build-depends: base >= 4 && < 5 , containers , Cabal >= 1.14 @@ -59,26 +62,10 @@ library , semigroups , xml-conduit -executable stackage-nightly +executable stackage default-language: Haskell2010 hs-source-dirs: app - main-is: stackage-nightly.hs - build-depends: base - , stackage - ghc-options: -rtsopts -threaded -with-rtsopts=-N - -executable lts-minor-bump - default-language: Haskell2010 - hs-source-dirs: app - main-is: lts-minor-bump.hs - build-depends: base - , stackage - ghc-options: -rtsopts -threaded -with-rtsopts=-N - -executable lts-major-bump - default-language: Haskell2010 - hs-source-dirs: app - main-is: lts-major-bump.hs + main-is: stackage.hs build-depends: base , stackage ghc-options: -rtsopts -threaded -with-rtsopts=-N @@ -88,9 +75,9 @@ test-suite spec default-language: Haskell2010 hs-source-dirs: test main-is: Spec.hs - other-modules: Stackage2.CorePackagesSpec - Stackage2.PackageIndexSpec - Stackage2.BuildPlanSpec + other-modules: Stackage.CorePackagesSpec + Stackage.PackageIndexSpec + Stackage.BuildPlanSpec build-depends: base , stackage , hspec diff --git a/test/Stackage2/BuildPlanSpec.hs b/test/Stackage/BuildPlanSpec.hs similarity index 79% rename from test/Stackage2/BuildPlanSpec.hs rename to test/Stackage/BuildPlanSpec.hs index 5f650db6..27a95dde 100644 --- a/test/Stackage2/BuildPlanSpec.hs +++ b/test/Stackage/BuildPlanSpec.hs @@ -1,10 +1,10 @@ {-# LANGUAGE OverloadedStrings, NoImplicitPrelude #-} -module Stackage2.BuildPlanSpec (spec) where +module Stackage.BuildPlanSpec (spec) where -import Stackage2.BuildPlan -import Stackage2.Prelude -import Stackage2.BuildConstraints -import Stackage2.UpdateBuildPlan +import Stackage.BuildPlan +import Stackage.Prelude +import Stackage.BuildConstraints +import Stackage.UpdateBuildPlan import Test.Hspec import qualified Data.Yaml as Y import Distribution.Version (anyVersion) @@ -12,7 +12,7 @@ import qualified Data.Map as Map spec :: Spec spec = it "works" $ do - bc <- defaultBuildConstraints + bc <- defaultBuildConstraints (error "manager should not be used") bp <- newBuildPlan bc let bs = Y.encode bp ebp' = Y.decodeEither bs diff --git a/test/Stackage2/CorePackagesSpec.hs b/test/Stackage/CorePackagesSpec.hs similarity index 83% rename from test/Stackage2/CorePackagesSpec.hs rename to test/Stackage/CorePackagesSpec.hs index bdcde94d..ce0c5d10 100644 --- a/test/Stackage2/CorePackagesSpec.hs +++ b/test/Stackage/CorePackagesSpec.hs @@ -1,8 +1,8 @@ {-# LANGUAGE OverloadedStrings, NoImplicitPrelude #-} -module Stackage2.CorePackagesSpec (spec) where +module Stackage.CorePackagesSpec (spec) where -import Stackage2.CorePackages -import Stackage2.Prelude +import Stackage.CorePackages +import Stackage.Prelude import Test.Hspec spec :: Spec diff --git a/test/Stackage2/PackageIndexSpec.hs b/test/Stackage/PackageIndexSpec.hs similarity index 87% rename from test/Stackage2/PackageIndexSpec.hs rename to test/Stackage/PackageIndexSpec.hs index 18f64319..e0ef97e6 100644 --- a/test/Stackage2/PackageIndexSpec.hs +++ b/test/Stackage/PackageIndexSpec.hs @@ -1,8 +1,8 @@ {-# LANGUAGE OverloadedStrings, NoImplicitPrelude #-} -module Stackage2.PackageIndexSpec (spec) where +module Stackage.PackageIndexSpec (spec) where -import Stackage2.PackageIndex -import Stackage2.Prelude +import Stackage.PackageIndex +import Stackage.Prelude import Test.Hspec import Distribution.Package (packageId)