hercules-ci-cnix-expr 0.3.6.3 → 0.3.6.4
raw patch · 5 files changed
+6/−229 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +4/−0
- data/vendor/flake-compat/COPYING +0/−20
- data/vendor/flake-compat/default.nix +0/−197
- hercules-ci-cnix-expr.cabal +1/−10
- src/Hercules/CNix/Expr.hs +1/−2
CHANGELOG.md view
@@ -5,6 +5,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## 0.3.6.4 - 2024-06-12++Got rid of unnecessary data files, improving packaging.+ ## 0.3.6.3 - 2024-05-19 Solve build warnings.
− data/vendor/flake-compat/COPYING
@@ -1,20 +0,0 @@-Copyright (c) 2020-2021 Eelco Dolstra and the flake-compat contributors--Permission is hereby granted, free of charge, to any person obtaining-a copy of this software and associated documentation files (the-"Software"), to deal in the Software without restriction, including-without limitation the rights to use, copy, modify, merge, publish,-distribute, sublicense, and/or sell copies of the Software, and to-permit persons to whom the Software is furnished to do so, subject to-the following conditions:--The above copyright notice and this permission notice shall be-included in all copies or substantial portions of the Software.--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
− data/vendor/flake-compat/default.nix
@@ -1,197 +0,0 @@-# Compatibility function to allow flakes to be used by-# non-flake-enabled Nix versions. Given a source tree containing a-# 'flake.nix' and 'flake.lock' file, it fetches the flake inputs and-# calls the flake's 'outputs' function. It then returns an attrset-# containing 'defaultNix' (to be used in 'default.nix'), 'shellNix'-# (to be used in 'shell.nix').--{ src, system ? builtins.currentSystem or "unknown-system" }:--let-- lockFilePath = src + "/flake.lock";-- lockFile = builtins.fromJSON (builtins.readFile lockFilePath);-- fetchTree =- info:- if info.type == "github" then- { outPath =- fetchTarball- ({ url = "https://api.${info.host or "github.com"}/repos/${info.owner}/${info.repo}/tarball/${info.rev}"; }- // (if info ? narHash then { sha256 = info.narHash; } else {})- );- rev = info.rev;- shortRev = builtins.substring 0 7 info.rev;- lastModified = info.lastModified;- lastModifiedDate = formatSecondsSinceEpoch info.lastModified;- narHash = info.narHash;- }- else if info.type == "git" then- { outPath =- builtins.fetchGit- ({ url = info.url; }- // (if info ? rev then { inherit (info) rev; } else {})- // (if info ? ref then { inherit (info) ref; } else {})- );- lastModified = info.lastModified;- lastModifiedDate = formatSecondsSinceEpoch info.lastModified;- narHash = info.narHash;- } // (if info ? rev then {- rev = info.rev;- shortRev = builtins.substring 0 7 info.rev;- } else {- })- else if info.type == "path" then- { outPath = builtins.path { path = info.path; };- narHash = info.narHash;- }- else if info.type == "tarball" then- { outPath =- fetchTarball- ({ inherit (info) url; }- // (if info ? narHash then { sha256 = info.narHash; } else {})- );- }- else if info.type == "gitlab" then- { inherit (info) rev narHash lastModified;- outPath =- fetchTarball- ({ url = "https://${info.host or "gitlab.com"}/api/v4/projects/${info.owner}%2F${info.repo}/repository/archive.tar.gz?sha=${info.rev}"; }- // (if info ? narHash then { sha256 = info.narHash; } else {})- );- shortRev = builtins.substring 0 7 info.rev;- }- else- # FIXME: add Mercurial, tarball inputs.- throw "flake input has unsupported input type '${info.type}'";-- callFlake4 = flakeSrc: locks:- let- flake = import (flakeSrc + "/flake.nix");-- inputs = builtins.mapAttrs (n: v:- if v.flake or true- then callFlake4 (fetchTree (v.locked // v.info)) v.inputs- else fetchTree (v.locked // v.info)) locks;-- outputs = flakeSrc // (flake.outputs (inputs // {self = outputs;}));- in- assert flake.edition == 201909;- outputs;-- callLocklessFlake = flakeSrc:- let- flake = import (flakeSrc + "/flake.nix");- outputs = flakeSrc // (flake.outputs ({ self = outputs; }));- in outputs;-- rootSrc = let- # Try to clean the source tree by using fetchGit, if this source- # tree is a valid git repository.- tryFetchGit = src:- if isGit && !isShallow- then- let res = builtins.fetchGit src;- in if res.rev == "0000000000000000000000000000000000000000" then removeAttrs res ["rev" "shortRev"] else res- else { outPath = src; };- # NB git worktrees have a file for .git, so we don't check the type of .git- isGit = builtins.pathExists (src + "/.git");- isShallow = builtins.pathExists (src + "/.git/shallow");-- in- { lastModified = 0; lastModifiedDate = formatSecondsSinceEpoch 0; }- // (if src ? outPath then src else tryFetchGit src);-- # Format number of seconds in the Unix epoch as %Y%m%d%H%M%S.- formatSecondsSinceEpoch = t:- let- rem = x: y: x - x / y * y;- days = t / 86400;- secondsInDay = rem t 86400;- hours = secondsInDay / 3600;- minutes = (rem secondsInDay 3600) / 60;- seconds = rem t 60;-- # Courtesy of https://stackoverflow.com/a/32158604.- z = days + 719468;- era = (if z >= 0 then z else z - 146096) / 146097;- doe = z - era * 146097;- yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365;- y = yoe + era * 400;- doy = doe - (365 * yoe + yoe / 4 - yoe / 100);- mp = (5 * doy + 2) / 153;- d = doy - (153 * mp + 2) / 5 + 1;- m = mp + (if mp < 10 then 3 else -9);- y' = y + (if m <= 2 then 1 else 0);-- pad = s: if builtins.stringLength s < 2 then "0" + s else s;- in "${toString y'}${pad (toString m)}${pad (toString d)}${pad (toString hours)}${pad (toString minutes)}${pad (toString seconds)}";-- allNodes =- builtins.mapAttrs- (key: node:- let- sourceInfo =- if key == lockFile.root- then rootSrc- else fetchTree (node.info or {} // removeAttrs node.locked ["dir"]);-- subdir = if key == lockFile.root then "" else node.locked.dir or "";-- flake = import (sourceInfo + (if subdir != "" then "/" else "") + subdir + "/flake.nix");-- inputs = builtins.mapAttrs- (inputName: inputSpec: allNodes.${resolveInput inputSpec})- (node.inputs or {});-- # Resolve a input spec into a node name. An input spec is- # either a node name, or a 'follows' path from the root- # node.- resolveInput = inputSpec:- if builtins.isList inputSpec- then getInputByPath lockFile.root inputSpec- else inputSpec;-- # Follow an input path (e.g. ["dwarffs" "nixpkgs"]) from the- # root node, returning the final node.- getInputByPath = nodeName: path:- if path == []- then nodeName- else- getInputByPath- # Since this could be a 'follows' input, call resolveInput.- (resolveInput lockFile.nodes.${nodeName}.inputs.${builtins.head path})- (builtins.tail path);-- outputs = flake.outputs (inputs // { self = result; });-- result = outputs // sourceInfo // { inherit inputs; inherit outputs; inherit sourceInfo; };- in- if node.flake or true then- assert builtins.isFunction flake.outputs;- result- else- sourceInfo- )- lockFile.nodes;-- result =- if !(builtins.pathExists lockFilePath)- then callLocklessFlake rootSrc- else if lockFile.version == 4- then callFlake4 rootSrc (lockFile.inputs)- else if lockFile.version >= 5 && lockFile.version <= 7- then allNodes.${lockFile.root}- else throw "lock file '${lockFilePath}' has unsupported version ${toString lockFile.version}";--in- rec {- defaultNix =- result- // (if result ? defaultPackage.${system} then { default = result.defaultPackage.${system}; } else {});-- shellNix =- defaultNix- // (if result ? devShell.${system} then { default = result.devShell.${system}; } else {});- }
hercules-ci-cnix-expr.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.4 name: hercules-ci-cnix-expr-version: 0.3.6.3+version: 0.3.6.4 synopsis: Bindings for the Nix evaluator category: Nix, CI, Testing, DevOps homepage: https://docs.hercules-ci.com@@ -16,11 +16,6 @@ test/data/sample.json test/data/simple-flake/flake.nix -data-dir: data-data-files:- vendor/flake-compat/*.nix- vendor/flake-compat/COPYING- source-repository head type: git location: https://github.com/hercules-ci/hercules-ci-agent@@ -91,10 +86,6 @@ Hercules.CNix.Expr.Raw Hercules.CNix.Expr.Typed Hercules.CNix.Expr.Schema- other-modules:- Paths_hercules_ci_cnix_expr- autogen-modules:- Paths_hercules_ci_cnix_expr hs-source-dirs: src
src/Hercules/CNix/Expr.hs view
@@ -90,7 +90,6 @@ import Hercules.CNix.Store.Context import qualified Language.C.Inline.Cpp as C import qualified Language.C.Inline.Cpp.Exception as C-import Paths_hercules_ci_cnix_expr (getDataFileName) import Protolude hiding (evalState) import System.Directory (makeAbsolute) import Data.Aeson.KeyMap (toMapText)@@ -327,7 +326,7 @@ addInternalAllowedPaths :: Ptr EvalState -> IO () addInternalAllowedPaths evalState = do- addAllowedPath evalState . encodeUtf8 . toS =<< getDataFileName "vendor/flake-compat"+ pass evalFile :: Ptr EvalState -> FilePath -> IO RawValue evalFile evalState filename = do