diff options
Diffstat (limited to 'nixos/release.nix')
-rw-r--r-- | nixos/release.nix | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/nixos/release.nix b/nixos/release.nix new file mode 100644 index 000000000000..1ffb334d90a4 --- /dev/null +++ b/nixos/release.nix @@ -0,0 +1,224 @@ +{ nixpkgs ? { outPath = ./..; revCount = 5678; shortRev = "gfedcba"; } +, officialRelease ? false +, stableBranch ? false +}: + +let + + version = builtins.readFile ../.version; + versionSuffix = + if officialRelease then "" + else (if stableBranch then "." else "pre") + "${toString nixpkgs.revCount}.${nixpkgs.shortRev}"; + + systems = [ "x86_64-linux" "i686-linux" ]; + + forAllSystems = pkgs.lib.genAttrs systems; + + pkgs = import nixpkgs { system = "x86_64-linux"; }; + + lib = pkgs.lib; + + + versionModule = + { system.nixosVersionSuffix = versionSuffix; + system.nixosRevision = nixpkgs.rev or nixpkgs.shortRev; + }; + + + makeIso = + { module, type, description ? type, maintainers ? ["eelco"], system }: + + with import nixpkgs { inherit system; }; + + let + + config = (import lib/eval-config.nix { + inherit system; + modules = [ module versionModule { isoImage.isoBaseName = "nixos-${type}"; } ]; + }).config; + + iso = config.system.build.isoImage; + + in + # Declare the ISO as a build product so that it shows up in Hydra. + runCommand "nixos-iso-${config.system.nixosVersion}" + { meta = { + description = "NixOS installation CD (${description}) - ISO image for ${system}"; + maintainers = map (x: lib.getAttr x lib.maintainers) maintainers; + }; + inherit iso; + passthru = { inherit config; }; + } + '' + mkdir -p $out/nix-support + echo "file iso" $iso/iso/*.iso* >> $out/nix-support/hydra-build-products + ''; # */ + + + makeSystemTarball = + { module, maintainers ? ["viric"], system }: + + with import nixpkgs { inherit system; }; + + let + + config = (import lib/eval-config.nix { + inherit system; + modules = [ module versionModule ]; + }).config; + + tarball = config.system.build.tarball; + + in + tarball // + { meta = { + description = "NixOS system tarball for ${system} - ${stdenv.platform.name}"; + maintainers = map (x: lib.getAttr x lib.maintainers) maintainers; + }; + inherit config; + }; + + +in rec { + + channel = + pkgs.releaseTools.makeSourceTarball { + name = "nixos-channel"; + + src = nixpkgs; + + officialRelease = false; # FIXME: fix this in makeSourceTarball + inherit version versionSuffix; + + buildInputs = [ pkgs.nixUnstable ]; + + expr = builtins.readFile lib/channel-expr.nix; + + distPhase = '' + rm -rf .git + echo -n $VERSION_SUFFIX > .version-suffix + echo -n ${nixpkgs.rev or nixpkgs.shortRev} > .git-revision + releaseName=nixos-$VERSION$VERSION_SUFFIX + mkdir -p $out/tarballs + mkdir ../$releaseName + cp -prd . ../$releaseName/nixpkgs + chmod -R u+w ../$releaseName + ln -s nixpkgs/nixos ../$releaseName/nixos + echo "$expr" > ../$releaseName/default.nix + NIX_STATE_DIR=$TMPDIR nix-env -f ../$releaseName/default.nix -qaP --meta --xml \* > /dev/null + cd .. + chmod -R u+w $releaseName + tar cfJ $out/tarballs/$releaseName.tar.xz $releaseName + ''; # */ + }; + + + manual = forAllSystems (system: (builtins.getAttr system iso_minimal).config.system.build.manual.manual); + manpages = forAllSystems (system: (builtins.getAttr system iso_minimal).config.system.build.manual.manpages); + + + iso_minimal = forAllSystems (system: makeIso { + module = ./modules/installer/cd-dvd/installation-cd-minimal.nix; + type = "minimal"; + inherit system; + }); + + iso_minimal_new_kernel = forAllSystems (system: makeIso { + module = ./modules/installer/cd-dvd/installation-cd-minimal-new-kernel.nix; + type = "minimal-new-kernel"; + inherit system; + }); + + iso_graphical = forAllSystems (system: makeIso { + module = ./modules/installer/cd-dvd/installation-cd-graphical.nix; + type = "graphical"; + inherit system; + }); + + # A variant with a more recent (but possibly less stable) kernel + # that might support more hardware. + iso_new_kernel = forAllSystems (system: makeIso { + module = ./modules/installer/cd-dvd/installation-cd-new-kernel.nix; + type = "new-kernel"; + inherit system; + }); + + # A variant with efi booting support. Once cd-minimal has a newer kernel, + # this should be enabled by default. + iso_efi = forAllSystems (system: makeIso { + module = ./modules/installer/cd-dvd/installation-cd-efi.nix; + type = "efi"; + maintainers = [ "shlevy" ]; + inherit system; + }); + + + # A bootable VirtualBox virtual appliance as an OVA file (i.e. packaged OVF). + ova = forAllSystems (system: + + with import nixpkgs { inherit system; }; + + let + + config = (import lib/eval-config.nix { + inherit system; + modules = + [ versionModule + ./modules/installer/virtualbox-demo.nix + ]; + }).config; + + in + # Declare the OVA as a build product so that it shows up in Hydra. + runCommand "nixos-ova-${config.system.nixosVersion}-${system}" + { meta = { + description = "NixOS VirtualBox appliance (${system})"; + maintainers = lib.maintainers.eelco; + }; + ova = config.system.build.virtualBoxOVA; + } + '' + mkdir -p $out/nix-support + fn=$(echo $ova/*.ova) + echo "file ova $fn" >> $out/nix-support/hydra-build-products + '' # */ + + ); + + + # Provide a tarball that can be unpacked into an SD card, and easily + # boot that system from uboot (like for the sheevaplug). + # The pc variant helps preparing the expression for the system tarball + # in a machine faster than the sheevpalug + system_tarball_pc = forAllSystems (system: makeSystemTarball { + module = ./modules/installer/cd-dvd/system-tarball-pc.nix; + inherit system; + }); + + /* + system_tarball_fuloong2f = + assert builtins.currentSystem == "mips64-linux"; + makeSystemTarball { + module = ./modules/installer/cd-dvd/system-tarball-fuloong2f.nix; + system = "mips64-linux"; + }; + + system_tarball_sheevaplug = + assert builtins.currentSystem == "armv5tel-linux"; + makeSystemTarball { + module = ./modules/installer/cd-dvd/system-tarball-sheevaplug.nix; + system = "armv5tel-linux"; + }; + */ + + + # Run the tests in ./tests/default.nix for each platform. You can + # run a test by doing e.g. "nix-build -A tests.login.x86_64-linux". + tests = + with lib; + let + testsFor = system: + mapAttrsRecursiveCond (x: !x ? test) (n: v: listToAttrs [(nameValuePair system v.test)]) + (import ./tests { inherit nixpkgs system; }); + in fold recursiveUpdate {} (map testsFor systems); +} |