nixpkgs/pkgs/top-level/make-tarball.nix
Wolfgang Walther fa0cba1c39
nix_2_3: drop
This has been marked insecure a while ago, as some CVEs have not been
backported. Even if *some* CVEs are fixed, we'd need **all** of them to
be, to get it back into the cache.

Not having it in the cache means, we can not test it in CI. This means
we can't make sure to actually support this version to evaluate Nixpkgs.
2025-08-12 11:28:40 +02:00

88 lines
2.3 KiB
Nix

{
nixpkgs,
officialRelease,
pkgs ? import nixpkgs.outPath { },
nix ? pkgs.nix,
lib-tests ? import ../../lib/tests/release.nix { inherit pkgs; },
}:
pkgs.releaseTools.sourceTarball {
name = "nixpkgs-tarball";
src = nixpkgs;
inherit officialRelease;
version = pkgs.lib.fileContents ../../.version;
versionSuffix = "pre${
if nixpkgs ? lastModified then
builtins.substring 0 8 (nixpkgs.lastModifiedDate or nixpkgs.lastModified)
else
toString (nixpkgs.revCount or 0)
}.${nixpkgs.shortRev or "dirty"}";
buildInputs = with pkgs; [
nix.out
jq
lib-tests
brotli
];
configurePhase = ''
eval "$preConfigure"
releaseName=nixpkgs-$VERSION$VERSION_SUFFIX
echo -n $VERSION_SUFFIX > .version-suffix
echo -n ${nixpkgs.rev or nixpkgs.shortRev or "dirty"} > .git-revision
echo "release name is $releaseName"
echo "git-revision is $(cat .git-revision)"
'';
dontUnpack = true;
dontBuild = false;
doCheck = true;
checkPhase = ''
echo "generating packages.json"
(
echo -n '{"version":2,"packages":'
NIX_STATE_DIR=$TMPDIR NIX_PATH= nix-env -f $src -qa --meta --json --show-trace --arg config 'import ${./packages-config.nix}'
echo -n '}'
) | sed "s|$src/||g" | jq -c > packages.json
# Arbitrary number. The index has ~115k packages as of April 2024.
if [ $(jq -r '.packages | length' < packages.json) -lt 100000 ]; then
echo "ERROR: not enough packages in the search index, bailing out!"
exit 1
fi
packages=$out/packages.json.br
mkdir -p $out/nix-support
brotli -9 < packages.json > $packages
echo "file json-br $packages" >> $out/nix-support/hydra-build-products
'';
# --hard-dereference: reproducibility for src if auto-optimise-store = true
# Some context: https://github.com/NixOS/infra/issues/438
distPhase = ''
mkdir -p $out/tarballs
XZ_OPT="-T0" tar \
--create \
--xz \
--file=$out/tarballs/$releaseName.tar.xz \
--absolute-names \
--transform="s|^$src|$releaseName|g" \
--transform="s|^$(pwd)|$releaseName|g" \
--owner=0 \
--group=0 \
--numeric-owner \
--format=gnu \
--sort=name \
--mtime="@$SOURCE_DATE_EPOCH" \
--mode=ug+w \
--hard-dereference \
$src $(pwd)/{.version-suffix,.git-revision}
'';
}