jenkinsPlugins2nix 0.2.0.2 → 0.3.0.1
raw patch · 4 files changed
+59/−56 lines, 4 filesdep +prettyprinterdep +prettyprinter-ansi-terminaldep −ansi-wl-pprintdep ~attoparsecdep ~bimapdep ~bytestringPVP ok
version bump matches the API change (PVP)
Dependencies added: prettyprinter, prettyprinter-ansi-terminal
Dependencies removed: ansi-wl-pprint
Dependency ranges changed: attoparsec, bimap, bytestring, containers, cryptohash, hnix, http-conduit, mtl, optparse-applicative, tasty-hspec, text, zip-archive
API changes (from Hackage documentation)
- Nix.JenkinsPlugins2Nix: mkExprsFor :: Config -> IO (Either String Doc)
+ Nix.JenkinsPlugins2Nix: mkExprsFor :: Config -> IO (Either String (Doc ann))
- Nix.JenkinsPlugins2Nix.Types: Manifest :: !Text -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !Text -> !Text -> !Text -> !Text -> !(Maybe Text) -> !(Maybe Text) -> !(Set PluginDependency) -> !(Set Text) -> Manifest
+ Nix.JenkinsPlugins2Nix.Types: Manifest :: !Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Text -> !Text -> !Text -> !Text -> !Maybe Text -> !Maybe Text -> !Set PluginDependency -> !Set Text -> Manifest
- Nix.JenkinsPlugins2Nix.Types: Plugin :: !Text -> !(Digest SHA256) -> !Manifest -> Plugin
+ Nix.JenkinsPlugins2Nix.Types: Plugin :: !Text -> !Digest SHA256 -> !Manifest -> Plugin
- Nix.JenkinsPlugins2Nix.Types: RequestedPlugin :: !Text -> !(Maybe Text) -> RequestedPlugin
+ Nix.JenkinsPlugins2Nix.Types: RequestedPlugin :: !Text -> !Maybe Text -> RequestedPlugin
- Nix.JenkinsPlugins2Nix.Types: [archiver_version] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [archiver_version] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [build_jdk] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [build_jdk] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [built_by] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [built_by] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [created_by] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [created_by] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [extension_name] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [extension_name] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [group_id] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [group_id] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [hudson_version] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [hudson_version] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [implementation_title] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [implementation_title] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [implementation_version] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [implementation_version] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [jenkins_version] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [jenkins_version] :: Manifest -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [plugin_dependencies] :: Manifest -> !(Set PluginDependency)
+ Nix.JenkinsPlugins2Nix.Types: [plugin_dependencies] :: Manifest -> !Set PluginDependency
- Nix.JenkinsPlugins2Nix.Types: [plugin_developers] :: Manifest -> !(Set Text)
+ Nix.JenkinsPlugins2Nix.Types: [plugin_developers] :: Manifest -> !Set Text
- Nix.JenkinsPlugins2Nix.Types: [requested_version] :: RequestedPlugin -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [requested_version] :: RequestedPlugin -> !Maybe Text
- Nix.JenkinsPlugins2Nix.Types: [sha256] :: Plugin -> !(Digest SHA256)
+ Nix.JenkinsPlugins2Nix.Types: [sha256] :: Plugin -> !Digest SHA256
- Nix.JenkinsPlugins2Nix.Types: [specification_title] :: Manifest -> !(Maybe Text)
+ Nix.JenkinsPlugins2Nix.Types: [specification_title] :: Manifest -> !Maybe Text
Files
- README.md +1/−1
- app/Main.hs +8/−8
- jenkinsPlugins2nix.cabal +17/−16
- src/Nix/JenkinsPlugins2Nix.hs +33/−31
README.md view
@@ -36,7 +36,7 @@ specify: ```-jenkins2nix -r latest -p A:0.7 -p B:0.1+jenkinsPlugins2nix -r latest -p A:0.7 -p B:0.1 ``` We will end up with `A:0.7` and `B:0.1`. This also applies when no
app/Main.hs view
@@ -8,17 +8,17 @@ -- @jenkinsPlugins2nix@ entry point. module Main (main) where -import qualified Data.Bimap as Bimap-import Data.List (intersperse)-import Data.Monoid ((<>), mconcat)-import qualified Data.Text as Text+import qualified Data.Bimap as Bimap+import Data.List (intersperse)+import Data.Monoid (mconcat, (<>))+import qualified Data.Text as Text+import Data.Text.Prettyprint.Doc.Render.Terminal (putDoc) import Nix.JenkinsPlugins2Nix import Nix.JenkinsPlugins2Nix.Types-import qualified Options.Applicative as Opt+import qualified Options.Applicative as Opt import System.Exit import System.IO-import qualified Text.PrettyPrint.ANSI.Leijen as Pretty-import Text.Printf (printf)+import Text.Printf (printf) main :: IO () main = do@@ -28,7 +28,7 @@ hPutStrLn stderr err exitFailure Right p -> do- Pretty.putDoc p+ putDoc p exitSuccess where opts = Opt.info (parseConfig Opt.<**> Opt.helper)
jenkinsPlugins2nix.cabal view
@@ -1,5 +1,5 @@ name: jenkinsPlugins2nix-version: 0.2.0.2+version: 0.3.0.1 synopsis: Generate nix for Jenkins plugins. description: Generate nix for Jenkins plugins. homepage: https://github.com/Fuuzetsu/jenkinsPlugins2nix#readme@@ -12,23 +12,24 @@ build-type: Simple extra-source-files: README.md cabal-version: >=1.10+tested-with: GHC ==8.6.5 || ==8.8.4 || ==8.10.4 || ==8.10.5 library hs-source-dirs: src exposed-modules: Nix.JenkinsPlugins2Nix Nix.JenkinsPlugins2Nix.Parser Nix.JenkinsPlugins2Nix.Types- build-depends: base >= 4.7 && < 5- , ansi-wl-pprint- , attoparsec- , bytestring- , containers- , cryptohash- , hnix- , http-conduit- , mtl- , text- , zip-archive+ build-depends: base >=4.7 && < 5+ , attoparsec >=0.13 && <0.14+ , bytestring >=0.10 && <0.11+ , containers >=0.6 && <0.7+ , cryptohash >=0.11 && <0.12+ , hnix >=0.6 && <0.14+ , http-conduit >=2.3 && <2.4+ , mtl >=2.2 && <2.3+ , prettyprinter >=1.2 && <1.8+ , text >=1.2 && <1.3+ , zip-archive >=0.4 && <0.5 default-language: Haskell2010 ghc-options: -Wall @@ -37,10 +38,10 @@ main-is: Main.hs ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall build-depends: base- , ansi-wl-pprint- , bimap+ , bimap >=0.3 && <0.5 , jenkinsPlugins2nix- , optparse-applicative+ , optparse-applicative >=0.14 && <0.17+ , prettyprinter-ansi-terminal >=1.1 && <1.2 , text default-language: Haskell2010 @@ -52,7 +53,7 @@ build-depends: base , containers , jenkinsPlugins2nix- , tasty-hspec+ , tasty-hspec >=1.1 && <1.2 , text ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall default-language: Haskell2010
src/Nix/JenkinsPlugins2Nix.hs view
@@ -7,27 +7,28 @@ -- Main library entry point. module Nix.JenkinsPlugins2Nix where -import qualified Codec.Archive.Zip as Zip-import Control.Arrow ((&&&))-import Control.Monad (foldM)-import qualified Control.Monad.Except as MTL-import qualified Crypto.Hash as Hash-import qualified Data.ByteString.Lazy as BSL-import Data.Map.Strict (Map)-import qualified Data.Map.Strict as Map-import Data.Monoid ((<>))-import Data.Text (Text)-import qualified Data.Text as Text-import qualified Data.Text.Encoding as Text-import qualified Data.Text.IO as Text-import qualified Network.HTTP.Simple as HTTP-import qualified Nix.Expr as Nix+import qualified Codec.Archive.Zip as Zip+import Control.Arrow ((&&&))+import Control.Monad (foldM)+import qualified Control.Monad.Except as MTL+import qualified Crypto.Hash as Hash+import qualified Data.ByteString.Lazy as BSL+import Data.Map.Strict (Map)+import qualified Data.Map.Strict as Map+import Data.Monoid ((<>))+import Data.Text (Text)+import qualified Data.Text as Text+import qualified Data.Text.Encoding as Text+import qualified Data.Text.IO as Text+import Data.Text.Prettyprint.Doc (Doc)+import qualified Network.HTTP.Simple as HTTP+import qualified Nix.Expr as Nix+import Nix.Expr.Shorthands ((@@)) import qualified Nix.JenkinsPlugins2Nix.Parser as Parser import Nix.JenkinsPlugins2Nix.Types-import qualified Nix.Pretty as Nix-import System.IO (stderr)-import qualified Text.PrettyPrint.ANSI.Leijen as Pretty-import Text.Printf (printf)+import qualified Nix.Pretty as Nix+import System.IO (stderr)+import Text.Printf (printf) -- | Get the download URL of the plugin we're looking for. getPluginUrl :: RequestedPlugin -> Text@@ -88,7 +89,7 @@ AsGiven -> p -- It's not a user-specified plugin and we want the latest -- version per strategy so download the latest one.- Latest -> p { requested_version = Nothing }+ Latest -> p { requested_version = Nothing } -- The user has asked for this plugin explicitly so use -- their possibly-versioned request rather than picking -- based on versions listed in manifest dependencies.@@ -104,7 +105,7 @@ -- | Pretty-print nix expression for all the given plugins and their -- dependencies that the user asked for. mkExprsFor :: Config- -> IO (Either String Pretty.Doc)+ -> IO (Either String (Doc ann)) mkExprsFor (Config { resolution_strategy = st, requested_plugins = ps }) = do eplugins <- MTL.runExceptT $ do let userPlugins = Map.fromList $ map (requested_name &&& id) ps@@ -113,16 +114,17 @@ return $! case eplugins of Left err -> Left err Right plugins ->- let args = Nix.mkParamset exprs+ let args = Nix.mkParamset exprs False res = Nix.mkNonRecSet $ map formatPlugin plugins mkJenkinsPlugin = Nix.bindTo "mkJenkinsPlugin" $ Nix.mkFunction (Nix.mkParamset [ ("name", Nothing) , ("src", Nothing)- ]) $- Nix.mkApp (Nix.mkSym "stdenv.mkDerivation") $ Nix.mkNonRecSet+ ]+ False) $+ Nix.mkSym "stdenv.mkDerivation" @@ Nix.mkNonRecSet [ Nix.inherit [ Nix.StaticKey "name"- , Nix.StaticKey "src" ]+ , Nix.StaticKey "src" ] Nix.nullPos , "phases" Nix.$= Nix.mkStr "installPhase" , "installPhase" Nix.$= Nix.mkStr "cp $src $out" ]@@ -132,16 +134,16 @@ where fetchurl :: Plugin -> Nix.NExpr- fetchurl p = Nix.mkApp (Nix.mkSym "fetchurl") $- Nix.mkNonRecSet [ "url" Nix.$= Nix.mkUri (download_url p)+ fetchurl p = Nix.mkSym "fetchurl" @@+ Nix.mkNonRecSet [ "url" Nix.$= Nix.mkStr (download_url p) , "sha256" Nix.$= Nix.mkStr (Text.pack . show $ sha256 p) ] mkBody :: Plugin -> Nix.NExpr- mkBody p = Nix.mkApp (Nix.mkSym "mkJenkinsPlugin") $- Nix.mkNonRecSet $ [ "name" Nix.$= Nix.mkStr (short_name $ manifest p)- , "src" Nix.$= fetchurl p- ]+ mkBody p = Nix.mkSym "mkJenkinsPlugin" @@+ Nix.mkNonRecSet [ "name" Nix.$= Nix.mkStr (short_name $ manifest p)+ , "src" Nix.$= fetchurl p+ ] formatPlugin :: Plugin -> Nix.Binding Nix.NExpr formatPlugin p = short_name (manifest p) Nix.$= mkBody p