forked from lix-project/lix
Merge release.nix, shell.nix and release-common.nix into flake.nix
Also provide a Nixpkgs overlay, memoize Nixpkgs evaluation and fit the githubFlakes test.
This commit is contained in:
parent
90d6018509
commit
204291f059
|
@ -2,9 +2,9 @@
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"inputs": {},
|
"inputs": {},
|
||||||
"narHash": "sha256-HGlE2VNbdEjCP76hWAS72kHBlMWhpvqWo58Obg1Vy6s=",
|
"narHash": "sha256-ltGlDPfwicH/u4orj1n4JXgRsA+jvKQsGnekObi0TV4=",
|
||||||
"originalUri": "nixpkgs",
|
"originalUri": "nixpkgs/release-19.03",
|
||||||
"uri": "github:edolstra/nixpkgs/13e1bce51f4aebdf3db58ce8c4a93e904a272bff"
|
"uri": "github:edolstra/nixpkgs/9a593b575e4044f9aff939b512e7cb1cf1e76a65"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"version": 3
|
"version": 3
|
||||||
|
|
468
flake.nix
468
flake.nix
|
@ -3,27 +3,461 @@
|
||||||
|
|
||||||
edition = 201909;
|
edition = 201909;
|
||||||
|
|
||||||
outputs = { self, nixpkgs }: rec {
|
inputs.nixpkgs.uri = "nixpkgs/release-19.03";
|
||||||
|
|
||||||
hydraJobs = import ./release.nix {
|
outputs = { self, nixpkgs }:
|
||||||
nix = self;
|
|
||||||
nixpkgs = nixpkgs;
|
|
||||||
};
|
|
||||||
|
|
||||||
checks = {
|
let
|
||||||
binaryTarball = hydraJobs.binaryTarball.x86_64-linux;
|
|
||||||
perlBindings = hydraJobs.perlBindings.x86_64-linux;
|
|
||||||
};
|
|
||||||
|
|
||||||
packages = {
|
officialRelease = false;
|
||||||
nix = hydraJobs.build.x86_64-linux;
|
|
||||||
nix-perl-bindings = hydraJobs.perlBindings.x86_64-linux;
|
|
||||||
};
|
|
||||||
|
|
||||||
defaultPackage = packages.nix;
|
systems = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ];
|
||||||
|
|
||||||
|
# Memoize nixpkgs for different platforms for efficiency.
|
||||||
|
nixpkgsFor = nixpkgs.lib.genAttrs systems (system:
|
||||||
|
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 =
|
||||||
|
[
|
||||||
|
"--enable-gc"
|
||||||
|
] ++ lib.optionals stdenv.isLinux [
|
||||||
|
"--with-sandbox-shell=${sh}/bin/busybox"
|
||||||
|
];
|
||||||
|
|
||||||
|
tarballDeps =
|
||||||
|
[ bison
|
||||||
|
flex
|
||||||
|
libxml2
|
||||||
|
libxslt
|
||||||
|
docbook5
|
||||||
|
docbook_xsl_ns
|
||||||
|
autoconf-archive
|
||||||
|
autoreconfHook
|
||||||
|
];
|
||||||
|
|
||||||
|
buildDeps =
|
||||||
|
[ curl
|
||||||
|
bzip2 xz brotli editline
|
||||||
|
openssl pkgconfig sqlite boehmgc
|
||||||
|
boost
|
||||||
|
|
||||||
|
# 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;
|
||||||
|
});
|
||||||
|
|
||||||
|
perlDeps =
|
||||||
|
[ perl
|
||||||
|
perlPackages.DBDSQLite
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
# A Nixpkgs overlay that overrides the 'nix' and 'nix-perl'
|
||||||
|
# packages.
|
||||||
|
overlay = final: prev: {
|
||||||
|
|
||||||
|
nix = with final; with commonDeps pkgs; releaseTools.nixBuild {
|
||||||
|
name = "nix";
|
||||||
|
src = self.hydraJobs.tarball;
|
||||||
|
|
||||||
|
buildInputs = buildDeps;
|
||||||
|
|
||||||
|
preConfigure =
|
||||||
|
# Copy libboost_context so we don't get all of Boost in our closure.
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/45462
|
||||||
|
''
|
||||||
|
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.*
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
|
||||||
|
configureFlags = configureFlags ++
|
||||||
|
[ "--sysconfdir=/etc" ];
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
makeFlags = "profiledir=$(out)/etc/profile.d";
|
||||||
|
|
||||||
|
installFlags = "sysconfdir=$(out)/etc";
|
||||||
|
|
||||||
|
doInstallCheck = true;
|
||||||
|
installCheckFlags = "sysconfdir=$(out)/etc";
|
||||||
|
};
|
||||||
|
|
||||||
|
nix-perl = with final; releaseTools.nixBuild {
|
||||||
|
name = "nix-perl";
|
||||||
|
src = self.hydraJobs.tarball;
|
||||||
|
|
||||||
|
buildInputs =
|
||||||
|
[ nix curl bzip2 xz pkgconfig pkgs.perl boost ]
|
||||||
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium;
|
||||||
|
|
||||||
|
configureFlags = ''
|
||||||
|
--with-dbi=${perlPackages.DBI}/${pkgs.perl.libPrefix}
|
||||||
|
--with-dbd-sqlite=${perlPackages.DBDSQLite}/${pkgs.perl.libPrefix}
|
||||||
|
'';
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
postUnpack = "sourceRoot=$sourceRoot/perl";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
hydraJobs = {
|
||||||
|
|
||||||
|
# Source tarball.
|
||||||
|
tarball =
|
||||||
|
with nixpkgsFor.x86_64-linux;
|
||||||
|
with commonDeps pkgs;
|
||||||
|
|
||||||
|
releaseTools.sourceTarball {
|
||||||
|
name = "nix-tarball";
|
||||||
|
version = builtins.readFile ./.version;
|
||||||
|
versionSuffix = if officialRelease then "" else
|
||||||
|
"pre${builtins.substring 0 8 self.lastModified}_${self.shortRev}";
|
||||||
|
src = self;
|
||||||
|
inherit officialRelease;
|
||||||
|
|
||||||
|
buildInputs = tarballDeps ++ buildDeps;
|
||||||
|
|
||||||
|
configureFlags = "--enable-gc";
|
||||||
|
|
||||||
|
postUnpack = ''
|
||||||
|
(cd $sourceRoot && find . -type f) | cut -c3- > $sourceRoot/.dist-files
|
||||||
|
cat $sourceRoot/.dist-files
|
||||||
|
'';
|
||||||
|
|
||||||
|
preConfigure = ''
|
||||||
|
(cd perl ; autoreconf --install --force --verbose)
|
||||||
|
# TeX needs a writable font cache.
|
||||||
|
export VARTEXFONTS=$TMPDIR/texfonts
|
||||||
|
'';
|
||||||
|
|
||||||
|
distPhase =
|
||||||
|
''
|
||||||
|
runHook preDist
|
||||||
|
make dist
|
||||||
|
mkdir -p $out/tarballs
|
||||||
|
cp *.tar.* $out/tarballs
|
||||||
|
'';
|
||||||
|
|
||||||
|
preDist = ''
|
||||||
|
make install docdir=$out/share/doc/nix makefiles=doc/manual/local.mk
|
||||||
|
echo "doc manual $out/share/doc/nix/manual" >> $out/nix-support/hydra-build-products
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Binary package for various platforms.
|
||||||
|
build = nixpkgs.lib.genAttrs systems (system: nixpkgsFor.${system}.nix);
|
||||||
|
|
||||||
|
# Perl bindings for various platforms.
|
||||||
|
perlBindings = nixpkgs.lib.genAttrs systems (system: nixpkgsFor.${system}.nix-perl);
|
||||||
|
|
||||||
|
# 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
|
||||||
|
version = nix.src.version;
|
||||||
|
installerClosureInfo = closureInfo { rootPaths = [ nix cacert ]; };
|
||||||
|
in
|
||||||
|
|
||||||
|
runCommand "nix-binary-tarball-${version}"
|
||||||
|
{ nativeBuildInputs = lib.optional (system != "aarch64-linux") shellcheck;
|
||||||
|
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
|
||||||
|
(system: "--replace '@binaryTarball_${system}@' $(nix hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) ")
|
||||||
|
[ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
|
||||||
|
} \
|
||||||
|
--replace '@nixVersion@' ${nix.src.version}
|
||||||
|
|
||||||
|
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 {
|
||||||
|
name = "nix-build";
|
||||||
|
src = self.hydraJobs.tarball;
|
||||||
|
|
||||||
|
buildInputs = buildDeps;
|
||||||
|
|
||||||
|
dontInstall = false;
|
||||||
|
|
||||||
|
doInstallCheck = true;
|
||||||
|
|
||||||
|
lcovFilter = [ "*/boost/*" "*-tab.*" "*/nlohmann/*" "*/linenoise/*" ];
|
||||||
|
|
||||||
|
# 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;
|
||||||
|
};
|
||||||
|
|
||||||
|
# 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
|
||||||
|
su - alice -c 'nix upgrade-nix -vvv --nix-store-paths-url file:///tmp/paths.nix'
|
||||||
|
(! [ -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
|
||||||
|
'');
|
||||||
|
|
||||||
|
# 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
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Aggregate job containing the release-critical jobs.
|
||||||
|
release =
|
||||||
|
with self.hydraJobs;
|
||||||
|
nixpkgsFor.x86_64-linux.releaseTools.aggregate {
|
||||||
|
name = "nix-${tarball.version}";
|
||||||
|
meta.description = "Release-critical builds";
|
||||||
|
constituents =
|
||||||
|
[ tarball
|
||||||
|
build.i686-linux
|
||||||
|
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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
checks = {
|
||||||
|
binaryTarball = self.hydraJobs.binaryTarball.x86_64-linux;
|
||||||
|
perlBindings = self.hydraJobs.perlBindings.x86_64-linux;
|
||||||
|
};
|
||||||
|
|
||||||
|
packages = {
|
||||||
|
inherit (nixpkgsFor.x86_64-linux) nix nix-perl;
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultPackage = self.packages.nix;
|
||||||
|
|
||||||
|
devShell =
|
||||||
|
with nixpkgsFor.x86_64-linux;
|
||||||
|
with commonDeps pkgs;
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "nix";
|
||||||
|
|
||||||
|
buildInputs = buildDeps ++ tarballDeps ++ perlDeps;
|
||||||
|
|
||||||
|
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
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
devShell = import ./shell.nix {
|
|
||||||
inherit nixpkgs;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
{ 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 =
|
|
||||||
[
|
|
||||||
"--enable-gc"
|
|
||||||
] ++ lib.optionals stdenv.isLinux [
|
|
||||||
"--with-sandbox-shell=${sh}/bin/busybox"
|
|
||||||
];
|
|
||||||
|
|
||||||
tarballDeps =
|
|
||||||
[ bison
|
|
||||||
flex
|
|
||||||
libxml2
|
|
||||||
libxslt
|
|
||||||
docbook5
|
|
||||||
docbook_xsl_ns
|
|
||||||
autoconf-archive
|
|
||||||
autoreconfHook
|
|
||||||
];
|
|
||||||
|
|
||||||
buildDeps =
|
|
||||||
[ curl
|
|
||||||
bzip2 xz brotli editline
|
|
||||||
openssl pkgconfig sqlite boehmgc
|
|
||||||
boost
|
|
||||||
|
|
||||||
# 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;
|
|
||||||
}).overrideDerivation (args: {
|
|
||||||
/*
|
|
||||||
patches = args.patches or [] ++ [ (fetchpatch {
|
|
||||||
url = https://github.com/edolstra/aws-sdk-cpp/commit/3e07e1f1aae41b4c8b340735ff9e8c735f0c063f.patch;
|
|
||||||
sha256 = "1pij0v449p166f9l29x7ppzk8j7g9k9mp15ilh5qxp29c7fnvxy2";
|
|
||||||
}) ];
|
|
||||||
*/
|
|
||||||
}));
|
|
||||||
|
|
||||||
perlDeps =
|
|
||||||
[ perl
|
|
||||||
perlPackages.DBDSQLite
|
|
||||||
];
|
|
||||||
}
|
|
396
release.nix
396
release.nix
|
@ -1,396 +0,0 @@
|
||||||
{ nix ? builtins.fetchGit ./.
|
|
||||||
, nixpkgs ? builtins.fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.03.tar.gz
|
|
||||||
, officialRelease ? false
|
|
||||||
, systems ? [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
pkgs = import nixpkgs { system = builtins.currentSystem or "x86_64-linux"; };
|
|
||||||
|
|
||||||
jobs = rec {
|
|
||||||
|
|
||||||
|
|
||||||
tarball =
|
|
||||||
with pkgs;
|
|
||||||
|
|
||||||
with import ./release-common.nix { inherit pkgs; };
|
|
||||||
|
|
||||||
releaseTools.sourceTarball {
|
|
||||||
name = "nix-tarball";
|
|
||||||
version = builtins.readFile ./.version;
|
|
||||||
versionSuffix = if officialRelease then "" else
|
|
||||||
"pre${if nix ? lastModified then builtins.substring 0 8 nix.lastModified else toString nix.revCount or 0}_${nix.shortRev or "0000000"}";
|
|
||||||
src = nix;
|
|
||||||
inherit officialRelease;
|
|
||||||
|
|
||||||
buildInputs = tarballDeps ++ buildDeps;
|
|
||||||
|
|
||||||
configureFlags = "--enable-gc";
|
|
||||||
|
|
||||||
postUnpack = ''
|
|
||||||
(cd $sourceRoot && find . -type f) | cut -c3- > $sourceRoot/.dist-files
|
|
||||||
cat $sourceRoot/.dist-files
|
|
||||||
'';
|
|
||||||
|
|
||||||
preConfigure = ''
|
|
||||||
(cd perl ; autoreconf --install --force --verbose)
|
|
||||||
# TeX needs a writable font cache.
|
|
||||||
export VARTEXFONTS=$TMPDIR/texfonts
|
|
||||||
'';
|
|
||||||
|
|
||||||
distPhase =
|
|
||||||
''
|
|
||||||
runHook preDist
|
|
||||||
make dist
|
|
||||||
mkdir -p $out/tarballs
|
|
||||||
cp *.tar.* $out/tarballs
|
|
||||||
'';
|
|
||||||
|
|
||||||
preDist = ''
|
|
||||||
make install docdir=$out/share/doc/nix makefiles=doc/manual/local.mk
|
|
||||||
echo "doc manual $out/share/doc/nix/manual" >> $out/nix-support/hydra-build-products
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
build = pkgs.lib.genAttrs systems (system:
|
|
||||||
|
|
||||||
let pkgs = import nixpkgs { inherit system; }; in
|
|
||||||
|
|
||||||
with pkgs;
|
|
||||||
|
|
||||||
with import ./release-common.nix { inherit pkgs; };
|
|
||||||
|
|
||||||
releaseTools.nixBuild {
|
|
||||||
name = "nix";
|
|
||||||
src = tarball;
|
|
||||||
|
|
||||||
buildInputs = buildDeps;
|
|
||||||
|
|
||||||
preConfigure =
|
|
||||||
# Copy libboost_context so we don't get all of Boost in our closure.
|
|
||||||
# https://github.com/NixOS/nixpkgs/issues/45462
|
|
||||||
''
|
|
||||||
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.*
|
|
||||||
''}
|
|
||||||
'';
|
|
||||||
|
|
||||||
configureFlags = configureFlags ++
|
|
||||||
[ "--sysconfdir=/etc" ];
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
|
|
||||||
makeFlags = "profiledir=$(out)/etc/profile.d";
|
|
||||||
|
|
||||||
installFlags = "sysconfdir=$(out)/etc";
|
|
||||||
|
|
||||||
doInstallCheck = true;
|
|
||||||
installCheckFlags = "sysconfdir=$(out)/etc";
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
perlBindings = pkgs.lib.genAttrs systems (system:
|
|
||||||
|
|
||||||
let pkgs = import nixpkgs { inherit system; }; in with pkgs;
|
|
||||||
|
|
||||||
releaseTools.nixBuild {
|
|
||||||
name = "nix-perl";
|
|
||||||
src = tarball;
|
|
||||||
|
|
||||||
buildInputs =
|
|
||||||
[ jobs.build.${system} curl bzip2 xz pkgconfig pkgs.perl boost ]
|
|
||||||
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium;
|
|
||||||
|
|
||||||
configureFlags = ''
|
|
||||||
--with-dbi=${perlPackages.DBI}/${pkgs.perl.libPrefix}
|
|
||||||
--with-dbd-sqlite=${perlPackages.DBDSQLite}/${pkgs.perl.libPrefix}
|
|
||||||
'';
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
|
|
||||||
postUnpack = "sourceRoot=$sourceRoot/perl";
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
binaryTarball = pkgs.lib.genAttrs systems (system:
|
|
||||||
|
|
||||||
with import nixpkgs { inherit system; };
|
|
||||||
|
|
||||||
let
|
|
||||||
toplevel = builtins.getAttr system jobs.build;
|
|
||||||
version = toplevel.src.version;
|
|
||||||
installerClosureInfo = closureInfo { rootPaths = [ toplevel cacert ]; };
|
|
||||||
in
|
|
||||||
|
|
||||||
runCommand "nix-binary-tarball-${version}"
|
|
||||||
{ nativeBuildInputs = lib.optional (system != "aarch64-linux") shellcheck;
|
|
||||||
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 ${toplevel} \
|
|
||||||
--subst-var-by cacert ${cacert}
|
|
||||||
|
|
||||||
substitute ${./scripts/install-darwin-multi-user.sh} $TMPDIR/install-darwin-multi-user.sh \
|
|
||||||
--subst-var-by nix ${toplevel} \
|
|
||||||
--subst-var-by cacert ${cacert}
|
|
||||||
substitute ${./scripts/install-systemd-multi-user.sh} $TMPDIR/install-systemd-multi-user.sh \
|
|
||||||
--subst-var-by nix ${toplevel} \
|
|
||||||
--subst-var-by cacert ${cacert}
|
|
||||||
substitute ${./scripts/install-multi-user.sh} $TMPDIR/install-multi-user \
|
|
||||||
--subst-var-by nix ${toplevel} \
|
|
||||||
--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)
|
|
||||||
'');
|
|
||||||
|
|
||||||
|
|
||||||
coverage =
|
|
||||||
with pkgs;
|
|
||||||
|
|
||||||
with import ./release-common.nix { inherit pkgs; };
|
|
||||||
|
|
||||||
releaseTools.coverageAnalysis {
|
|
||||||
name = "nix-build";
|
|
||||||
src = tarball;
|
|
||||||
|
|
||||||
buildInputs = buildDeps;
|
|
||||||
|
|
||||||
dontInstall = false;
|
|
||||||
|
|
||||||
doInstallCheck = true;
|
|
||||||
|
|
||||||
lcovFilter = [ "*/boost/*" "*-tab.*" "*/nlohmann/*" "*/linenoise/*" ];
|
|
||||||
|
|
||||||
# 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;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#rpm_fedora27x86_64 = makeRPM_x86_64 (diskImageFunsFun: diskImageFunsFun.fedora27x86_64) [ ];
|
|
||||||
|
|
||||||
|
|
||||||
#deb_debian8i386 = makeDeb_i686 (diskImageFuns: diskImageFuns.debian8i386) [ "libsodium-dev" ] [ "libsodium13" ];
|
|
||||||
#deb_debian8x86_64 = makeDeb_x86_64 (diskImageFunsFun: diskImageFunsFun.debian8x86_64) [ "libsodium-dev" ] [ "libsodium13" ];
|
|
||||||
|
|
||||||
#deb_ubuntu1710i386 = makeDeb_i686 (diskImageFuns: diskImageFuns.ubuntu1710i386) [ ] [ "libsodium18" ];
|
|
||||||
#deb_ubuntu1710x86_64 = makeDeb_x86_64 (diskImageFuns: diskImageFuns.ubuntu1710x86_64) [ ] [ "libsodium18" "libboost-context1.62.0" ];
|
|
||||||
|
|
||||||
|
|
||||||
# System tests.
|
|
||||||
tests.remoteBuilds = (import ./tests/remote-builds.nix rec {
|
|
||||||
inherit nixpkgs;
|
|
||||||
nix = build.x86_64-linux; system = "x86_64-linux";
|
|
||||||
});
|
|
||||||
|
|
||||||
tests.nix-copy-closure = (import ./tests/nix-copy-closure.nix rec {
|
|
||||||
inherit nixpkgs;
|
|
||||||
nix = build.x86_64-linux; system = "x86_64-linux";
|
|
||||||
});
|
|
||||||
|
|
||||||
tests.githubFlakes = (import ./tests/github-flakes.nix rec {
|
|
||||||
inherit nixpkgs;
|
|
||||||
nix = build.x86_64-linux; system = "x86_64-linux";
|
|
||||||
});
|
|
||||||
|
|
||||||
tests.setuid = pkgs.lib.genAttrs
|
|
||||||
["i686-linux" "x86_64-linux"]
|
|
||||||
(system:
|
|
||||||
import ./tests/setuid.nix rec {
|
|
||||||
inherit nixpkgs;
|
|
||||||
nix = build.${system}; inherit system;
|
|
||||||
});
|
|
||||||
|
|
||||||
tests.binaryTarball =
|
|
||||||
with import nixpkgs { system = "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 ${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 ${build.x86_64-linux}'
|
|
||||||
|
|
||||||
# Check whether 'nix upgrade-nix' works.
|
|
||||||
cat > /tmp/paths.nix <<EOF
|
|
||||||
{
|
|
||||||
x86_64-linux = "${build.x86_64-linux}";
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
su - alice -c 'nix upgrade-nix -vvv --nix-store-paths-url file:///tmp/paths.nix'
|
|
||||||
(! [ -L /home/alice/.profile-1-link ])
|
|
||||||
su - alice -c 'PAGER= nix-store -qR ${build.x86_64-linux}'
|
|
||||||
|
|
||||||
mkdir -p $out/nix-support
|
|
||||||
touch $out/nix-support/hydra-build-products
|
|
||||||
umount /nix
|
|
||||||
''); # */
|
|
||||||
|
|
||||||
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.
|
|
||||||
nixpkgs = nixpkgs // { revCount = 0; };
|
|
||||||
inherit pkgs;
|
|
||||||
nix = build.x86_64-linux;
|
|
||||||
officialRelease = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
tests.evalNixOS =
|
|
||||||
pkgs.runCommand "eval-nixos" { buildInputs = [ build.x86_64-linux ]; }
|
|
||||||
''
|
|
||||||
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
|
|
||||||
'';
|
|
||||||
|
|
||||||
|
|
||||||
installerScript =
|
|
||||||
pkgs.runCommand "installer-script"
|
|
||||||
{ buildInputs = [ build.x86_64-linux ];
|
|
||||||
}
|
|
||||||
''
|
|
||||||
mkdir -p $out/nix-support
|
|
||||||
|
|
||||||
substitute ${./scripts/install.in} $out/install \
|
|
||||||
${pkgs.lib.concatMapStrings
|
|
||||||
(system: "--replace '@binaryTarball_${system}@' $(nix hash-file --base16 --type sha256 ${binaryTarball.${system}}/*.tar.xz) ")
|
|
||||||
[ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
|
|
||||||
} \
|
|
||||||
--replace '@nixVersion@' ${build.x86_64-linux.src.version}
|
|
||||||
|
|
||||||
echo "file installer $out/install" >> $out/nix-support/hydra-build-products
|
|
||||||
'';
|
|
||||||
|
|
||||||
|
|
||||||
# Aggregate job containing the release-critical jobs.
|
|
||||||
release = pkgs.releaseTools.aggregate {
|
|
||||||
name = "nix-${tarball.version}";
|
|
||||||
meta.description = "Release-critical builds";
|
|
||||||
constituents =
|
|
||||||
[ tarball
|
|
||||||
build.i686-linux
|
|
||||||
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
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
makeRPM_i686 = makeRPM "i686-linux";
|
|
||||||
makeRPM_x86_64 = makeRPM "x86_64-linux";
|
|
||||||
|
|
||||||
makeRPM =
|
|
||||||
system: diskImageFun: extraPackages:
|
|
||||||
|
|
||||||
with import nixpkgs { inherit system; };
|
|
||||||
|
|
||||||
releaseTools.rpmBuild rec {
|
|
||||||
name = "nix-rpm";
|
|
||||||
src = jobs.tarball;
|
|
||||||
diskImage = (diskImageFun vmTools.diskImageFuns)
|
|
||||||
{ extraPackages =
|
|
||||||
[ "sqlite" "sqlite-devel" "bzip2-devel" "libcurl-devel" "openssl-devel" "xz-devel" "libseccomp-devel" "libsodium-devel" "boost-devel" "bison" "flex" ]
|
|
||||||
++ extraPackages; };
|
|
||||||
# At most 2047MB can be simulated in qemu-system-i386
|
|
||||||
memSize = 2047;
|
|
||||||
meta.schedulingPriority = 50;
|
|
||||||
postRPMInstall = "cd /tmp/rpmout/BUILD/nix-* && make installcheck";
|
|
||||||
#enableParallelBuilding = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
makeDeb_i686 = makeDeb "i686-linux";
|
|
||||||
makeDeb_x86_64 = makeDeb "x86_64-linux";
|
|
||||||
|
|
||||||
makeDeb =
|
|
||||||
system: diskImageFun: extraPackages: extraDebPackages:
|
|
||||||
|
|
||||||
with import nixpkgs { inherit system; };
|
|
||||||
|
|
||||||
releaseTools.debBuild {
|
|
||||||
name = "nix-deb";
|
|
||||||
src = jobs.tarball;
|
|
||||||
diskImage = (diskImageFun vmTools.diskImageFuns)
|
|
||||||
{ extraPackages =
|
|
||||||
[ "libsqlite3-dev" "libbz2-dev" "libcurl-dev" "libcurl3-nss" "libssl-dev" "liblzma-dev" "libseccomp-dev" "libsodium-dev" "libboost-all-dev" ]
|
|
||||||
++ extraPackages; };
|
|
||||||
memSize = 2047;
|
|
||||||
meta.schedulingPriority = 50;
|
|
||||||
postInstall = "make installcheck";
|
|
||||||
configureFlags = "--sysconfdir=/etc";
|
|
||||||
debRequires =
|
|
||||||
[ "curl" "libsqlite3-0" "libbz2-1.0" "bzip2" "xz-utils" "libssl1.0.0" "liblzma5" "libseccomp2" ]
|
|
||||||
++ extraDebPackages;
|
|
||||||
debMaintainer = "Eelco Dolstra <eelco.dolstra@logicblox.com>";
|
|
||||||
doInstallCheck = true;
|
|
||||||
#enableParallelBuilding = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
in jobs
|
|
28
shell.nix
28
shell.nix
|
@ -1,28 +0,0 @@
|
||||||
{ useClang ? true
|
|
||||||
, nixpkgs ? builtins.fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.03.tar.gz
|
|
||||||
}:
|
|
||||||
|
|
||||||
with import nixpkgs { system = builtins.currentSystem or "x86_64-linux"; };
|
|
||||||
|
|
||||||
with import ./release-common.nix { inherit pkgs; };
|
|
||||||
|
|
||||||
(if useClang then clangStdenv else stdenv).mkDerivation {
|
|
||||||
name = "nix";
|
|
||||||
|
|
||||||
buildInputs = buildDeps ++ tarballDeps ++ perlDeps;
|
|
||||||
|
|
||||||
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
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,6 +1,9 @@
|
||||||
{ nixpkgs, system, nix }:
|
{ nixpkgs, system, overlay }:
|
||||||
|
|
||||||
with import (nixpkgs + "/nixos/lib/testing.nix") { inherit system; };
|
with import (nixpkgs + "/nixos/lib/testing.nix") {
|
||||||
|
inherit system;
|
||||||
|
extraConfigurations = [ { nixpkgs.overlays = [ overlay ]; } ];
|
||||||
|
};
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
|
@ -101,7 +104,6 @@ makeTest (
|
||||||
{ config, pkgs, nodes, ... }:
|
{ config, pkgs, nodes, ... }:
|
||||||
{ virtualisation.writableStore = true;
|
{ virtualisation.writableStore = true;
|
||||||
virtualisation.pathsInNixDB = [ pkgs.hello pkgs.fuse ];
|
virtualisation.pathsInNixDB = [ pkgs.hello pkgs.fuse ];
|
||||||
nix.package = nix;
|
|
||||||
nix.binaryCaches = [ ];
|
nix.binaryCaches = [ ];
|
||||||
environment.systemPackages = [ pkgs.jq ];
|
environment.systemPackages = [ pkgs.jq ];
|
||||||
networking.hosts.${(builtins.head nodes.github.config.networking.interfaces.eth1.ipv4.addresses).address} =
|
networking.hosts.${(builtins.head nodes.github.config.networking.interfaces.eth1.ipv4.addresses).address} =
|
||||||
|
@ -135,11 +137,11 @@ makeTest (
|
||||||
my $date = $client->succeed("nix flake info nixpkgs --json | jq -M .lastModified");
|
my $date = $client->succeed("nix flake info nixpkgs --json | jq -M .lastModified");
|
||||||
strftime("%Y%m%d%H%M%S", gmtime($date)) eq "${nixpkgs.lastModified}" or die "time mismatch";
|
strftime("%Y%m%d%H%M%S", gmtime($date)) eq "${nixpkgs.lastModified}" or die "time mismatch";
|
||||||
|
|
||||||
$client->succeed("nix build nixpkgs:hello");
|
$client->succeed("nix build nixpkgs#hello");
|
||||||
|
|
||||||
# The build shouldn't fail even with --tarball-ttl 0 (the server
|
# The build shouldn't fail even with --tarball-ttl 0 (the server
|
||||||
# being down should not be a fatal error).
|
# being down should not be a fatal error).
|
||||||
$client->succeed("nix build nixpkgs:fuse --tarball-ttl 0");
|
$client->succeed("nix build nixpkgs#fuse --tarball-ttl 0");
|
||||||
'';
|
'';
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
# Test ‘nix-copy-closure’.
|
# Test ‘nix-copy-closure’.
|
||||||
|
|
||||||
{ nixpkgs, system, nix }:
|
{ nixpkgs, system, overlay }:
|
||||||
|
|
||||||
with import (nixpkgs + "/nixos/lib/testing.nix") { inherit system; };
|
with import (nixpkgs + "/nixos/lib/testing.nix") {
|
||||||
|
inherit system;
|
||||||
|
extraConfigurations = [ { nixpkgs.overlays = [ overlay ]; } ];
|
||||||
|
};
|
||||||
|
|
||||||
makeTest (let pkgA = pkgs.cowsay; pkgB = pkgs.wget; pkgC = pkgs.hello; in {
|
makeTest (let pkgA = pkgs.cowsay; pkgB = pkgs.wget; pkgC = pkgs.hello; in {
|
||||||
|
|
||||||
|
@ -11,7 +14,6 @@ makeTest (let pkgA = pkgs.cowsay; pkgB = pkgs.wget; pkgC = pkgs.hello; in {
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
{ virtualisation.writableStore = true;
|
{ virtualisation.writableStore = true;
|
||||||
virtualisation.pathsInNixDB = [ pkgA ];
|
virtualisation.pathsInNixDB = [ pkgA ];
|
||||||
nix.package = nix;
|
|
||||||
nix.binaryCaches = [ ];
|
nix.binaryCaches = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -20,7 +22,6 @@ makeTest (let pkgA = pkgs.cowsay; pkgB = pkgs.wget; pkgC = pkgs.hello; in {
|
||||||
{ services.openssh.enable = true;
|
{ services.openssh.enable = true;
|
||||||
virtualisation.writableStore = true;
|
virtualisation.writableStore = true;
|
||||||
virtualisation.pathsInNixDB = [ pkgB pkgC ];
|
virtualisation.pathsInNixDB = [ pkgB pkgC ];
|
||||||
nix.package = nix;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
# Test Nix's remote build feature.
|
# Test Nix's remote build feature.
|
||||||
|
|
||||||
{ nixpkgs, system, nix }:
|
{ nixpkgs, system, overlay }:
|
||||||
|
|
||||||
with import (nixpkgs + "/nixos/lib/testing.nix") { inherit system; };
|
with import (nixpkgs + "/nixos/lib/testing.nix") {
|
||||||
|
inherit system;
|
||||||
|
extraConfigurations = [ { nixpkgs.overlays = [ overlay ]; } ];
|
||||||
|
};
|
||||||
|
|
||||||
makeTest (
|
makeTest (
|
||||||
|
|
||||||
|
@ -13,7 +16,6 @@ let
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
{ services.openssh.enable = true;
|
{ services.openssh.enable = true;
|
||||||
virtualisation.writableStore = true;
|
virtualisation.writableStore = true;
|
||||||
nix.package = nix;
|
|
||||||
nix.useSandbox = true;
|
nix.useSandbox = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -59,7 +61,6 @@ in
|
||||||
];
|
];
|
||||||
virtualisation.writableStore = true;
|
virtualisation.writableStore = true;
|
||||||
virtualisation.pathsInNixDB = [ config.system.build.extraUtils ];
|
virtualisation.pathsInNixDB = [ config.system.build.extraUtils ];
|
||||||
nix.package = nix;
|
|
||||||
nix.binaryCaches = [ ];
|
nix.binaryCaches = [ ];
|
||||||
programs.ssh.extraConfig = "ConnectTimeout 30";
|
programs.ssh.extraConfig = "ConnectTimeout 30";
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
# Verify that Linux builds cannot create setuid or setgid binaries.
|
# Verify that Linux builds cannot create setuid or setgid binaries.
|
||||||
|
|
||||||
{ nixpkgs, system, nix }:
|
{ nixpkgs, system, overlay }:
|
||||||
|
|
||||||
with import (nixpkgs + "/nixos/lib/testing.nix") { inherit system; };
|
with import (nixpkgs + "/nixos/lib/testing.nix") {
|
||||||
|
inherit system;
|
||||||
|
extraConfigurations = [ { nixpkgs.overlays = [ overlay ]; } ];
|
||||||
|
};
|
||||||
|
|
||||||
makeTest {
|
makeTest {
|
||||||
|
|
||||||
machine =
|
machine =
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
{ virtualisation.writableStore = true;
|
{ virtualisation.writableStore = true;
|
||||||
nix.package = nix;
|
|
||||||
nix.binaryCaches = [ ];
|
nix.binaryCaches = [ ];
|
||||||
nix.nixPath = [ "nixpkgs=${lib.cleanSource pkgs.path}" ];
|
nix.nixPath = [ "nixpkgs=${lib.cleanSource pkgs.path}" ];
|
||||||
virtualisation.pathsInNixDB = [ pkgs.stdenv pkgs.pkgsi686Linux.stdenv ];
|
virtualisation.pathsInNixDB = [ pkgs.stdenv pkgs.pkgsi686Linux.stdenv ];
|
||||||
|
|
Loading…
Reference in a new issue