Files
ccpkgs/release.nix
2018-01-19 04:17:57 -05:00

116 lines
3.7 KiB
Nix

{ nixpkgs # Checked out nixpkgs git repe
? { outPath = ./upstream;
revCount = 56789;
shortRev = "gfedcba";
}
, ccpkgs # Checked out ccpkgs git repo
? { outPath = ./.;
revCount = 56789;
shortRev = "gfedcba";
}
, stableBranch ? false
, supportedSystems ? [ "x86_64-linx" ] }:
# Free up the nixpkgs and ccpkgs name for binding to final product.
#
let
# nixpkgsGit - git checkout of nixpkgs
# ccpkgsGit - git checkout of ccpkgs
#
nixpkgsGit = nixpkgs;
ccpkgsGit = ccpkgs;
# Tarball hydra release product for the ccpkgs channel.
#
# 1. Generate an unpacked channel for the associated nixpkgs in the store.
# 2. Symlink this into the top-level directory as upstream (nixpkgs is used).
# 3. Stick in the standard version files.
# 4. Let releaseTools.sourceTarball handle the details of exposing it as a hydra product.
#
in let
# pkgs - Packages sucked in from the given ccpkgs git version.
#
pkgs = import ccpkgsGit { upstream = nixpkgsGit; };
# version - Version number of nixpkgs (and hence ccpkgs too)
# versionSuffix - Version suffix based on git commnit
#
# Code lifted from nixos/release.nix.
#
version = pkgs.lib.fileContents ./.version;
versionSuffix =
(if stableBranch then "." else "beta") + "${toString (nixpkgsGit.revCount - 114283)}.${nixpkgsGit.shortRev}";
# nixpkgs - The store path containing the unpacked nixpkgs channel.
#
# 1. Generate a channel tarball from the git repo via the nixos/release.nix expression for hydra.
# 2. Unpack this into the store using the nix/unpack-channel.nix expression used by nix-channel.
#
nixpkgs =
let
# version - Version of checked out nixpkgs
#
version = pkgs.lib.fileContents (nixpkgsGit + /.version);
# channel - Store path containing the channel release tarballs.
#
# The nixos.channel attribute from nixos/release.nix builds the nixpkgs channel tarballs.
#
channel =
( import (nixpkgsGit + /nixos/release.nix) {
nixpkgs = nixpkgsGit;
inherit stableBranch supportedSystems;
} ).channel;
# nixpkgs - The store path containing the unpacked nixpkgs channel.
#
# The nix provided nix/unpack-channel.nix function extracts the nixpkgs from the channel,
#
nixpkgs =
( import <nix/unpack-channel.nix> rec {
name = "nixos";
channelName = "${name}-${version}";
src = channel + /tarballs + "/${name}-${version}${versionSuffix}.tar.xz";
binaryCacheURL = https://cache.nixos.org;
} );
in
nixpkgs;
in {
# Tweak the nixos make-channel code to include the upstream channel.
#
# 1. Replace the git repo nixpkgs with a copy of the unpacked nixpkgs channel.
#
channel =
( import (nixpkgsGit + /nixos/lib/make-channel.nix) {
inherit pkgs version versionSuffix;
nixpkgs = ccpkgsGit;
} ).overrideAttrs ( original: {
name = "ccpkgs-channel";
distPhase =
''
rm -fr upstream
cp -rd ${nixpkgs}/nixos-${version} upstream
'' + original.distPhase;
} );
overlays = {
# pkgs - Attribute set of overlayed pkgs.
#
pkgs =
builtins.listToAttrs
( builtins.map ( name: { inherit name; value = pkgs.${name}; } )
( builtins.attrNames ( import ./pkgs/all-packages.nix { } { } ) ) );
# temporary - Attribute set of overlayed pkgs.
#
temporary =
builtins.listToAttrs
( map ( name: { inherit name; value = pkgs.${name}; } )
( builtins.attrNames ( import ./temporary/all-temporary.nix { } { } ) ) );
};
}