2019-04-08 18:28:05 +03:00
|
|
|
{
|
|
|
|
description = "The purely functional package manager";
|
|
|
|
|
2019-08-30 14:06:48 +03:00
|
|
|
edition = 201909;
|
2019-04-08 18:28:05 +03:00
|
|
|
|
2020-02-18 23:11:52 +02:00
|
|
|
inputs.nixpkgs.uri = "nixpkgs/release-19.09";
|
2019-04-08 18:28:05 +03:00
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
outputs = { self, nixpkgs }:
|
2019-04-08 18:28:05 +03:00
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
let
|
2019-05-29 18:25:41 +03:00
|
|
|
|
2020-03-13 19:28:01 +02:00
|
|
|
version =
|
|
|
|
builtins.readFile ./.version
|
|
|
|
+ (if officialRelease
|
|
|
|
then ""
|
|
|
|
else "pre${builtins.substring 0 8 self.lastModified}_${self.shortRev or "dirty"}");
|
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
officialRelease = false;
|
2019-04-08 18:28:05 +03:00
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
systems = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ];
|
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 18:52:10 +03:00
|
|
|
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system);
|
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
# Memoize nixpkgs for different platforms for efficiency.
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 18:52:10 +03:00
|
|
|
nixpkgsFor = forAllSystems (system:
|
2019-10-04 11:45:33 +03:00
|
|
|
import nixpkgs {
|
|
|
|
inherit system;
|
|
|
|
overlays = [ self.overlay ];
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
commonDeps = pkgs: with pkgs; rec {
|
|
|
|
# Use "busybox-sandbox-shell" if present,
|
|
|
|
# if not (legacy) fallback and hope it's sufficient.
|
|
|
|
sh = pkgs.busybox-sandbox-shell or (busybox.override {
|
|
|
|
useMusl = true;
|
|
|
|
enableStatic = true;
|
|
|
|
enableMinimal = true;
|
|
|
|
extraConfig = ''
|
|
|
|
CONFIG_FEATURE_FANCY_ECHO y
|
|
|
|
CONFIG_FEATURE_SH_MATH y
|
|
|
|
CONFIG_FEATURE_SH_MATH_64 y
|
|
|
|
|
|
|
|
CONFIG_ASH y
|
|
|
|
CONFIG_ASH_OPTIMIZE_FOR_SIZE y
|
|
|
|
|
|
|
|
CONFIG_ASH_ALIAS y
|
|
|
|
CONFIG_ASH_BASH_COMPAT y
|
|
|
|
CONFIG_ASH_CMDCMD y
|
|
|
|
CONFIG_ASH_ECHO y
|
|
|
|
CONFIG_ASH_GETOPTS y
|
|
|
|
CONFIG_ASH_INTERNAL_GLOB y
|
|
|
|
CONFIG_ASH_JOB_CONTROL y
|
|
|
|
CONFIG_ASH_PRINTF y
|
|
|
|
CONFIG_ASH_TEST y
|
|
|
|
'';
|
|
|
|
});
|
|
|
|
|
|
|
|
configureFlags =
|
2019-11-06 11:44:21 +02:00
|
|
|
lib.optionals stdenv.isLinux [
|
2019-10-04 11:45:33 +03:00
|
|
|
"--with-sandbox-shell=${sh}/bin/busybox"
|
|
|
|
];
|
|
|
|
|
2020-03-13 19:28:01 +02:00
|
|
|
buildDeps =
|
2019-10-04 11:45:33 +03:00
|
|
|
[ bison
|
|
|
|
flex
|
|
|
|
libxml2
|
|
|
|
libxslt
|
|
|
|
docbook5
|
|
|
|
docbook_xsl_ns
|
|
|
|
autoconf-archive
|
|
|
|
autoreconfHook
|
|
|
|
|
2020-03-13 19:28:01 +02:00
|
|
|
curl
|
2019-12-16 21:17:21 +02:00
|
|
|
bzip2 xz brotli zlib editline
|
2020-02-15 22:48:28 +02:00
|
|
|
openssl pkgconfig sqlite
|
2019-12-20 13:45:58 +02:00
|
|
|
libarchive
|
2019-10-04 11:45:33 +03:00
|
|
|
boost
|
2020-02-18 23:11:52 +02:00
|
|
|
(nlohmann_json.override { multipleHeaders = true; })
|
2019-12-04 01:31:09 +02:00
|
|
|
rustc cargo
|
2019-10-04 11:45:33 +03:00
|
|
|
|
|
|
|
# Tests
|
|
|
|
git
|
|
|
|
mercurial
|
|
|
|
jq
|
|
|
|
]
|
|
|
|
++ lib.optionals stdenv.isLinux [libseccomp utillinuxMinimal]
|
|
|
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
|
|
|
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin)
|
|
|
|
(aws-sdk-cpp.override {
|
|
|
|
apis = ["s3" "transfer"];
|
|
|
|
customMemoryManagement = false;
|
|
|
|
});
|
|
|
|
|
2020-02-15 22:48:28 +02:00
|
|
|
propagatedDeps =
|
|
|
|
[ (boehmgc.override { enableLargeConfig = true; })
|
|
|
|
];
|
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
perlDeps =
|
|
|
|
[ perl
|
|
|
|
perlPackages.DBDSQLite
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
|
|
|
in {
|
|
|
|
|
2019-10-04 18:25:59 +03:00
|
|
|
# A Nixpkgs overlay that overrides the 'nix' and
|
|
|
|
# 'nix.perl-bindings' packages.
|
2019-10-04 11:45:33 +03:00
|
|
|
overlay = final: prev: {
|
|
|
|
|
2020-03-13 19:28:01 +02:00
|
|
|
nix = with final; with commonDeps pkgs; (stdenv.mkDerivation {
|
|
|
|
name = "nix-${version}";
|
|
|
|
|
|
|
|
src = self;
|
2019-10-04 11:45:33 +03:00
|
|
|
|
2020-03-13 19:28:01 +02:00
|
|
|
outputs = [ "out" "dev" "doc" ];
|
2019-10-07 15:02:52 +03:00
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
buildInputs = buildDeps;
|
|
|
|
|
2020-02-15 22:48:28 +02:00
|
|
|
propagatedBuildInputs = propagatedDeps;
|
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
preConfigure =
|
|
|
|
''
|
2020-03-13 19:28:01 +02:00
|
|
|
# Copy libboost_context so we don't get all of Boost in our closure.
|
|
|
|
# https://github.com/NixOS/nixpkgs/issues/45462
|
2019-10-04 11:45:33 +03:00
|
|
|
mkdir -p $out/lib
|
|
|
|
cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
|
|
|
|
rm -f $out/lib/*.a
|
|
|
|
${lib.optionalString stdenv.isLinux ''
|
|
|
|
chmod u+w $out/lib/*.so.*
|
|
|
|
patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
|
|
|
|
''}
|
2020-03-13 19:28:01 +02:00
|
|
|
|
|
|
|
ln -sfn ${self.hydraJobs.vendoredCrates}/vendor/ nix-rust/vendor
|
|
|
|
|
|
|
|
(cd perl; autoreconf --install --force --verbose)
|
2019-10-04 11:45:33 +03:00
|
|
|
'';
|
|
|
|
|
|
|
|
configureFlags = configureFlags ++
|
|
|
|
[ "--sysconfdir=/etc" ];
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
makeFlags = "profiledir=$(out)/etc/profile.d";
|
|
|
|
|
2020-03-13 19:28:01 +02:00
|
|
|
doCheck = true;
|
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
installFlags = "sysconfdir=$(out)/etc";
|
|
|
|
|
|
|
|
doInstallCheck = true;
|
|
|
|
installCheckFlags = "sysconfdir=$(out)/etc";
|
2020-02-15 22:30:26 +02:00
|
|
|
|
|
|
|
separateDebugInfo = true;
|
2020-03-13 19:28:01 +02:00
|
|
|
|
|
|
|
preDist = ''
|
|
|
|
mkdir -p $doc/nix-support
|
|
|
|
echo "doc manual $doc/share/doc/nix/manual" >> $doc/nix-support/hydra-build-products
|
|
|
|
'';
|
2019-10-04 18:25:59 +03:00
|
|
|
}) // {
|
2019-10-04 11:45:33 +03:00
|
|
|
|
2020-03-13 19:28:01 +02:00
|
|
|
perl-bindings = with final; stdenv.mkDerivation {
|
|
|
|
name = "nix-perl-${version}";
|
|
|
|
|
|
|
|
src = self;
|
2019-10-04 11:45:33 +03:00
|
|
|
|
2019-10-04 18:25:59 +03:00
|
|
|
buildInputs =
|
2020-03-13 19:28:01 +02:00
|
|
|
[ autoconf-archive
|
|
|
|
autoreconfHook
|
|
|
|
nix
|
|
|
|
curl
|
|
|
|
bzip2
|
|
|
|
xz
|
|
|
|
pkgconfig
|
|
|
|
pkgs.perl
|
|
|
|
boost
|
|
|
|
]
|
2019-10-04 18:25:59 +03:00
|
|
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium;
|
2019-10-04 11:45:33 +03:00
|
|
|
|
2019-10-04 18:25:59 +03:00
|
|
|
configureFlags = ''
|
|
|
|
--with-dbi=${perlPackages.DBI}/${pkgs.perl.libPrefix}
|
|
|
|
--with-dbd-sqlite=${perlPackages.DBDSQLite}/${pkgs.perl.libPrefix}
|
|
|
|
'';
|
2019-10-04 11:45:33 +03:00
|
|
|
|
2019-10-04 18:25:59 +03:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
postUnpack = "sourceRoot=$sourceRoot/perl";
|
|
|
|
};
|
2019-10-04 11:45:33 +03:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
hydraJobs = {
|
|
|
|
|
2019-12-04 01:31:09 +02:00
|
|
|
# Create a "vendor" directory that contains the crates listed in
|
|
|
|
# Cargo.lock, and include it in the Nix tarball. This allows Nix
|
|
|
|
# to be built without network access.
|
|
|
|
vendoredCrates =
|
|
|
|
with nixpkgsFor.x86_64-linux;
|
|
|
|
|
|
|
|
let
|
|
|
|
lockFile = builtins.fromTOML (builtins.readFile nix-rust/Cargo.lock);
|
|
|
|
|
|
|
|
files = map (pkg: import <nix/fetchurl.nix> {
|
|
|
|
url = "https://crates.io/api/v1/crates/${pkg.name}/${pkg.version}/download";
|
|
|
|
sha256 = lockFile.metadata."checksum ${pkg.name} ${pkg.version} (registry+https://github.com/rust-lang/crates.io-index)";
|
|
|
|
}) (builtins.filter (pkg: pkg.source or "" == "registry+https://github.com/rust-lang/crates.io-index") lockFile.package);
|
|
|
|
|
|
|
|
in pkgs.runCommand "cargo-vendor-dir" {}
|
|
|
|
''
|
|
|
|
mkdir -p $out/vendor
|
|
|
|
|
|
|
|
cat > $out/vendor/config <<EOF
|
|
|
|
[source.crates-io]
|
|
|
|
replace-with = "vendored-sources"
|
|
|
|
|
|
|
|
[source.vendored-sources]
|
|
|
|
directory = "vendor"
|
|
|
|
EOF
|
|
|
|
|
|
|
|
${toString (builtins.map (file: ''
|
|
|
|
mkdir $out/vendor/tmp
|
|
|
|
tar xvf ${file} -C $out/vendor/tmp
|
|
|
|
dir=$(echo $out/vendor/tmp/*)
|
|
|
|
|
|
|
|
# Add just enough metadata to keep Cargo happy.
|
|
|
|
printf '{"files":{},"package":"${file.outputHash}"}' > "$dir/.cargo-checksum.json"
|
|
|
|
|
|
|
|
# Clean up some cruft from the winapi crates. FIXME: find
|
|
|
|
# a way to remove winapi* from our dependencies.
|
|
|
|
if [[ $dir =~ /winapi ]]; then
|
|
|
|
find $dir -name "*.a" -print0 | xargs -0 rm -f --
|
|
|
|
fi
|
|
|
|
|
|
|
|
mv "$dir" $out/vendor/
|
|
|
|
|
|
|
|
rm -rf $out/vendor/tmp
|
|
|
|
'') files)}
|
|
|
|
'';
|
|
|
|
|
2019-10-04 11:45:33 +03:00
|
|
|
# Binary package for various platforms.
|
|
|
|
build = nixpkgs.lib.genAttrs systems (system: nixpkgsFor.${system}.nix);
|
|
|
|
|
|
|
|
# Perl bindings for various platforms.
|
2019-10-04 18:25:59 +03:00
|
|
|
perlBindings = nixpkgs.lib.genAttrs systems (system: nixpkgsFor.${system}.nix.perl-bindings);
|
2019-10-04 11:45:33 +03:00
|
|
|
|
|
|
|
# Binary tarball for various platforms, containing a Nix store
|
|
|
|
# with the closure of 'nix' package, and the second half of
|
|
|
|
# the installation script.
|
|
|
|
binaryTarball = nixpkgs.lib.genAttrs systems (system:
|
|
|
|
|
|
|
|
with nixpkgsFor.${system};
|
|
|
|
|
|
|
|
let
|
|
|
|
installerClosureInfo = closureInfo { rootPaths = [ nix cacert ]; };
|
|
|
|
in
|
|
|
|
|
|
|
|
runCommand "nix-binary-tarball-${version}"
|
2019-11-06 11:44:21 +02:00
|
|
|
{ #nativeBuildInputs = lib.optional (system != "aarch64-linux") shellcheck;
|
2019-10-04 11:45:33 +03:00
|
|
|
meta.description = "Distribution-independent Nix bootstrap binaries for ${system}";
|
|
|
|
}
|
|
|
|
''
|
|
|
|
cp ${installerClosureInfo}/registration $TMPDIR/reginfo
|
|
|
|
substitute ${./scripts/install-nix-from-closure.sh} $TMPDIR/install \
|
|
|
|
--subst-var-by nix ${nix} \
|
|
|
|
--subst-var-by cacert ${cacert}
|
|
|
|
|
|
|
|
substitute ${./scripts/install-darwin-multi-user.sh} $TMPDIR/install-darwin-multi-user.sh \
|
|
|
|
--subst-var-by nix ${nix} \
|
|
|
|
--subst-var-by cacert ${cacert}
|
|
|
|
substitute ${./scripts/install-systemd-multi-user.sh} $TMPDIR/install-systemd-multi-user.sh \
|
|
|
|
--subst-var-by nix ${nix} \
|
|
|
|
--subst-var-by cacert ${cacert}
|
|
|
|
substitute ${./scripts/install-multi-user.sh} $TMPDIR/install-multi-user \
|
|
|
|
--subst-var-by nix ${nix} \
|
|
|
|
--subst-var-by cacert ${cacert}
|
|
|
|
|
|
|
|
if type -p shellcheck; then
|
|
|
|
# SC1090: Don't worry about not being able to find
|
|
|
|
# $nix/etc/profile.d/nix.sh
|
|
|
|
shellcheck --exclude SC1090 $TMPDIR/install
|
|
|
|
shellcheck $TMPDIR/install-darwin-multi-user.sh
|
|
|
|
shellcheck $TMPDIR/install-systemd-multi-user.sh
|
|
|
|
|
|
|
|
# SC1091: Don't panic about not being able to source
|
|
|
|
# /etc/profile
|
|
|
|
# SC2002: Ignore "useless cat" "error", when loading
|
|
|
|
# .reginfo, as the cat is a much cleaner
|
|
|
|
# implementation, even though it is "useless"
|
|
|
|
# SC2116: Allow ROOT_HOME=$(echo ~root) for resolving
|
|
|
|
# root's home directory
|
|
|
|
shellcheck --external-sources \
|
|
|
|
--exclude SC1091,SC2002,SC2116 $TMPDIR/install-multi-user
|
|
|
|
fi
|
|
|
|
|
|
|
|
chmod +x $TMPDIR/install
|
|
|
|
chmod +x $TMPDIR/install-darwin-multi-user.sh
|
|
|
|
chmod +x $TMPDIR/install-systemd-multi-user.sh
|
|
|
|
chmod +x $TMPDIR/install-multi-user
|
|
|
|
dir=nix-${version}-${system}
|
|
|
|
fn=$out/$dir.tar.xz
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
echo "file binary-dist $fn" >> $out/nix-support/hydra-build-products
|
|
|
|
tar cvfJ $fn \
|
|
|
|
--owner=0 --group=0 --mode=u+rw,uga+r \
|
|
|
|
--absolute-names \
|
|
|
|
--hard-dereference \
|
|
|
|
--transform "s,$TMPDIR/install,$dir/install," \
|
|
|
|
--transform "s,$TMPDIR/reginfo,$dir/.reginfo," \
|
|
|
|
--transform "s,$NIX_STORE,$dir/store,S" \
|
|
|
|
$TMPDIR/install $TMPDIR/install-darwin-multi-user.sh \
|
|
|
|
$TMPDIR/install-systemd-multi-user.sh \
|
|
|
|
$TMPDIR/install-multi-user $TMPDIR/reginfo \
|
|
|
|
$(cat ${installerClosureInfo}/store-paths)
|
|
|
|
'');
|
|
|
|
|
|
|
|
# The first half of the installation script. This is uploaded
|
|
|
|
# to https://nixos.org/nix/install. It downloads the binary
|
|
|
|
# tarball for the user's system and calls the second half of the
|
|
|
|
# installation script.
|
|
|
|
installerScript =
|
|
|
|
with nixpkgsFor.x86_64-linux;
|
|
|
|
runCommand "installer-script"
|
|
|
|
{ buildInputs = [ nix ];
|
|
|
|
}
|
|
|
|
''
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
|
|
|
|
substitute ${./scripts/install.in} $out/install \
|
|
|
|
${pkgs.lib.concatMapStrings
|
2019-11-08 15:29:10 +02:00
|
|
|
(system: "--replace '@binaryTarball_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) ")
|
2019-10-04 11:45:33 +03:00
|
|
|
[ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
|
|
|
|
} \
|
2020-03-13 19:28:01 +02:00
|
|
|
--replace '@nixVersion@' ${version}
|
2019-10-04 11:45:33 +03:00
|
|
|
|
|
|
|
echo "file installer $out/install" >> $out/nix-support/hydra-build-products
|
|
|
|
'';
|
|
|
|
|
|
|
|
# Line coverage analysis.
|
|
|
|
coverage =
|
|
|
|
with nixpkgsFor.x86_64-linux;
|
|
|
|
with commonDeps pkgs;
|
|
|
|
|
|
|
|
releaseTools.coverageAnalysis {
|
2020-03-13 19:28:01 +02:00
|
|
|
name = "nix-coverage-${version}";
|
|
|
|
|
|
|
|
src = self;
|
2019-10-04 11:45:33 +03:00
|
|
|
|
2020-01-21 22:18:52 +02:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2020-02-15 22:48:28 +02:00
|
|
|
buildInputs = buildDeps ++ propagatedDeps;
|
2019-10-04 11:45:33 +03:00
|
|
|
|
|
|
|
dontInstall = false;
|
|
|
|
|
|
|
|
doInstallCheck = true;
|
|
|
|
|
2019-11-08 15:29:10 +02:00
|
|
|
lcovFilter = [ "*/boost/*" "*-tab.*" ];
|
2019-10-04 11:45:33 +03:00
|
|
|
|
|
|
|
# We call `dot', and even though we just use it to
|
|
|
|
# syntax-check generated dot files, it still requires some
|
|
|
|
# fonts. So provide those.
|
|
|
|
FONTCONFIG_FILE = texFunctions.fontsConf;
|
2020-01-21 22:18:52 +02:00
|
|
|
|
|
|
|
# To test building without precompiled headers.
|
|
|
|
makeFlagsArray = [ "PRECOMPILE_HEADERS=0" ];
|
2019-10-04 11:45:33 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
# System tests.
|
|
|
|
tests.remoteBuilds = import ./tests/remote-builds.nix {
|
|
|
|
system = "x86_64-linux";
|
|
|
|
inherit nixpkgs;
|
|
|
|
inherit (self) overlay;
|
|
|
|
};
|
|
|
|
|
|
|
|
tests.nix-copy-closure = import ./tests/nix-copy-closure.nix {
|
|
|
|
system = "x86_64-linux";
|
|
|
|
inherit nixpkgs;
|
|
|
|
inherit (self) overlay;
|
|
|
|
};
|
|
|
|
|
|
|
|
tests.githubFlakes = (import ./tests/github-flakes.nix rec {
|
|
|
|
system = "x86_64-linux";
|
|
|
|
inherit nixpkgs;
|
|
|
|
inherit (self) overlay;
|
|
|
|
});
|
|
|
|
|
|
|
|
tests.setuid = nixpkgs.lib.genAttrs
|
|
|
|
["i686-linux" "x86_64-linux"]
|
|
|
|
(system:
|
|
|
|
import ./tests/setuid.nix rec {
|
|
|
|
inherit nixpkgs system;
|
|
|
|
inherit (self) overlay;
|
|
|
|
});
|
|
|
|
|
|
|
|
# Test whether the binary tarball works in an Ubuntu system.
|
|
|
|
tests.binaryTarball =
|
|
|
|
with nixpkgsFor.x86_64-linux;
|
|
|
|
vmTools.runInLinuxImage (runCommand "nix-binary-tarball-test"
|
|
|
|
{ diskImage = vmTools.diskImages.ubuntu1204x86_64;
|
|
|
|
}
|
|
|
|
''
|
|
|
|
set -x
|
|
|
|
useradd -m alice
|
|
|
|
su - alice -c 'tar xf ${self.hydraJobs.binaryTarball.x86_64-linux}/*.tar.*'
|
|
|
|
mkdir /dest-nix
|
|
|
|
mount -o bind /dest-nix /nix # Provide a writable /nix.
|
|
|
|
chown alice /nix
|
|
|
|
su - alice -c '_NIX_INSTALLER_TEST=1 ./nix-*/install'
|
|
|
|
su - alice -c 'nix-store --verify'
|
|
|
|
su - alice -c 'PAGER= nix-store -qR ${self.hydraJobs.build.x86_64-linux}'
|
|
|
|
|
|
|
|
# Check whether 'nix upgrade-nix' works.
|
|
|
|
cat > /tmp/paths.nix <<EOF
|
|
|
|
{
|
|
|
|
x86_64-linux = "${self.hydraJobs.build.x86_64-linux}";
|
|
|
|
}
|
|
|
|
EOF
|
2019-11-06 11:44:21 +02:00
|
|
|
su - alice -c 'nix --experimental-features nix-command upgrade-nix -vvv --nix-store-paths-url file:///tmp/paths.nix'
|
2019-10-04 11:45:33 +03:00
|
|
|
(! [ -L /home/alice/.profile-1-link ])
|
|
|
|
su - alice -c 'PAGER= nix-store -qR ${self.hydraJobs.build.x86_64-linux}'
|
|
|
|
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
touch $out/nix-support/hydra-build-products
|
|
|
|
umount /nix
|
|
|
|
'');
|
|
|
|
|
2019-11-06 11:44:21 +02:00
|
|
|
/*
|
2019-10-04 11:45:33 +03:00
|
|
|
# Check whether we can still evaluate all of Nixpkgs.
|
|
|
|
tests.evalNixpkgs =
|
|
|
|
import (nixpkgs + "/pkgs/top-level/make-tarball.nix") {
|
|
|
|
# FIXME: fix pkgs/top-level/make-tarball.nix in NixOS to not require a revCount.
|
|
|
|
inherit nixpkgs;
|
|
|
|
pkgs = nixpkgsFor.x86_64-linux;
|
|
|
|
officialRelease = false;
|
|
|
|
};
|
|
|
|
|
|
|
|
# Check whether we can still evaluate NixOS.
|
|
|
|
tests.evalNixOS =
|
|
|
|
with nixpkgsFor.x86_64-linux;
|
|
|
|
runCommand "eval-nixos" { buildInputs = [ nix ]; }
|
|
|
|
''
|
|
|
|
export NIX_STATE_DIR=$TMPDIR
|
|
|
|
|
|
|
|
nix-instantiate ${nixpkgs}/nixos/release-combined.nix -A tested --dry-run \
|
|
|
|
--arg nixpkgs '{ outPath = ${nixpkgs}; revCount = 123; shortRev = "abcdefgh"; }'
|
|
|
|
|
|
|
|
touch $out
|
|
|
|
'';
|
2019-11-07 12:44:02 +02:00
|
|
|
*/
|
2019-10-04 11:45:33 +03:00
|
|
|
|
|
|
|
# Aggregate job containing the release-critical jobs.
|
|
|
|
release =
|
|
|
|
with self.hydraJobs;
|
|
|
|
nixpkgsFor.x86_64-linux.releaseTools.aggregate {
|
2020-03-13 19:28:01 +02:00
|
|
|
name = "nix-${version}";
|
2019-10-04 11:45:33 +03:00
|
|
|
meta.description = "Release-critical builds";
|
|
|
|
constituents =
|
2020-03-13 19:28:01 +02:00
|
|
|
[ "build.i686-linux"
|
2020-02-17 16:53:59 +02:00
|
|
|
"build.x86_64-darwin"
|
|
|
|
"build.x86_64-linux"
|
|
|
|
"build.aarch64-linux"
|
|
|
|
"binaryTarball.i686-linux"
|
|
|
|
"binaryTarball.x86_64-darwin"
|
|
|
|
"binaryTarball.x86_64-linux"
|
|
|
|
"binaryTarball.aarch64-linux"
|
|
|
|
"tests.remoteBuilds"
|
|
|
|
"tests.nix-copy-closure"
|
|
|
|
"tests.binaryTarball"
|
|
|
|
#"tests.evalNixpkgs"
|
|
|
|
#"tests.evalNixOS"
|
|
|
|
"installerScript"
|
2019-10-04 11:45:33 +03:00
|
|
|
];
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 18:52:10 +03:00
|
|
|
checks = forAllSystems (system: {
|
|
|
|
binaryTarball = self.hydraJobs.binaryTarball.${system};
|
|
|
|
perlBindings = self.hydraJobs.perlBindings.${system};
|
|
|
|
});
|
2019-10-04 11:45:33 +03:00
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 18:52:10 +03:00
|
|
|
packages = forAllSystems (system: {
|
|
|
|
inherit (nixpkgsFor.${system}) nix;
|
|
|
|
});
|
2019-10-04 11:45:33 +03:00
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 18:52:10 +03:00
|
|
|
defaultPackage = forAllSystems (system: self.packages.${system}.nix);
|
2019-10-04 11:45:33 +03:00
|
|
|
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 18:52:10 +03:00
|
|
|
devShell = forAllSystems (system:
|
|
|
|
with nixpkgsFor.${system};
|
2019-10-04 11:45:33 +03:00
|
|
|
with commonDeps pkgs;
|
|
|
|
|
|
|
|
stdenv.mkDerivation {
|
|
|
|
name = "nix";
|
|
|
|
|
2020-03-13 19:28:01 +02:00
|
|
|
buildInputs = buildDeps ++ propagatedDeps ++ perlDeps ++ [ pkgs.rustfmt ];
|
2019-10-04 11:45:33 +03:00
|
|
|
|
|
|
|
inherit configureFlags;
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
installFlags = "sysconfdir=$(out)/etc";
|
|
|
|
|
|
|
|
shellHook =
|
|
|
|
''
|
|
|
|
export prefix=$(pwd)/inst
|
|
|
|
configureFlags+=" --prefix=$prefix"
|
|
|
|
PKG_CONFIG_PATH=$prefix/lib/pkgconfig:$PKG_CONFIG_PATH
|
|
|
|
PATH=$prefix/bin:$PATH
|
|
|
|
unset PYTHONPATH
|
|
|
|
'';
|
Support non-x86_64-linux system types in flakes
A command like
$ nix run nixpkgs#hello
will now build the attribute 'packages.${system}.hello' rather than
'packages.hello'. Note that this does mean that the flake needs to
export an attribute for every system type it supports, and you can't
build on unsupported systems. So 'packages' typically looks like this:
packages = nixpkgs.lib.genAttrs ["x86_64-linux" "i686-linux"] (system: {
hello = ...;
});
The 'checks', 'defaultPackage', 'devShell', 'apps' and 'defaultApp'
outputs similarly are now attrsets that map system types to
derivations/apps. 'nix flake check' checks that the derivations for
all platforms evaluate correctly, but only builds the derivations in
'checks.${system}'.
Fixes #2861. (That issue also talks about access to ~/.config/nixpkgs
and --arg, but I think it's reasonable to say that flakes shouldn't
support those.)
The alternative to attribute selection is to pass the system type as
an argument to the flake's 'outputs' function, e.g. 'outputs = { self,
nixpkgs, system }: ...'. However, that approach would be at odds with
hermetic evaluation and make it impossible to enumerate the packages
provided by a flake.
2019-10-15 18:52:10 +03:00
|
|
|
});
|
2019-05-02 22:10:13 +03:00
|
|
|
|
2019-04-08 18:28:05 +03:00
|
|
|
};
|
|
|
|
}
|