nvfetcher 0.6.0.0 → 0.6.1.0
raw patch · 8 files changed
+84/−63 lines, 8 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ NvFetcher.NixFetcher: instance Data.Aeson.Types.FromJSON.FromJSON NvFetcher.NixFetcher.FetchedGit
+ NvFetcher.NixFetcher: instance GHC.Generics.Generic NvFetcher.NixFetcher.FetchedGit
+ NvFetcher.NixFetcher: instance GHC.Show.Show NvFetcher.NixFetcher.FetchedGit
- NvFetcher.Types.Lens: deepClone :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) Bool
+ NvFetcher.Types.Lens: deepClone :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) Bool
- NvFetcher.Types.Lens: farch :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) (Maybe Text)
+ NvFetcher.Types.Lens: farch :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) (Maybe Text)
- NvFetcher.Types.Lens: fetchSubmodules :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) Bool
+ NvFetcher.Types.Lens: fetchSubmodules :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) Bool
- NvFetcher.Types.Lens: finalImageName :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) (Maybe Text)
+ NvFetcher.Types.Lens: finalImageName :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) (Maybe Text)
- NvFetcher.Types.Lens: finalImageTag :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) (Maybe Text)
+ NvFetcher.Types.Lens: finalImageTag :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) (Maybe Text)
- NvFetcher.Types.Lens: fos :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) (Maybe Text)
+ NvFetcher.Types.Lens: fos :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) (Maybe Text)
- NvFetcher.Types.Lens: fowner :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) Text
+ NvFetcher.Types.Lens: fowner :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) Text
- NvFetcher.Types.Lens: frepo :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) Text
+ NvFetcher.Types.Lens: frepo :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) Text
- NvFetcher.Types.Lens: furl :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) Text
+ NvFetcher.Types.Lens: furl :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) Text
- NvFetcher.Types.Lens: imageDigest :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) (FetchResult ContainerDigest k_iUDW)
+ NvFetcher.Types.Lens: imageDigest :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) (FetchResult ContainerDigest k_iUDF)
- NvFetcher.Types.Lens: imageName :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) Text
+ NvFetcher.Types.Lens: imageName :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) Text
- NvFetcher.Types.Lens: imageTag :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) Text
+ NvFetcher.Types.Lens: imageTag :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) Text
- NvFetcher.Types.Lens: leaveDotGit :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) Bool
+ NvFetcher.Types.Lens: leaveDotGit :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) Bool
- NvFetcher.Types.Lens: name :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) (Maybe Text)
+ NvFetcher.Types.Lens: name :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) (Maybe Text)
- NvFetcher.Types.Lens: rev :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) Version
+ NvFetcher.Types.Lens: rev :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) Version
- NvFetcher.Types.Lens: sha256 :: forall k_iUDW. Lens' (NixFetcher k_iUDW) (FetchResult Checksum k_iUDW)
+ NvFetcher.Types.Lens: sha256 :: forall k_iUDF. Lens' (NixFetcher k_iUDF) (FetchResult Checksum k_iUDF)
- NvFetcher.Types.Lens: tlsVerify :: forall k_iUDW. Traversal' (NixFetcher k_iUDW) (Maybe Bool)
+ NvFetcher.Types.Lens: tlsVerify :: forall k_iUDF. Traversal' (NixFetcher k_iUDF) (Maybe Bool)
Files
- CHANGELOG.md +4/−0
- README.md +1/−1
- nvfetcher.cabal +1/−1
- src/NvFetcher/NixExpr.hs +4/−4
- src/NvFetcher/NixFetcher.hs +68/−51
- test/CheckVersionSpec.hs +1/−1
- test/NixExprSpec.hs +3/−3
- test/PrefetchSpec.hs +2/−2
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for nvfetcher +## 0.6.1.0++* Replace `nix-prefetch` with `nix-prefetch-git` and `nix-prefetch-url`+ ## 0.6.0.0 * Parse error output from nvchecker
README.md view
@@ -157,7 +157,7 @@ - `src.openvsx = publisher.ext_name` -- the latest version of a vscode extension from open vsx - `src.vsmarketplace = publisher.ext_name` -- the latest version of a vscode extension from vscode marketplace - `src.cmd = cmd` -- the version from a shell command (e.g. `echo Meow`)-= `src.container = owner/name` - the latest tag of a container from the Docker registry+- `src.container = owner/name` - the latest tag of a container from the Docker registry Optional list options for some version sources (`src.github_tag`, `src.webpage`, and `src.httpheader` and `src.container`), see the corresponding [nvchecker documentation](https://nvchecker.readthedocs.io/en/latest/usage.html#list-options) for details.
nvfetcher.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: nvfetcher-version: 0.6.0.0+version: 0.6.1.0 synopsis: Generate nix sources expr for the latest version of packages
src/NvFetcher/NixExpr.hs view
@@ -95,7 +95,7 @@ if (deepClone == "true") || (leaveDotGit == "true") then [trimming|- fetchFromGitHub ({+ fetchFromGitHub { owner = $owner; repo = $repo; rev = $rev;@@ -103,17 +103,17 @@ deepClone = $deepClone; leaveDotGit = $leaveDotGit;$n sha256 = $sha256;- })+ } |] else [trimming|- fetchFromGitHub ({+ fetchFromGitHub { owner = $owner; repo = $repo; rev = $rev; fetchSubmodules = $fetchSubmodules;$n sha256 = $sha256;- })+ } |] (FetchUrl (quote -> url) (nameField -> n) (coerce quote -> sha256)) -> [trimming|
src/NvFetcher/NixFetcher.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}@@ -18,11 +19,13 @@ -- -- 'NixFetcher' is used to describe how to fetch package sources. ----- There are three types of fetchers overall:+-- There are five types of fetchers overall: ----- 1. 'FetchGit' -- nix-prefetch fetchgit--- 2. 'FetchGitHub' -- nix-prefetch fetchFromGitHub--- 3. 'FetchUrl' -- nix-prefetch fetchurl+-- 1. 'FetchGit' -- nix-prefetch-git+-- 2. 'FetchGitHub' -- nix-prefetch-git/nix-prefetch-url+-- 3. 'FetchUrl' -- nix-prefetch-url+-- 4. 'FetchTarball' -- nix-prefetch-url+-- 5. 'FetchDocker' -- nix-prefetch-docker -- -- As you can see the type signature of 'prefetch': -- a fetcher will be filled with the fetch result (hash) after the prefetch.@@ -66,53 +69,66 @@ -------------------------------------------------------------------------------- +sha256ToSri :: Text -> Action Checksum+sha256ToSri sha256 = do+ (CmdTime t, Stdout (T.decodeUtf8 -> out), CmdLine c) <-+ quietly $+ command [EchoStderr False] "nix" ["hash", "to-sri", "--type", "sha256", T.unpack sha256]+ putVerbose $ "Finishing running " <> c <> ", took " <> show t <> "s"+ case takeWhile (not . T.null) $ reverse $ T.lines out of+ [x] -> pure $ coerce x+ _ -> fail $ "Failed to parse output from nix hash to-sri: " <> T.unpack out++runNixPrefetchUrl :: Text -> Bool -> Action Checksum+runNixPrefetchUrl url unpack = do+ (CmdTime t, Stdout (T.decodeUtf8 -> out), CmdLine c) <-+ quietly $+ command [EchoStderr False] "nix-prefetch-url" $+ [T.unpack url] <> ["--unpack" | unpack]+ putVerbose $ "Finishing running " <> c <> ", took " <> show t <> "s"+ case takeWhile (not . T.null) $ reverse $ T.lines out of+ [x] -> sha256ToSri x+ _ -> fail $ "Failed to parse output from nix-prefetch-url: " <> T.unpack out++newtype FetchedGit = FetchedGit {sha256 :: Text}+ deriving (Show, Generic, A.FromJSON)++runNixPrefetchGit :: Text -> Text -> Bool -> Bool -> Bool -> Action Checksum+runNixPrefetchGit url rev fetchSubmodules deepClone leaveDotGit = do+ (CmdTime t, Stdout out, CmdLine c) <-+ quietly $+ command [EchoStderr False] "nix-prefetch-git" $+ ["--url", T.unpack url]+ <> ["--rev", T.unpack rev]+ <> ["--fetch-submodules" | fetchSubmodules]+ <> ["--deepClone" | deepClone]+ <> ["--leave-dotGit" | leaveDotGit]+ putVerbose $ "Finishing running " <> c <> ", took " <> show t <> "s"+ case A.eitherDecode out of+ Right (FetchedGit x) -> sha256ToSri x+ Left e -> fail $ "Failed to parse output from nix-prefetch-git as JSON: " <> e++--------------------------------------------------------------------------------+ runFetcher :: NixFetcher Fresh -> Action (NixFetcher Fetched) runFetcher = \case FetchGit {..} -> do- (CmdTime t, Stdout (T.decodeUtf8 -> out), CmdLine c) <-- quietly $- command [EchoStderr False] "nix-prefetch" $- ["fetchgit"]- <> ["--url", T.unpack _furl]- <> ["--rev", T.unpack $ coerce _rev]- <> ["--fetchSubmodules" | _fetchSubmodules]- <> ["--deepClone" | _deepClone]- <> ["--leaveDotGit" | _leaveDotGit]- putVerbose $ "Finishing running " <> c <> ", took " <> show t <> "s"- case takeWhile (not . T.null) $ reverse $ T.lines out of- [x] -> pure FetchGit {_sha256 = coerce x, ..}- _ -> fail $ "Failed to parse output from nix-prefetch: " <> T.unpack out+ result <- runNixPrefetchGit _furl (coerce _rev) _fetchSubmodules _deepClone _leaveDotGit+ pure FetchGit {_sha256 = coerce result, ..} FetchGitHub {..} -> do- (CmdTime t, Stdout (T.decodeUtf8 -> out), CmdLine c) <-- quietly $- command [EchoStderr False] "nix-prefetch" $- ["fetchFromGitHub"]- <> ["--owner", T.unpack _fowner]- <> ["--repo", T.unpack _frepo]- <> ["--rev", T.unpack $ coerce _rev]- <> ["--fetchSubmodules" | _fetchSubmodules]- <> ["--deepClone" | _deepClone]- <> ["--leaveDotGit" | _leaveDotGit]- putVerbose $ "Finishing running " <> c <> ", took " <> show t <> "s"- case takeWhile (not . T.null) $ reverse $ T.lines out of- [x] -> pure FetchGitHub {_sha256 = coerce x, ..}- _ -> fail $ "Failed to parse output from nix-prefetch: " <> T.unpack out+ let useFetchGit = _fetchSubmodules || _leaveDotGit || _deepClone+ ver = coerce _rev+ result <-+ if useFetchGit+ then runNixPrefetchGit [trimming|https://github.com/$_fowner/$_frepo|] (coerce _rev) _fetchSubmodules _deepClone _leaveDotGit+ else runNixPrefetchUrl [trimming|https://github.com/$_fowner/$_frepo/archive/$ver.tar.gz|] True+ pure FetchGitHub {_sha256 = result, ..} FetchUrl {..} -> do- (CmdTime t, Stdout (T.decodeUtf8 -> out), CmdLine c) <-- quietly $- command [EchoStderr False] "nix-prefetch" ["fetchurl", "--url", T.unpack _furl]- putVerbose $ "Finishing running " <> c <> ", took " <> show t <> "s"- case takeWhile (not . T.null) $ reverse $ T.lines out of- [x] -> pure FetchUrl {_sha256 = coerce x, ..}- _ -> fail $ "Failed to parse output from nix-prefetch: " <> T.unpack out+ result <- runNixPrefetchUrl _furl False+ pure FetchUrl {_sha256 = result, ..} FetchTarball {..} -> do- (CmdTime t, Stdout (T.decodeUtf8 -> out), CmdLine c) <-- quietly $- command [EchoStderr False] "nix-prefetch" ["fetchTarball", "--url", T.unpack _furl]- putVerbose $ "Finishing running " <> c <> ", took " <> show t <> "s"- case takeWhile (not . T.null) $ reverse $ T.lines out of- [x] -> pure FetchTarball {_sha256 = coerce x, ..}- _ -> fail $ "Failed to parse output from nix-prefetch: " <> T.unpack out+ result <- runNixPrefetchUrl _furl True+ pure FetchTarball {_sha256 = result, ..} FetchDocker {..} -> do (CmdTime t, Stdout out, CmdLine c) <- quietly $@@ -123,22 +139,23 @@ ] <> concat [["--os", T.unpack os] | Just os <- [_fos]] <> concat [["--arch", T.unpack arch] | Just arch <- [_farch]]- putVerbose $ "Finishing running " <> c <> ",, took " <> show t <> "s"+ putVerbose $ "Finishing running " <> c <> ", took " <> show t <> "s" case A.eitherDecode out of- Right FetchedContainer {..} ->- pure FetchDocker {_sha256 = sha256, _imageDigest = imageDigest, ..}+ Right FetchedContainer {..} -> do+ sri <- sha256ToSri sha256+ pure FetchDocker {_sha256 = sri, _imageDigest = imageDigest, ..} Left e -> fail $ "Failed to parse output from nix-prefetch-docker as JSON: " <> e data FetchedContainer = FetchedContainer { imageDigest :: ContainerDigest,- sha256 :: Checksum+ sha256 :: Text } deriving (Show, Generic, A.FromJSON) pypiUrl :: Text -> Version -> Text pypiUrl pypi (coerce -> ver) = let h = T.cons (T.head pypi) ""- in [trimming|https://pypi.io/packages/source/$h/$pypi/$pypi-$ver.tar.gz|]+ in [trimming|https://pypi.org/packages/source/$h/$pypi/$pypi-$ver.tar.gz|] -------------------------------------------------------------------------------- @@ -158,7 +175,7 @@ -- | Create a fetcher from git url gitFetcher :: Text -> PackageFetcher-gitFetcher furl rev = FetchGit furl rev False False False Nothing ()+gitFetcher furl rev = FetchGit furl rev False True False Nothing () -- | Create a fetcher from github repo gitHubFetcher ::
test/CheckVersionSpec.hs view
@@ -70,7 +70,7 @@ runNvcheckerRule (Repology "ssed" "aur") `shouldReturnJust` Version "3.62" specifyChan "vsmarketplace" $- runNvcheckerRule (VscodeMarketplace "usernamehw" "indent-one-space") `shouldReturnJust` Version "0.3.0"+ runNvcheckerRule (VscodeMarketplace "usernamehw" "indent-one-space") `shouldReturnJust` Version "1.0.0" specifyChan "cmd" $ runNvcheckerRule (Cmd "echo Meow") `shouldReturnJust` Version "Meow"
test/NixExprSpec.hs view
@@ -31,7 +31,7 @@ fetchgit { url = "https://example.com"; rev = "fake_rev";- fetchSubmodules = false;+ fetchSubmodules = true; deepClone = false; leaveDotGit = false; sha256 = "0000000000000000000000000000000000000000000000000000000000000000";@@ -41,13 +41,13 @@ it "renders fresh gitHubFetcher" $ toNixExpr (fakeFetch (gitHubFetcher ("owner", "repo") "fake_rev")) `shouldBe` [trimming|- fetchFromGitHub ({+ fetchFromGitHub { owner = "owner"; repo = "repo"; rev = "fake_rev"; fetchSubmodules = false; sha256 = "0000000000000000000000000000000000000000000000000000000000000000";- })+ } |] it "renders fresh urlFetcher" $
test/PrefetchSpec.hs view
@@ -35,12 +35,12 @@ specifyChan "tarball" $ runPrefetchRule (tarballFetcher "https://github.com/nixos/nixpkgs/archive/3d35529a48d3ad50ad959463755b0b7fe392cfa7.tar.gz")- `shouldReturnJust` Checksum "0la68sv52zz1kjw5s5sn6qslzz9mi9sakhzwi873gp4dhc8df1sg"+ `shouldReturnJust` Checksum "sha256-TwfXEION3DcOivzDqXSKNf1PNTZWF124nOF/UbZGRlE=" specifyChan "docker" $ runPrefetchRule' (_sha256 &&& _imageDigest) testDockerFetcher `shouldReturnJust`- ( Checksum "1ly61z3bcs5qvqi2xxp3dd3llh61r9gygphl1ib8pxv64ix738mr",+ ( Checksum "sha256-uaJxeiRm94tWDBTe51/KwUBKR2vj9i4i3rhotsYPxtM=", ContainerDigest "sha256:65a2763f593ae85fab3b5406dc9e80f744ec5b449f269b699b5efd37a07ad32e" )