Compare commits
51 commits
main
...
drop-patch
Author | SHA1 | Date | |
---|---|---|---|
Ilya K | 6e97fd4382 | ||
jade | a2ef313ace | ||
jade | f879988840 | ||
jade | a792d328c4 | ||
jade | ae4a5342c1 | ||
jade | 21907b875d | ||
jade | fac4f00719 | ||
Qyriad | 71f268f215 | ||
Qyriad | 1c91fbff0d | ||
eldritch horrors | a8a1c6a24b | ||
eldritch horrors | 376093813b | ||
Qyriad | a3b8ac2414 | ||
jade | 9babd8172a | ||
jade | 958a5a474b | ||
Qyriad | 6804fe0ec5 | ||
Qyriad | bf047623b5 | ||
Ilya K | f425f32a62 | ||
jade | 93ce1e3f5d | ||
Qyriad | 1b35b90445 | ||
jade | 9515bc250a | ||
Lunaphied | 54cc0918d4 | ||
jade | 2714f7ac02 | ||
jade | 48055468d5 | ||
jade | a428fa24ae | ||
jade | 9c691a4185 | ||
hexa | 600fc154e4 | ||
eldritch horrors | 280c404856 | ||
eldritch horrors | eabed5a04f | ||
jade | 5d64b01d02 | ||
hexa | 7afd8fbb0d | ||
jade | 5d2b325d3a | ||
jade | 1062d3c1ff | ||
jade | f8b5d0bc9c | ||
Qyriad | adbbecb518 | ||
Emily Trau | ebdf6e66ae | ||
jade | 30a7b8f7c8 | ||
jade | 41990c5d80 | ||
jade | f173ccc0aa | ||
jade | 4d09a927b0 | ||
jade | 7278990b5a | ||
jade | 8b7315c5b9 | ||
jade | e61b27f3f6 | ||
ff76ec73c9 | |||
c88abb52dc | |||
89ccd6e015 | |||
jade | 7083c47d04 | ||
d2b5d0a958 | |||
Jade Lovelace | a312274b08 | ||
Jade Lovelace | 5ca6ed5690 | ||
Jade Lovelace | c4615ccc7f | ||
Jade Lovelace | 9ed607358a |
34
flake.lock
34
flake.lock
|
@ -5,11 +5,11 @@
|
|||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"lastModified": 1709126324,
|
||||
"narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"rev": "d465f4819400de7c8d874d50b982301f28a84605",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -20,11 +20,11 @@
|
|||
},
|
||||
"flakey-profile": {
|
||||
"locked": {
|
||||
"lastModified": 1712898590,
|
||||
"narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=",
|
||||
"lastModified": 1711325813,
|
||||
"narHash": "sha256-ygJR5VikyCfK0CUJHboOKJVr6s9HQ1RXcvFEFnv+KIk=",
|
||||
"owner": "lf-",
|
||||
"repo": "flakey-profile",
|
||||
"rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d",
|
||||
"rev": "3b32c4a71f89b874fe0be2dc125eacb9c3473204",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -36,24 +36,26 @@
|
|||
"lix": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1718767907,
|
||||
"narHash": "sha256-gpd+mGQxqVHw2kO6rSPQel8TkChHh9UpqxjsmQi0QJM=",
|
||||
"rev": "85f282ef572577899b3d80ba8def1b920a386218",
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/85f282ef572577899b3d80ba8def1b920a386218.tar.gz"
|
||||
"lastModified": 1714774053,
|
||||
"narHash": "sha256-RaiwQCGFhC1WtieS2N3FotIlKSowq+R6ETyY6nZnPh8=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "549d609a7bce2b4ac28808a76a72d7f3743b9c76",
|
||||
"revCount": 15471,
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.lix.systems/lix-project/lix.git"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.lix.systems/lix-project/lix.git"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1718530797,
|
||||
"narHash": "sha256-pup6cYwtgvzDpvpSCFh1TEUjw2zkNpk8iolbKnyFmmU=",
|
||||
"lastModified": 1714635257,
|
||||
"narHash": "sha256-4cPymbty65RvF1DWQfc+Bc8B233A1BWxJnNULJKQ1EY=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b60ebf54c15553b393d144357375ea956f89e9a9",
|
||||
"rev": "63c3a29ca82437c87573e4c6919b09a24ea61b0f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
{
|
||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
inputs.lix = {
|
||||
url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz";
|
||||
url = "git+ssh://git@git.lix.systems/lix-project/lix.git";
|
||||
flake = false;
|
||||
};
|
||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||
inputs.flakey-profile.url = "github:lf-/flakey-profile";
|
||||
|
||||
outputs = inputs@{ self, nixpkgs, lix, flake-utils, flakey-profile, ... }:
|
||||
let versionSuffix = "pre${builtins.substring 0 8 lix.lastModifiedDate}-${lix.shortRev or lix.dirtyShortRev}";
|
||||
let versionSuffix = "pre${builtins.substring 0 8 lix.lastModifiedDate}-${lix.shortRev}";
|
||||
in {
|
||||
inherit inputs;
|
||||
nixosModules.default = import ./module.nix { inherit lix versionSuffix; };
|
||||
|
|
47
npins/default.nix
Normal file
47
npins/default.nix
Normal file
|
@ -0,0 +1,47 @@
|
|||
# Generated by npins. Do not modify; will be overwritten regularly
|
||||
let
|
||||
data = builtins.fromJSON (builtins.readFile ./sources.json);
|
||||
version = data.version;
|
||||
|
||||
mkSource = spec:
|
||||
assert spec ? type; let
|
||||
path =
|
||||
if spec.type == "Git" then mkGitSource spec
|
||||
else if spec.type == "GitRelease" then mkGitSource spec
|
||||
else if spec.type == "PyPi" then mkPyPiSource spec
|
||||
else if spec.type == "Channel" then mkChannelSource spec
|
||||
else builtins.throw "Unknown source type ${spec.type}";
|
||||
in
|
||||
spec // { outPath = path; };
|
||||
|
||||
mkGitSource = { repository, revision, url ? null, hash, ... }:
|
||||
assert repository ? type;
|
||||
# At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository
|
||||
# In the latter case, there we will always be an url to the tarball
|
||||
if url != null then
|
||||
(builtins.fetchTarball {
|
||||
inherit url;
|
||||
sha256 = hash; # FIXME: check nix version & use SRI hashes
|
||||
})
|
||||
else assert repository.type == "Git"; builtins.fetchGit {
|
||||
url = repository.url;
|
||||
rev = revision;
|
||||
# hash = hash;
|
||||
};
|
||||
|
||||
mkPyPiSource = { url, hash, ... }:
|
||||
builtins.fetchurl {
|
||||
inherit url;
|
||||
sha256 = hash;
|
||||
};
|
||||
|
||||
mkChannelSource = { url, hash, ... }:
|
||||
builtins.fetchTarball {
|
||||
inherit url;
|
||||
sha256 = hash;
|
||||
};
|
||||
in
|
||||
if version == 3 then
|
||||
builtins.mapAttrs (_: mkSource) data.pins
|
||||
else
|
||||
throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`"
|
16
npins/sources.json
Normal file
16
npins/sources.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"pins": {
|
||||
"nix-eval-jobs": {
|
||||
"type": "Git",
|
||||
"repository": {
|
||||
"type": "Git",
|
||||
"url": "git+ssh://git@git.lix.systems/lix-project/nix-eval-jobs"
|
||||
},
|
||||
"branch": "main",
|
||||
"revision": "793841a9b7b689e37c9a7902710aab2bd6a833d5",
|
||||
"url": null,
|
||||
"hash": "1pkb7glscd6dkfjf7x1cj51l21k09wjw5mzm32j37yrln5f20il5"
|
||||
}
|
||||
},
|
||||
"version": 3
|
||||
}
|
162
overlay.nix
162
overlay.nix
|
@ -1,99 +1,85 @@
|
|||
{ lix, versionSuffix ? "" }:
|
||||
final: prev:
|
||||
let
|
||||
boehmgc-patched = ((final.boehmgc.override {
|
||||
enableLargeConfig = true;
|
||||
}).overrideAttrs (o: {
|
||||
patches = (o.patches or [ ]) ++ [
|
||||
# for clown reasons this version is newer than the one in lix, we should
|
||||
# fix this and update our nixpkgs pin
|
||||
(prev.path + "/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch")
|
||||
] ++ final.lib.optionals (final.lib.versionOlder o.version "8.2.6") [
|
||||
# https://github.com/ivmai/bdwgc/pull/586
|
||||
(builtins.path { path = lix + "/boehmgc-traceable_allocator-public.diff"; name = "boehmgc-traceable_allocator-public.patch"; })
|
||||
];
|
||||
})
|
||||
);
|
||||
|
||||
# This is kind of scary to not override the nix version to pretend to be
|
||||
# 2.18 since nixpkgs can introduce new breakage in its Nix unstable CLI
|
||||
# usage.
|
||||
# https://github.com/nixos/nixpkgs/blob/6afb255d976f85f3359e4929abd6f5149c323a02/nixos/modules/config/nix.nix#L121
|
||||
lixPkg = final.callPackage (lix + "/package.nix") ({
|
||||
versionSuffix = "-${versionSuffix}";
|
||||
# FIXME: do this more sensibly for future releases
|
||||
# https://git.lix.systems/lix-project/lix/issues/406
|
||||
officialRelease = false;
|
||||
lixPkg = (final.callPackage (lix + "/package.nix") {
|
||||
build-release-notes = false;
|
||||
versionSuffix = "-lix${versionSuffix}";
|
||||
boehmgc-nix = boehmgc-patched;
|
||||
});
|
||||
|
||||
# These packages depend on Nix features that Lix does not support
|
||||
overridelist_2_18 = [
|
||||
"attic-client"
|
||||
"devenv"
|
||||
"nix-du"
|
||||
"nix-init"
|
||||
"nix-prefetch-git"
|
||||
"nixos-option"
|
||||
"nurl"
|
||||
"prefetch-yarn-deps" # force these onto upstream so we are not regularly rebuilding electron
|
||||
];
|
||||
override_2_18 = prev.lib.genAttrs overridelist_2_18 (
|
||||
name: prev.${name}.override {
|
||||
nix = final.nixVersions.nix_2_18_upstream;
|
||||
});
|
||||
|
||||
inherit (prev) lib;
|
||||
|
||||
prefetch-npm-deps-args = lib.functionArgs prev.prefetch-npm-deps.override;
|
||||
|
||||
warning = ''
|
||||
warning: You have the lix overlay included into a nixpkgs import twice,
|
||||
perhaps due to the NixOS module being included twice, or because of using
|
||||
pkgs.nixos and also including it in imports, or perhaps some unknown
|
||||
machinations of a complicated flake library.
|
||||
This is completely harmless since we have no-op'd the second one if you are
|
||||
seeing this message, but it would be a small style improvement to fix
|
||||
it :)
|
||||
P.S. If you had some hack to fix nixos-option build failures in your
|
||||
configuration, that was caused by including an older version of the lix
|
||||
overlay twice, which is now mitigated if you see this message, so you can
|
||||
delete that.
|
||||
P.P.S. This Lix has super catgirl powers.
|
||||
'';
|
||||
|
||||
maybeWarnDuplicate = x: if final.lix-overlay-present > 1 then builtins.trace warning x else x;
|
||||
|
||||
overlay = override_2_18 // {
|
||||
lix-overlay-present = 1;
|
||||
# used for things that one wouldn't necessarily want to update, but we
|
||||
# nevertheless shove it in the overlay and fixed-point it in case one *does*
|
||||
# want to do that.
|
||||
lix-sources = import ./pins.nix;
|
||||
|
||||
nixVersions = prev.nixVersions // rec {
|
||||
# FIXME: do something less scuffed
|
||||
nix_2_18 = maybeWarnDuplicate lixPkg;
|
||||
stable = nix_2_18;
|
||||
nix_2_18_upstream = prev.nixVersions.nix_2_18;
|
||||
};
|
||||
|
||||
nix-eval-jobs = (prev.nix-eval-jobs.override {
|
||||
# lix
|
||||
nix = final.nixVersions.nix_2_18;
|
||||
}).overrideAttrs (old:
|
||||
let src = final.lix-sources.nix-eval-jobs;
|
||||
in {
|
||||
version = "2.90.0-lix-${builtins.substring 0 7 src.rev}";
|
||||
|
||||
# FIXME: should this be patches instead?
|
||||
inherit src;
|
||||
|
||||
mesonBuildType = "debugoptimized";
|
||||
|
||||
ninjaFlags = old.ninjaFlags or [ ] ++ [ "-v" ];
|
||||
}
|
||||
);
|
||||
|
||||
# support both having and missing https://github.com/NixOS/nixpkgs/pull/304913
|
||||
prefetch-npm-deps =
|
||||
if (prefetch-npm-deps-args ? nix) || (prefetch-npm-deps-args == {})
|
||||
then prev.prefetch-npm-deps.override {
|
||||
nix = final.nixVersions.nix_2_18_upstream;
|
||||
}
|
||||
else prev.prefetch-npm-deps;
|
||||
|
||||
nix-doc = prev.callPackage ./nix-doc/package.nix { withPlugin = false; };
|
||||
|
||||
pegtl = prev.callPackage ./pegtl.nix { };
|
||||
};
|
||||
in
|
||||
# Make the overlay idempotent, since flakes passing nixos modules around by
|
||||
# value and many other things make it way too easy to include the overlay
|
||||
# twice
|
||||
if (prev ? lix-overlay-present) then { lix-overlay-present = 2; } else overlay
|
||||
{
|
||||
# used for things that one wouldn't necessarily want to update, but we
|
||||
# nevertheless shove it in the overlay and fixed-point it in case one *does*
|
||||
# want to do that.
|
||||
lix-sources = import ./npins;
|
||||
|
||||
nixVersions = prev.nixVersions // rec {
|
||||
# FIXME: do something less scuffed
|
||||
nix_2_18 = lixPkg;
|
||||
stable = nix_2_18;
|
||||
nix_2_18_upstream = prev.nixVersions.nix_2_18;
|
||||
};
|
||||
|
||||
nix-eval-jobs = (prev.nix-eval-jobs.override {
|
||||
# lix
|
||||
nix = final.nixVersions.nix_2_18;
|
||||
}).overrideAttrs (old: {
|
||||
# FIXME: should this be patches instead?
|
||||
src = final.lix-sources.nix-eval-jobs;
|
||||
|
||||
mesonBuildType = "debugoptimized";
|
||||
|
||||
ninjaFlags = old.ninjaFlags or [ ] ++ [ "-v" ];
|
||||
});
|
||||
|
||||
# force these onto upstream so we are not regularly rebuilding electron
|
||||
prefetch-yarn-deps = prev.prefetch-yarn-deps.override {
|
||||
nix = final.nixVersions.nix_2_18_upstream;
|
||||
};
|
||||
|
||||
# support both having and missing https://github.com/NixOS/nixpkgs/pull/304913
|
||||
prefetch-npm-deps =
|
||||
if (lib.functionArgs prev.prefetch-npm-deps.override) ? nix
|
||||
then prev.prefetch-npm-deps.override {
|
||||
nix = final.nixVersions.nix_2_18_upstream;
|
||||
}
|
||||
else prev.prefetch-npm-deps;
|
||||
|
||||
nix-prefetch-git = prev.nix-prefetch-git.override {
|
||||
nix = final.nixVersions.nix_2_18_upstream;
|
||||
};
|
||||
|
||||
nixos-option = prev.nixos-option.override {
|
||||
nix = final.nixVersions.nix_2_18_upstream;
|
||||
};
|
||||
|
||||
nix-doc = prev.callPackage ./nix-doc/package.nix { withPlugin = false; };
|
||||
|
||||
nix-init = prev.nix-init.override {
|
||||
nix = final.nixVersions.nix_2_18_upstream;
|
||||
};
|
||||
|
||||
nurl = prev.nurl.override {
|
||||
nix = final.nixVersions.nix_2_18_upstream;
|
||||
};
|
||||
}
|
||||
|
|
23
pegtl.nix
23
pegtl.nix
|
@ -1,23 +0,0 @@
|
|||
{
|
||||
stdenv,
|
||||
cmake,
|
||||
ninja,
|
||||
fetchFromGitHub,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "pegtl";
|
||||
version = "3.2.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
repo = "PEGTL";
|
||||
owner = "taocpp";
|
||||
rev = "refs/tags/3.2.7";
|
||||
hash = "sha256-IV5YNGE4EWVrmg2Sia/rcU8jCuiBynQGJM6n3DCWTQU=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
ninja
|
||||
];
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
{"nix-eval-jobs": {"kind": "tarball", "rev": "f8869bdcca7c1d5aaf37de3da3a4176811279a57", "nar_hash": "sha256-F/RvI9chHywnckEqHO1ggjzCayknhDnnl2kNnnVXpWg=", "locked_url": "https://git.lix.systems/api/v1/repos/lix-project/nix-eval-jobs/archive/f8869bdcca7c1d5aaf37de3da3a4176811279a57.tar.gz?rev=f8869bdcca7c1d5aaf37de3da3a4176811279a57", "url": "https://git.lix.systems/lix-project/nix-eval-jobs/archive/main.tar.gz"}}
|
26
pins.nix
26
pins.nix
|
@ -1,26 +0,0 @@
|
|||
# this is a custom pinning tool, written because npins doesn't have narHash
|
||||
# compatible output for git inputs, and also doesn't support the Nix immutable
|
||||
# tarball protocol
|
||||
let
|
||||
pins = builtins.fromJSON (builtins.readFile ./pins.json);
|
||||
fetchPin = args@{ kind, ... }:
|
||||
if kind == "git" then
|
||||
builtins.fetchGit
|
||||
{
|
||||
name = "source";
|
||||
url = args.url;
|
||||
ref = args.ref;
|
||||
rev = args.rev;
|
||||
narHash = args.nar_hash;
|
||||
}
|
||||
else if kind == "tarball" then
|
||||
args // {
|
||||
outPath = builtins.fetchTarball {
|
||||
name = "source";
|
||||
url = args.locked_url;
|
||||
sha256 = args.nar_hash;
|
||||
};
|
||||
}
|
||||
else builtins.throw "unsupported input type ${kind}";
|
||||
in
|
||||
builtins.mapAttrs (_: fetchPin) pins
|
|
@ -2,7 +2,6 @@
|
|||
let
|
||||
configs = {
|
||||
it-builds = nixos ({ ... }: {
|
||||
imports = [ lix-module ];
|
||||
documentation.enable = false;
|
||||
fileSystems."/".device = "ignore-root-device";
|
||||
boot.loader.grub.enable = false;
|
||||
|
|
165
update_pins.py
165
update_pins.py
|
@ -1,165 +0,0 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i python3 -p 'python3.withPackages (ps: [ ps.requests ])'
|
||||
"""
|
||||
Updates pins in this repo to their latest version.
|
||||
|
||||
This is a custom pinning tool, written because npins doesn't have narHash
|
||||
compatible output for git inputs (it is not SRI), and also doesn't support the
|
||||
Nix immutable tarball protocol which we would like to use when we become public.
|
||||
"""
|
||||
import subprocess
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
import re
|
||||
import dataclasses
|
||||
from typing import Literal
|
||||
import urllib.parse
|
||||
import json
|
||||
|
||||
|
||||
# https://stackoverflow.com/a/51286749
|
||||
class DataclassJSONEncoder(json.JSONEncoder):
|
||||
|
||||
def default(self, o):
|
||||
if dataclasses.is_dataclass(o):
|
||||
return dataclasses.asdict(o)
|
||||
return super().default(o)
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class PinSerialized:
|
||||
kind: str
|
||||
rev: str | None
|
||||
nar_hash: str
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class GitPinSerialized(PinSerialized):
|
||||
kind: Literal['git']
|
||||
url: str
|
||||
rev: str
|
||||
ref: str
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class TarballPinSerialized(PinSerialized):
|
||||
kind: Literal['tarball']
|
||||
locked_url: str
|
||||
url: str
|
||||
|
||||
|
||||
class PinSpec:
|
||||
|
||||
def do_pin(self) -> dict[str, str]:
|
||||
raise ValueError('unimplemented')
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class GitPinSpec(PinSpec):
|
||||
url: str
|
||||
branch: str
|
||||
|
||||
def do_pin(self) -> GitPinSerialized:
|
||||
return lock_git(self.url, self.branch)
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class TarballPinSpec(PinSpec):
|
||||
url: str
|
||||
|
||||
def do_pin(self) -> TarballPinSerialized:
|
||||
return lock_tarball(self.url)
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class LinkHeader:
|
||||
url: str
|
||||
rev: str | None
|
||||
|
||||
|
||||
LINK_HEADER_RE = re.compile(r'<(?P<url>.*)>; rel="immutable"')
|
||||
|
||||
|
||||
def parse_link_header(header) -> LinkHeader | None:
|
||||
matched = LINK_HEADER_RE.match(header)
|
||||
if not matched:
|
||||
return None
|
||||
|
||||
url = matched.group('url')
|
||||
parsed_url = urllib.parse.urlparse(url)
|
||||
parsed_qs = urllib.parse.parse_qs(parsed_url.query)
|
||||
|
||||
return LinkHeader(url=url, rev=next(iter(parsed_qs.get('rev', [])), None))
|
||||
|
||||
|
||||
def lock_tarball(url) -> TarballPinSerialized:
|
||||
"""
|
||||
Prefetches a tarball using the Nix immutable tarball protocol
|
||||
"""
|
||||
import requests
|
||||
resp = requests.get(url)
|
||||
with tempfile.TemporaryDirectory() as td:
|
||||
td = Path(td)
|
||||
proc = subprocess.Popen(["tar", "-C", td, "-xvzf", "-"],
|
||||
stdin=subprocess.PIPE)
|
||||
assert proc.stdin
|
||||
for chunk in resp.iter_content(64 * 1024):
|
||||
proc.stdin.write(chunk)
|
||||
proc.stdin.close()
|
||||
if proc.wait() != 0:
|
||||
raise RuntimeError("untarring failed")
|
||||
|
||||
children = list(td.iterdir())
|
||||
# FIXME: allow different tarball structures
|
||||
assert len(children) == 1
|
||||
|
||||
child = children[0].rename(children[0].parent.joinpath('source'))
|
||||
sri_hash = subprocess.check_output(
|
||||
["nix-hash", "--type", "sha256", "--sri", child]).decode().strip()
|
||||
path = subprocess.check_output(
|
||||
["nix-store", "--add-fixed", "--recursive", "sha256",
|
||||
child]).decode().strip()
|
||||
|
||||
link_info = parse_link_header(resp.headers['Link'])
|
||||
|
||||
print(sri_hash, path)
|
||||
return TarballPinSerialized(kind='tarball',
|
||||
nar_hash=sri_hash,
|
||||
locked_url=link_info.url if link_info else url,
|
||||
rev=link_info.rev if link_info else None,
|
||||
url=url)
|
||||
|
||||
|
||||
def lock_git(url, branch) -> GitPinSerialized:
|
||||
url_escaped = json.dumps(url)
|
||||
ref_escaped = json.dumps(branch)
|
||||
data = json.loads(
|
||||
subprocess.check_output([
|
||||
"nix", "eval", "--impure", "--json", "--expr",
|
||||
f"builtins.removeAttrs (builtins.fetchGit {{ url = {url_escaped}; ref = {ref_escaped}; }}) [ \"outPath\" ]"
|
||||
]).strip())
|
||||
return GitPinSerialized(kind='git',
|
||||
url=url,
|
||||
rev=data['rev'],
|
||||
ref=branch,
|
||||
nar_hash=data['narHash'])
|
||||
|
||||
|
||||
PINS = {
|
||||
'nix-eval-jobs':
|
||||
TarballPinSpec('https://git.lix.systems/lix-project/nix-eval-jobs/archive/main.tar.gz')
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
output = {}
|
||||
for (name, pin) in PINS.items():
|
||||
output[name] = pin.do_pin()
|
||||
|
||||
print(output)
|
||||
with open('pins.json', 'w') as fh:
|
||||
json.dump(output, fh, cls=DataclassJSONEncoder)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in a new issue