diff --git a/doc/release-notes/rl-2611.section.md b/doc/release-notes/rl-2611.section.md index 6f2246688d21..b2ed8a86318b 100644 --- a/doc/release-notes/rl-2611.section.md +++ b/doc/release-notes/rl-2611.section.md @@ -4,7 +4,17 @@ -- Create the first release note entry in this section! +- The {file}`nixexprs.tar.xz` tarball will be discontinued together with Nixpkgs + 27.05 after 2027-12-31. Migrate to the {file}`nixexprs.tar.zst` tarball + instead. + + This affects for example users who pull Nixpkgs as a flake input from + https://channels.nixos.org: + + ```diff + -nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.xz"; + +nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.zst"; + ``` ## Backward Incompatibilities {#sec-nixpkgs-release-26.11-incompatibilities} diff --git a/nixos/doc/manual/release-notes/rl-2611.section.md b/nixos/doc/manual/release-notes/rl-2611.section.md index 4f3a9d0d9a80..1539b800fbcd 100644 --- a/nixos/doc/manual/release-notes/rl-2611.section.md +++ b/nixos/doc/manual/release-notes/rl-2611.section.md @@ -4,7 +4,17 @@ -- Create the first release note entry in this section! +- The {file}`nixexprs.tar.xz` tarball will be discontinued together with Nixpkgs + 27.05 after 2027-12-31. Migrate to the {file}`nixexprs.tar.zst` tarball + instead. + + This affects for example users who pull Nixpkgs as a flake input from + https://channels.nixos.org: + + ```diff + -nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.xz"; + +nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.zst"; + ``` ## New Modules {#sec-release-26.11-new-modules} diff --git a/nixos/lib/make-channel.nix b/nixos/lib/make-channel.nix index e366006e908c..098be3237dae 100644 --- a/nixos/lib/make-channel.nix +++ b/nixos/lib/make-channel.nix @@ -18,7 +18,10 @@ pkgs.releaseTools.makeSourceTarball { officialRelease = false; # FIXME: fix this in makeSourceTarball inherit version versionSuffix; - buildInputs = [ pkgs.nix ]; + buildInputs = with pkgs; [ + nix + zstd + ]; distPhase = '' rm -rf .git @@ -32,6 +35,35 @@ pkgs.releaseTools.makeSourceTarball { NIX_STATE_DIR=$TMPDIR nix-env -f ../$releaseName/default.nix -qaP --meta --show-trace --xml \* > /dev/null cd .. chmod -R u+w $releaseName - tar cfJ $out/tarballs/$releaseName.tar.xz $releaseName + + # The compression tasks are shortlived; use all available CPUs (-T0) to + # prioritize fast channel advancement. + XZ_OPT="-T0" tar \ + --create \ + --file=$out/tarballs/$releaseName.tar.xz \ + --xz \ + --absolute-names \ + --owner=0 \ + --group=0 \ + --numeric-owner \ + --format=gnu \ + --sort=name \ + --mtime="@$SOURCE_DATE_EPOCH" \ + --hard-dereference \ + $releaseName + + tar \ + --create \ + --file="$out/tarballs/$releaseName.tar.zst" \ + --use-compress-program="zstd -19 -T0" \ + --absolute-names \ + --owner=0 \ + --group=0 \ + --numeric-owner \ + --format=gnu \ + --sort=name \ + --mtime="@$SOURCE_DATE_EPOCH" \ + --hard-dereference \ + $releaseName ''; } diff --git a/pkgs/top-level/make-tarball.nix b/pkgs/top-level/make-tarball.nix index 3318b17ba926..eeaea8a32f36 100644 --- a/pkgs/top-level/make-tarball.nix +++ b/pkgs/top-level/make-tarball.nix @@ -24,6 +24,7 @@ pkgs.releaseTools.sourceTarball { jq lib-tests brotli + zstd ]; configurePhase = '' @@ -63,6 +64,9 @@ pkgs.releaseTools.sourceTarball { # Some context: https://github.com/NixOS/infra/issues/438 distPhase = '' mkdir -p $out/tarballs + + # The compression tasks are shortlived; use all available CPUs (-T0) to + # prioritize fast channel advancement. XZ_OPT="-T0" tar \ --create \ --xz \ @@ -79,5 +83,22 @@ pkgs.releaseTools.sourceTarball { --mode=ug+w \ --hard-dereference \ $src $(pwd)/{.version-suffix,.git-revision} + + tar \ + --create \ + --use-compress-program="zstd -19 -T0" \ + --file=$out/tarballs/$releaseName.tar.zst \ + --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} ''; }