{ ccpkgs # Checked out ccpkgs git repo ? { outPath = ./.; revCount = 1234; shortRev = "gabcdef"; } , nixpkgs # Checked out nixpkgs git repe ? { outPath = ./upstream; revCount = 56789; shortRev = "gfedcba"; } , stableBranch ? false , supportedSystems ? [ "x86_64-linx" ] }: # Free up the nixpkgs and ccpkgs name for binding to final product. # let # *Git - git checkout # 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 (e.g., "17.09") # version*Suffix - Version suffix (e.g., "5678.gfedcba") # # Code lifted from nixos/release.nix. # version = let versionNixpkgs = pkgs.lib.fileContents (nixpkgsGit + /.version); versionCcpkgs = pkgs.lib.fileContents ./.version; in assert (versionNixpkgs == versionCcpkgs); versionCcpkgs; versionSeparator = if stableBranch then "." else "beta"; mkVersion = base: git: rec { count = toString (git.revCount - base); commit = git.shortRev; suffix = "${versionSeparator}${count}.${commit}"; }; nixpkgsVersion = mkVersion 114283 nixpkgsGit; ccpkgsVersion = mkVersion 0 ccpkgsGit; versionSuffix = "${versionSeparator}${ccpkgsVersion.count}.${nixpkgsVersion.count}.${ccpkgsVersion.commit}.${nixpkgsVersion.commit}"; # 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 # 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) { inherit stableBranch supportedSystems; nixpkgs = nixpkgsGit; } ).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 rec { name = "nixos"; channelName = "${name}-${version}"; src = channel + /tarballs + "/${name}-${version}${nixpkgsVersion.suffix}.tar.xz"; binaryCacheURL = https://cache.nixos.org; } ); in nixpkgs; # jobs - The jobs hydra is to run. # jobs = { # 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; } ); # tested - Aggregate package set required to built for automatic channel release # tested = pkgs.lib.hydraJob (pkgs.releaseTools.aggregate { name = "ccpkgs-${version}"; constituents = builtins.attrValues jobs.pkgs ++ builtins.attrValues jobs.temporary; meta = { description = "Release-critical builds for the ccpkgs channel"; maintainers = with pkgs.lib.maintainers; [ ]; }; }); # 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 { } { } ) ) ); }; in jobs