packages feed

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 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"           )