From 526c5eb465fb3319e847ef7e42b17d810335e893 Mon Sep 17 00:00:00 2001 From: Rodney Lorrimar Date: Fri, 2 Oct 2020 12:05:28 +1000 Subject: [PATCH 1/5] Add Hydra build products for test coverage reports --- lib/cover-project.nix | 3 +++ lib/cover.nix | 3 +++ 2 files changed, 6 insertions(+) diff --git a/lib/cover-project.nix b/lib/cover-project.nix index 64b12aad29..28cd08833b 100644 --- a/lib/cover-project.nix +++ b/lib/cover-project.nix @@ -106,6 +106,7 @@ in pkgs.runCommand "project-coverage-report" popd } + mkdir -p $out/nix-support mkdir -p $out/share/hpc/vanilla/tix/all mkdir -p $out/share/hpc/vanilla/mix/ mkdir -p $out/share/hpc/vanilla/html/ @@ -136,6 +137,7 @@ in pkgs.runCommand "project-coverage-report" # Markup a HTML coverage report for the entire project cp ${projectIndexHtml} $out/share/hpc/vanilla/html/index.html + echo "report coverage-per-package $out/share/hpc/vanilla/html/index.html" >> $out/nix-support/hydra-build-products local markupOutDir="$out/share/hpc/vanilla/html/all" local srcDirs=${toBashArray srcDirs} @@ -146,5 +148,6 @@ in pkgs.runCommand "project-coverage-report" findModules allMixModules "$out/share/hpc/vanilla/mix/" "*.mix" markup srcDirs mixDirs allMixModules "$markupOutDir" "$tixFile" + echo "report coverage $markupOutDir/hpc_index.html" >> $out/nix-support/hydra-build-products fi '' diff --git a/lib/cover.nix b/lib/cover.nix index 010e2d3dda..0b9190bf27 100644 --- a/lib/cover.nix +++ b/lib/cover.nix @@ -99,6 +99,7 @@ in pkgs.runCommand (name + "-coverage-report") local mixDirs=${toBashArray mixDirs} + mkdir -p $out/nix-support mkdir -p $out/share/hpc/vanilla/mix/${name} mkdir -p $out/share/hpc/vanilla/tix/${name} mkdir -p $out/share/hpc/vanilla/html/${name} @@ -161,5 +162,7 @@ in pkgs.runCommand (name + "-coverage-report") # Markup a HTML report, included modules from only this package markup srcDirs mixDirs pkgMixModules "$markupOutDir" "$sumTixFile" + + echo "report coverage $markupOutDir/hpc_index.html" >> $out/nix-support/hydra-build-products fi '' From 8948fb8ba7ff08e3fd17b8813efe3a56f461b0d2 Mon Sep 17 00:00:00 2001 From: Rodney Lorrimar Date: Fri, 2 Oct 2020 12:05:59 +1000 Subject: [PATCH 2/5] Fix hpc on cross builds --- lib/cover-project.nix | 14 +++++--------- lib/cover.nix | 11 +++++------ 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/lib/cover-project.nix b/lib/cover-project.nix index 28cd08833b..e2b0020dc1 100644 --- a/lib/cover-project.nix +++ b/lib/cover-project.nix @@ -43,11 +43,6 @@ let ''; - ghc = - if (builtins.length coverageReports) > 0 - then (builtins.head coverageReports).library.project.pkg-set.config.ghc.package or pkgs.ghc - else pkgs.ghc; - libs = map (r: r.library) coverageReports; projectLibs = map (pkg: pkg.components.library) (lib.attrValues (haskellLib.selectProjectPackages ((lib.head libs).project.hsPkgs))); @@ -60,13 +55,14 @@ let srcDirs = map (l: l.src.outPath) (projectLibs); in pkgs.runCommand "project-coverage-report" - ({ buildInputs = [ghc]; - LANG = "en_US.UTF-8"; + ({ LANG = "en_US.UTF-8"; LC_ALL = "en_US.UTF-8"; } // lib.optionalAttrs (stdenv.buildPlatform.libc == "glibc") { LOCALE_ARCHIVE = "${pkgs.buildPackages.glibcLocales}/lib/locale/locale-archive"; }) '' + local hpc=${pkgs.buildPackages.haskellPackages.ghc}/bin/hpc + function markup() { local -n srcDs=$1 local -n mixDs=$2 @@ -74,7 +70,7 @@ in pkgs.runCommand "project-coverage-report" local destDir=$4 local tixFile=$5 - local hpcMarkupCmd=("hpc" "markup" "--destdir=$destDir") + local hpcMarkupCmd=("$hpc" "markup" "--destdir=$destDir") for srcDir in "''${srcDs[@]}"; do hpcMarkupCmd+=("--srcdir=$srcDir") done @@ -130,7 +126,7 @@ in pkgs.runCommand "project-coverage-report" if [ ''${#tixFiles[@]} -ne 0 ]; then # Create tix file with test run information for all packages tixFile="$out/share/hpc/vanilla/tix/all/all.tix" - hpcSumCmd=("hpc" "sum" "--union" "--output=$tixFile") + hpcSumCmd=("$hpc" "sum" "--union" "--output=$tixFile") hpcSumCmd+=("''${tixFiles[@]}") echo "''${hpcSumCmd[@]}" eval "''${hpcSumCmd[@]}" diff --git a/lib/cover.nix b/lib/cover.nix index 0b9190bf27..8ad6cfd413 100644 --- a/lib/cover.nix +++ b/lib/cover.nix @@ -11,8 +11,6 @@ # argument. Use a larger list of libraries if you would like the tests # of one local package to generate coverage for another. , mixLibraries ? [library] -# hack for project-less projects -, ghc ? library.project.pkg-set.config.ghc.package }: let @@ -24,8 +22,7 @@ let srcDirs = map (l: l.src.outPath) mixLibraries; in pkgs.runCommand (name + "-coverage-report") - ({ buildInputs = [ ghc ]; - passthru = { + ({ passthru = { inherit name library checks; }; # HPC will fail if the Haskell file contains non-ASCII characters, @@ -39,6 +36,8 @@ in pkgs.runCommand (name + "-coverage-report") LOCALE_ARCHIVE = "${pkgs.buildPackages.glibcLocales}/lib/locale/locale-archive"; }) '' + local hpc=${pkgs.buildPackages.haskellPackages.ghc}/bin/hpc + function markup() { local -n srcDs=$1 local -n mixDs=$2 @@ -46,7 +45,7 @@ in pkgs.runCommand (name + "-coverage-report") local destDir=$4 local tixFile=$5 - local hpcMarkupCmd=("hpc" "markup" "--destdir=$destDir") + local hpcMarkupCmd=("$hpc" "markup" "--destdir=$destDir") for srcDir in "''${srcDs[@]}"; do hpcMarkupCmd+=("--srcdir=$srcDir") done @@ -70,7 +69,7 @@ in pkgs.runCommand (name + "-coverage-report") local -n tixFs=$2 local outFile="$3" - local hpcSumCmd=("hpc" "sum" "--union" "--output=$outFile") + local hpcSumCmd=("$hpc" "sum" "--union" "--output=$outFile") for module in "''${includedModules[@]}"; do hpcSumCmd+=("--include=$module") From c26c61476f9b1c0ce93656a8a23cb07e07a78b31 Mon Sep 17 00:00:00 2001 From: Rodney Lorrimar Date: Fri, 2 Oct 2020 17:25:39 +1000 Subject: [PATCH 3/5] Add zip files for coverage build producs --- lib/cover-project.nix | 6 +++++- lib/cover.nix | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/cover-project.nix b/lib/cover-project.nix index e2b0020dc1..57fb96745e 100644 --- a/lib/cover-project.nix +++ b/lib/cover-project.nix @@ -55,7 +55,8 @@ let srcDirs = map (l: l.src.outPath) (projectLibs); in pkgs.runCommand "project-coverage-report" - ({ LANG = "en_US.UTF-8"; + ({ buildInputs = [ pkgs.buildPackages.zip ]; + LANG = "en_US.UTF-8"; LC_ALL = "en_US.UTF-8"; } // lib.optionalAttrs (stdenv.buildPlatform.libc == "glibc") { LOCALE_ARCHIVE = "${pkgs.buildPackages.glibcLocales}/lib/locale/locale-archive"; @@ -144,6 +145,9 @@ in pkgs.runCommand "project-coverage-report" findModules allMixModules "$out/share/hpc/vanilla/mix/" "*.mix" markup srcDirs mixDirs allMixModules "$markupOutDir" "$tixFile" + echo "report coverage $markupOutDir/hpc_index.html" >> $out/nix-support/hydra-build-products + ( cd $out/share/hpc/vanilla/html ; zip -r $out/share/hpc/vanilla/html.zip . ) + echo "file zip $out/share/hpc/vanilla/html.zip" >> $out/nix-support/hydra-build-products fi '' diff --git a/lib/cover.nix b/lib/cover.nix index 8ad6cfd413..4904c08355 100644 --- a/lib/cover.nix +++ b/lib/cover.nix @@ -22,7 +22,8 @@ let srcDirs = map (l: l.src.outPath) mixLibraries; in pkgs.runCommand (name + "-coverage-report") - ({ passthru = { + ({buildInputs = [ pkgs.buildPackages.zip ]; + passthru = { inherit name library checks; }; # HPC will fail if the Haskell file contains non-ASCII characters, @@ -162,6 +163,9 @@ in pkgs.runCommand (name + "-coverage-report") # Markup a HTML report, included modules from only this package markup srcDirs mixDirs pkgMixModules "$markupOutDir" "$sumTixFile" + # Provide a HTML zipfile and Hydra links + ( cd "$markupOutDir" ; zip -r $out/share/hpc/vanilla/${name}-html.zip . ) echo "report coverage $markupOutDir/hpc_index.html" >> $out/nix-support/hydra-build-products + echo "file zip $out/share/hpc/vanilla/${name}-html.zip" >> $out/nix-support/hydra-build-products fi '' From 1061ea246cdd5e8bbb4df73c2b73df95a81a014c Mon Sep 17 00:00:00 2001 From: Rodney Lorrimar Date: Sun, 4 Oct 2020 15:33:26 +1000 Subject: [PATCH 4/5] fixup! Add zip files for coverage build producs --- lib/cover-project.nix | 6 +++--- lib/cover.nix | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/cover-project.nix b/lib/cover-project.nix index 57fb96745e..28b93de89a 100644 --- a/lib/cover-project.nix +++ b/lib/cover-project.nix @@ -55,9 +55,9 @@ let srcDirs = map (l: l.src.outPath) (projectLibs); in pkgs.runCommand "project-coverage-report" - ({ buildInputs = [ pkgs.buildPackages.zip ]; - LANG = "en_US.UTF-8"; - LC_ALL = "en_US.UTF-8"; + ({ nativeBuildInputs = [ pkgs.buildPackages.zip ]; + LANG = "en_US.UTF-8"; + LC_ALL = "en_US.UTF-8"; } // lib.optionalAttrs (stdenv.buildPlatform.libc == "glibc") { LOCALE_ARCHIVE = "${pkgs.buildPackages.glibcLocales}/lib/locale/locale-archive"; }) diff --git a/lib/cover.nix b/lib/cover.nix index 4904c08355..4102496859 100644 --- a/lib/cover.nix +++ b/lib/cover.nix @@ -22,7 +22,7 @@ let srcDirs = map (l: l.src.outPath) mixLibraries; in pkgs.runCommand (name + "-coverage-report") - ({buildInputs = [ pkgs.buildPackages.zip ]; + ({nativeBuildInputs = [ pkgs.buildPackages.zip ]; passthru = { inherit name library checks; }; From 0a53e903c472a1ebc54f7a4cdc97c6e546e89b4a Mon Sep 17 00:00:00 2001 From: Rodney Lorrimar Date: Sun, 4 Oct 2020 15:35:35 +1000 Subject: [PATCH 5/5] Apply Hamish's buildGHC suggestion --- lib/cover-project.nix | 13 ++++++++----- lib/cover.nix | 10 +++++----- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/cover-project.nix b/lib/cover-project.nix index 28b93de89a..dc77784342 100644 --- a/lib/cover-project.nix +++ b/lib/cover-project.nix @@ -43,6 +43,11 @@ let ''; + ghc = + if (builtins.length coverageReports) > 0 + then (builtins.head coverageReports).library.project.pkg-set.config.ghc.package or pkgs.ghc + else pkgs.ghc; + libs = map (r: r.library) coverageReports; projectLibs = map (pkg: pkg.components.library) (lib.attrValues (haskellLib.selectProjectPackages ((lib.head libs).project.hsPkgs))); @@ -55,15 +60,13 @@ let srcDirs = map (l: l.src.outPath) (projectLibs); in pkgs.runCommand "project-coverage-report" - ({ nativeBuildInputs = [ pkgs.buildPackages.zip ]; + ({ nativeBuildInputs = [ (ghc.buildGHC or ghc) pkgs.buildPackages.zip ]; LANG = "en_US.UTF-8"; LC_ALL = "en_US.UTF-8"; } // lib.optionalAttrs (stdenv.buildPlatform.libc == "glibc") { LOCALE_ARCHIVE = "${pkgs.buildPackages.glibcLocales}/lib/locale/locale-archive"; }) '' - local hpc=${pkgs.buildPackages.haskellPackages.ghc}/bin/hpc - function markup() { local -n srcDs=$1 local -n mixDs=$2 @@ -71,7 +74,7 @@ in pkgs.runCommand "project-coverage-report" local destDir=$4 local tixFile=$5 - local hpcMarkupCmd=("$hpc" "markup" "--destdir=$destDir") + local hpcMarkupCmd=("hpc" "markup" "--destdir=$destDir") for srcDir in "''${srcDs[@]}"; do hpcMarkupCmd+=("--srcdir=$srcDir") done @@ -127,7 +130,7 @@ in pkgs.runCommand "project-coverage-report" if [ ''${#tixFiles[@]} -ne 0 ]; then # Create tix file with test run information for all packages tixFile="$out/share/hpc/vanilla/tix/all/all.tix" - hpcSumCmd=("$hpc" "sum" "--union" "--output=$tixFile") + hpcSumCmd=("hpc" "sum" "--union" "--output=$tixFile") hpcSumCmd+=("''${tixFiles[@]}") echo "''${hpcSumCmd[@]}" eval "''${hpcSumCmd[@]}" diff --git a/lib/cover.nix b/lib/cover.nix index 4102496859..62243d07ea 100644 --- a/lib/cover.nix +++ b/lib/cover.nix @@ -11,6 +11,8 @@ # argument. Use a larger list of libraries if you would like the tests # of one local package to generate coverage for another. , mixLibraries ? [library] +# hack for project-less projects +, ghc ? library.project.pkg-set.config.ghc.package }: let @@ -22,7 +24,7 @@ let srcDirs = map (l: l.src.outPath) mixLibraries; in pkgs.runCommand (name + "-coverage-report") - ({nativeBuildInputs = [ pkgs.buildPackages.zip ]; + ({nativeBuildInputs = [ (ghc.buildGHC or ghc) pkgs.buildPackages.zip ]; passthru = { inherit name library checks; }; @@ -37,8 +39,6 @@ in pkgs.runCommand (name + "-coverage-report") LOCALE_ARCHIVE = "${pkgs.buildPackages.glibcLocales}/lib/locale/locale-archive"; }) '' - local hpc=${pkgs.buildPackages.haskellPackages.ghc}/bin/hpc - function markup() { local -n srcDs=$1 local -n mixDs=$2 @@ -46,7 +46,7 @@ in pkgs.runCommand (name + "-coverage-report") local destDir=$4 local tixFile=$5 - local hpcMarkupCmd=("$hpc" "markup" "--destdir=$destDir") + local hpcMarkupCmd=("hpc" "markup" "--destdir=$destDir") for srcDir in "''${srcDs[@]}"; do hpcMarkupCmd+=("--srcdir=$srcDir") done @@ -70,7 +70,7 @@ in pkgs.runCommand (name + "-coverage-report") local -n tixFs=$2 local outFile="$3" - local hpcSumCmd=("$hpc" "sum" "--union" "--output=$outFile") + local hpcSumCmd=("hpc" "sum" "--union" "--output=$outFile") for module in "''${includedModules[@]}"; do hpcSumCmd+=("--include=$module")