diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 05ea48a..e966cb6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,4 @@ jobs: steps: - uses: actions/checkout@v2 - uses: cachix/install-nix-action@v12 - with: - nix_path: nixpkgs=channel:nixos-20.09 - run: ./test.sh diff --git a/README.md b/README.md index 17292b5..10cc379 100644 --- a/README.md +++ b/README.md @@ -16,14 +16,14 @@ You might choose to simply copy the derivations from this repository, or you can ``` > nix repl -nix-repl> pkgs = import {} +nix-repl> pkgs = import ./nixpkgs.nix {} nix-repl> drvs = import (pkgs.fetchFromGitHub { owner = "justinwoo"; repo = "easy-dhall-nix"; rev = # some REV sha256 = # some SHA -}) {} +}) { inherit pkgs; } nix-repl> drvs.dhall-simple «derivation /nix/store/qz29jbplpmlvsbmq05084dh1fbs8sl0h-dhall-simple.drv» diff --git a/default.nix b/default.nix index 34cbe4c..85c9cbf 100644 --- a/default.nix +++ b/default.nix @@ -1,4 +1,4 @@ -{ pkgs ? import {} }: +{ pkgs ? import ./nixpkgs.nix {} }: { dhall-simple = import ./dhall-simple.nix { diff --git a/dhall-bash-simple.nix b/dhall-bash-simple.nix index 2704763..9ff2296 100644 --- a/dhall-bash-simple.nix +++ b/dhall-bash-simple.nix @@ -1,4 +1,4 @@ -{ pkgs ? import {} }: +{ pkgs ? import ./nixpkgs.nix {} }: import ./build.nix { inherit pkgs; release = import ./release.nix; } { simpleName = "dhall-bash-simple"; diff --git a/dhall-docs-simple.nix b/dhall-docs-simple.nix index 3b581f4..ac54212 100644 --- a/dhall-docs-simple.nix +++ b/dhall-docs-simple.nix @@ -1,4 +1,4 @@ -{ pkgs ? import { } }: +{ pkgs ? import ./nixpkgs.nix { } }: import ./build.nix { inherit pkgs; release = import ./release.nix; } { simpleName = "dhall-docs-simple"; diff --git a/dhall-json-simple.nix b/dhall-json-simple.nix index cceb52a..cfdf524 100644 --- a/dhall-json-simple.nix +++ b/dhall-json-simple.nix @@ -1,4 +1,4 @@ -{ pkgs ? import {} }: +{ pkgs ? import ./nixpkgs.nix {} }: import ./build.nix { inherit pkgs; release = import ./release.nix; } { simpleName = "dhall-json-simple"; diff --git a/dhall-lsp-simple.nix b/dhall-lsp-simple.nix index 9c12846..bf15163 100644 --- a/dhall-lsp-simple.nix +++ b/dhall-lsp-simple.nix @@ -1,4 +1,4 @@ -{ pkgs ? import {} }: +{ pkgs ? import ./nixpkgs.nix {} }: import ./build.nix { inherit pkgs; release = import ./release.nix; } { simpleName = "dhall-lsp-simple"; diff --git a/dhall-nix-simple.nix b/dhall-nix-simple.nix index 3c3c5c5..21fa5a0 100644 --- a/dhall-nix-simple.nix +++ b/dhall-nix-simple.nix @@ -1,4 +1,4 @@ -{ pkgs ? import {} }: +{ pkgs ? import ./nixpkgs.nix {} }: import ./build.nix { inherit pkgs; release = import ./release.nix; } { simpleName = "dhall-nix-simple"; diff --git a/dhall-simple.nix b/dhall-simple.nix index f37bef5..9d419ea 100644 --- a/dhall-simple.nix +++ b/dhall-simple.nix @@ -1,4 +1,4 @@ -{ pkgs ? import {} }: +{ pkgs ? import ./nixpkgs.nix {} }: import ./build.nix { inherit pkgs; release = import ./release.nix; } { simpleName = "dhall-simple"; diff --git a/dhall-yaml-simple.nix b/dhall-yaml-simple.nix index 1c0a8cd..f672652 100644 --- a/dhall-yaml-simple.nix +++ b/dhall-yaml-simple.nix @@ -1,4 +1,4 @@ -{ pkgs ? import {} }: +{ pkgs ? import ./nixpkgs.nix {} }: import ./build.nix { inherit pkgs; release = import ./release.nix; } { simpleName = "dhall-yaml-simple"; diff --git a/fetch.py b/fetch.py index 974aeb0..3fdef9c 100755 --- a/fetch.py +++ b/fetch.py @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#!nix-shell -i python3 -p python3 curl nix +#!nix-shell -I nixpkgs=./nixpkgs.nix -i python3 -p python3 curl nix import json import re @@ -11,6 +11,29 @@ def curl_latest_release(): url = "https://api.github.com/repos/dhall-lang/dhall-haskell/releases/latest" return json.loads(sub.check_output(["curl", url])) +# fetch the latest nixos unstable version +def curl_latest_nixos_unstable(): + url = "https://nixos.org/channels/nixos-unstable/git-revision" + return sub.check_output(["curl", "--location", url]).strip().decode() + +def update_nixpkgs(lockfile_path, new_hash): + # --unpack produces the hash required by `builtins.fetchTarball` + github_archive = "https://github.com/NixOS/nixpkgs/archive/{}.tar.gz".format(new_hash) + hash = sub.check_output([ + "nix-prefetch-url", '--unpack', github_archive + ]).strip().decode() + date = sub.check_output([ + "date", "--iso-8601=minutes" + ]).strip().decode() + with open(lockfile_path, 'w') as f: + json.dump({ + "comment": "autogenerated by fetch.py", + "url": github_archive, + "sha256": hash, + "date": date + }, f, indent=2) + + # call nix-prefetch-url on each asset to get their hashes def prefetch_binaries(release): res = [] @@ -39,11 +62,17 @@ def postprocess(fetched): if __name__ == "__main__": + print("updating nixpkgs to latest unstable", file=sys.stderr) + nixos_hash = curl_latest_nixos_unstable() + update_nixpkgs("./nixpkgs.json", nixos_hash) + release = curl_latest_release() version = release['tag_name'] + print("updating to release {}".format(version), file=sys.stderr) fetched = prefetch_binaries(release) res = postprocess(fetched) + print("writing ./release.json", file=sys.stderr) with open("./release.json", mode='w') as f: json.dump(res, f, indent=2) diff --git a/nixpkgs.json b/nixpkgs.json new file mode 100644 index 0000000..f1f1fa5 --- /dev/null +++ b/nixpkgs.json @@ -0,0 +1,6 @@ +{ + "comment": "autogenerated by fetch.py", + "url": "https://github.com/NixOS/nixpkgs/archive/24eb3f87fc610f18de7076aee7c5a84ac5591e3e.tar.gz", + "sha256": "1ca14hhbinnz1ylbqnhwinjdbm6nn859j4gmyamg2kr7jl6611s0", + "date": "2020-11-30T23:28+01:00" +} \ No newline at end of file diff --git a/nixpkgs.nix b/nixpkgs.nix index 219a3cf..8a9556a 100644 --- a/nixpkgs.nix +++ b/nixpkgs.nix @@ -1,6 +1,6 @@ -import ( - builtins.fetchTarball { - url = "https://github.com/nixos/nixpkgs/archive/a7bf8161fa834a602278c15fcbdd955656b3aed8.tar.gz"; - sha256 = "0lzd35niw0j8qy4mhglvqwv5qwyvdb9mhv8hpmn73ym57r92i4p1"; - } -) +import (fetchTarball { + inherit (builtins.fromJSON (builtins.readFile ./nixpkgs.json)) + url + sha256 + ; +}) diff --git a/test.nix b/test.nix index b408f6f..2c94b25 100644 --- a/test.nix +++ b/test.nix @@ -1,4 +1,4 @@ -{ pkgs ? import {} }: +{ pkgs ? import ./nixpkgs.nix {} }: let diff --git a/test.sh b/test.sh index 6243540..c081b68 100755 --- a/test.sh +++ b/test.sh @@ -1,4 +1,8 @@ #!/usr/bin/env sh set -e -test_script="$(nix-build ./test.nix)" -exec "$test_script" +tmp="$(mktemp -d)" +trap "rm -r $tmp" EXIT +nix-build \ + --out-link "$tmp"/result \ + ./test.nix +"$tmp/result"