diff --git a/pkgs/top-level/make-tarball.nix b/pkgs/top-level/make-tarball.nix new file mode 100644 index 000000000000..d6e3a118d44a --- /dev/null +++ b/pkgs/top-level/make-tarball.nix @@ -0,0 +1,75 @@ +/* Hydra job to build a tarball for Nixpkgs from a SVN checkout. It + also builds the documentation and tests whether the Nix expressions + evaluate correctly. */ + +{ nixpkgs ? {outPath = (import ./all-packages.nix {}).lib.cleanSource ../..; rev = 1234;} +, officialRelease ? false +}: + +with import nixpkgs.outPath {}; + +releaseTools.makeSourceTarball { + name = "nixpkgs-tarball"; + src = nixpkgs; + inherit officialRelease; + + buildInputs = [ + lzma + libxml2 # Needed for the release notes. + libxslt + w3m + nixUnstable # Needed to check whether the expressions are valid. + ]; + + configurePhase = '' + eval "$preConfigure" + releaseName=nixpkgs-$(cat $src/VERSION)$VERSION_SUFFIX + echo "release name is $releaseName" + echo $releaseName > relname + ''; + + dontBuild = false; + + buildPhase = '' + echo "building docs..." + (cd doc && make docbookxsl=${docbook5_xsl}/xml/xsl/docbook) || false + ln -s doc/NEWS.txt NEWS + ''; + + doCheck = true; + + checkPhase = '' + # Check that we can fully evaluate build-for-release.nix. + header "checking pkgs/top-level/build-for-release.nix" + nix-env --readonly-mode -f pkgs/top-level/build-for-release.nix \ + -qa \* --drv-path --system-filter \* --system + stopNest + + # Check that all-packages.nix evaluates on a number of platforms. + for platform in i686-linux x86_64-linux powerpc-linux i686-freebsd powerpc-darwin i686-darwin; do + header "checking pkgs/top-level/all-packages.nix on $platform" + nix-env --readonly-mode -f pkgs/top-level/all-packages.nix \ + --argstr system "$platform" \ + -qa \* --drv-path --system-filter \* --system + stopNest + done + ''; + + distPhase = '' + ensureDir $out/tarballs + mkdir ../$releaseName + cp -prd . ../$releaseName + (cd .. && tar cfa $out/tarballs/$releaseName.tar.bz2 $releaseName) || false + (cd .. && tar cfa $out/tarballs/$releaseName.tar.lzma $releaseName) || false + + ensureDir $out/release-notes + cp doc/NEWS.html $out/release-notes/index.html + cp doc/style.css $out/release-notes/ + echo "doc release-notes $out/release-notes" >> $out/nix-support/hydra-build-products + + ensureDir $out/manual + cp doc/manual.html $out/manual/index.html + cp doc/style.css $out/manual/ + echo "doc manual $out/manual" >> $out/nix-support/hydra-build-products + ''; +} diff --git a/pkgs/top-level/release.nix b/pkgs/top-level/release.nix index 9436457a09b8..7254ea975845 100644 --- a/pkgs/top-level/release.nix +++ b/pkgs/top-level/release.nix @@ -2,102 +2,48 @@ let allPackages = import ./all-packages.nix; - test = f: {system}: f (allPackages {inherit system;}); + pkgs = allPackages {}; + + testOn = systems: f: {system}: + if pkgs.lib.elem system systems then f (allPackages {inherit system;}) else {}; + + testOnLinux = testOn ["i686-linux" "x86_64-linux"]; + + test = testOn ["i686-linux" "x86_64-linux" "i686-darwin" "i686-cygwin"]; + +in { + + tarball = import ./make-tarball.nix; + + /* All the top-level packages that we want to build in the build + farm. The notation is still kinda clumsy. We could use some + meta-programming. E.g. we would want to write + wine = ["i686-linux"]; - jobs = { + which would be translated to - - tarball = - { nixpkgs ? {path = (allPackages {}).lib.cleanSource ../..; rev = 1234;} - , officialRelease ? false - }: + wine = testOn ["i686-linux"] (pkgs: pkgs.wine); - with import nixpkgs.path {}; + Shouldn't be too hard to make a function that recurses over the + attrset and does this for every attribute. */ - releaseTools.makeSourceTarball { - name = "nixpkgs-tarball"; - src = nixpkgs; - inherit officialRelease; + MPlayer = testOnLinux (pkgs: pkgs.MPlayer); + autoconf = test (pkgs: pkgs.autoconf); + bash = test (pkgs: pkgs.bash); + firefox3 = testOnLinux (pkgs: pkgs.firefox3); + gcc = test (pkgs: pkgs.gcc); + hello = test (pkgs: pkgs.hello); + libsmbios = testOnLinux (pkgs: pkgs.libsmbios); + libtool = test (pkgs: pkgs.libtool); + pan = testOnLinux (pkgs: pkgs.pan); + perl = test (pkgs: pkgs.perl); + python = test (pkgs: pkgs.python); + thunderbird = testOnLinux (pkgs: pkgs.thunderbird); + wine = testOn ["i686-linux"] (pkgs: pkgs.wine); - buildInputs = [ - lzma - libxml2 # Needed for the release notes. - libxslt - w3m - nixUnstable # Needed to check whether the expressions are valid. - ]; - - configurePhase = '' - eval "$preConfigure" - releaseName=nixpkgs-$(cat $src/VERSION)$VERSION_SUFFIX - echo "release name is $releaseName" - echo $releaseName > relname - ''; - - dontBuild = false; - - buildPhase = '' - echo "building docs..." - (cd doc && make docbookxsl=${docbook5_xsl}/xml/xsl/docbook) || false - ln -s doc/NEWS.txt NEWS - ''; - - doCheck = true; - - checkPhase = '' - # Check that we can fully evaluate build-for-release.nix. - header "checking pkgs/top-level/build-for-release.nix" - nix-env --readonly-mode -f pkgs/top-level/build-for-release.nix \ - -qa \* --drv-path --system-filter \* --system - stopNest - - # Check that all-packages.nix evaluates on a number of platforms. - for platform in i686-linux x86_64-linux powerpc-linux i686-freebsd powerpc-darwin i686-darwin; do - header "checking pkgs/top-level/all-packages.nix on $platform" - nix-env --readonly-mode -f pkgs/top-level/all-packages.nix \ - --argstr system "$platform" \ - -qa \* --drv-path --system-filter \* --system - stopNest - done - ''; - - distPhase = '' - ensureDir $out/tarballs - mkdir ../$releaseName - cp -prd . ../$releaseName - (cd .. && tar cfa $out/tarballs/$releaseName.tar.bz2 $releaseName) || false - (cd .. && tar cfa $out/tarballs/$releaseName.tar.lzma $releaseName) || false - - ensureDir $out/release-notes - cp doc/NEWS.html $out/release-notes/index.html - cp doc/style.css $out/release-notes/ - echo "doc release-notes $out/release-notes" >> $out/nix-support/hydra-build-products - - ensureDir $out/manual - cp doc/manual.html $out/manual/index.html - cp doc/style.css $out/manual/ - echo "doc manual $out/manual" >> $out/nix-support/hydra-build-products - ''; - }; - - - # All the top-level packages that want to build in the build farm. - # !!! notation is kinda clumsy - - MPlayer = test (pkgs: pkgs.MPlayer); - autoconf = test (pkgs: pkgs.autoconf); - bash = test (pkgs: pkgs.bash); - firefox3 = test (pkgs: pkgs.firefox3); - gcc = test (pkgs: pkgs.gcc); - hello = test (pkgs: pkgs.hello); - libtool = test (pkgs: pkgs.libtool); - pan = test (pkgs: pkgs.pan); - perl = test (pkgs: pkgs.perl); - python = test (pkgs: pkgs.python); - thunderbird = test (pkgs: pkgs.thunderbird); - wine = test (pkgs: pkgs.wine); - + xorg = { + libX11 = testOnLinux (pkgs: pkgs.xorg.libX11); }; - -in jobs + +}