From ef849507a2aac1a334a94e98087872b1bb3cf49d Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Thu, 13 Jul 2023 15:50:17 +0200 Subject: [PATCH] [nix] add coverage in nix tests --- nix/default-config-tests.nix | 9 ++++++--- nix/external-plugin-ci.sh | 7 ++++++- nix/frama-c.nix | 19 ++++++++++++------- nix/mk_tests.nix | 32 ++++++++++++++++++++++++-------- nix/pkgs.nix | 12 ++++++++++-- nix/ts-api.nix | 6 +++++- 6 files changed, 63 insertions(+), 22 deletions(-) diff --git a/nix/default-config-tests.nix b/nix/default-config-tests.nix index 04f0b1bdb3d..9fcdfbf151e 100644 --- a/nix/default-config-tests.nix +++ b/nix/default-config-tests.nix @@ -1,7 +1,10 @@ -{ mk_tests } : +{ mk_tests, frama-c-nocover } : -mk_tests { - tests-name = "default-config-tests"; +let mk_tests_distrib = mk_tests.override { + frama-c = frama-c-nocover ; +}; in +mk_tests_distrib { + tests-name = "src-distrib-tests"; tests-command = '' dune exec -- frama-c-ptests -never-disabled tests src/plugins/*/tests dune build -j1 --display short @ptests_config diff --git a/nix/external-plugin-ci.sh b/nix/external-plugin-ci.sh index e63d692dd76..fc1bc183927 100755 --- a/nix/external-plugin-ci.sh +++ b/nix/external-plugin-ci.sh @@ -45,6 +45,11 @@ fi # Normalize version for Nix OCAML=${OCAML/./_} +OUTOPT="--no-out-link" +if [ ! -z ${OUT+x} ]; then + OUTOPT="-o $(pwd)/$OUT" +fi + DEFAULT=${DEFAULT:-master} # prints @@ -118,7 +123,7 @@ if [[ -f "./nix/dependencies" ]]; then fi # run the build -nix-build --no-out-link "./nix/pkgs.nix" $OPTS -A ocaml-ng.ocamlPackages_$OCAML."$plugin" +nix-build $OUTOPT "./nix/pkgs.nix" $OPTS -A ocaml-ng.ocamlPackages_$OCAML."$plugin" cd "$fc_dir" diff --git a/nix/frama-c.nix b/nix/frama-c.nix index 4be82fb950a..5dcbb81b27d 100644 --- a/nix/frama-c.nix +++ b/nix/frama-c.nix @@ -11,6 +11,7 @@ , findlib # Frama-C build , apron +, bisect_ppx , camlzip , camomile , dune_3 @@ -46,6 +47,7 @@ , python3 , python3Packages , yq +, cover ? true , release_mode ? false }: @@ -71,6 +73,7 @@ stdenvNoCC.mkDerivation rec { buildInputs = [ apron + bisect_ppx camlzip camomile dune_3 @@ -105,8 +108,6 @@ stdenvNoCC.mkDerivation rec { dos2unix doxygen python3 - python3Packages.pyaml - yq ]; outputs = [ "out" "build_dir" ]; @@ -121,11 +122,15 @@ stdenvNoCC.mkDerivation rec { enableParallelBuilding = false; dune_opt = if release_mode then "--release" else "" ; - buildPhase = '' - dune build -j2 --display short --error-reporting=twice $release_mode @install - make tools/ptests/ptests.exe - make tools/ptests/wtests.exe - ''; + buildPhase = (if cover then '' + export DUNE_WORKSPACE="dev/dune-workspace.cover" + '' else "") + + '' + dune build -j2 --display short --error-reporting=twice $dune_opt @install + + make tools/ptests/ptests.exe + make tools/ptests/wtests.exe + ''; installFlags = [ "PREFIX=$(out)" diff --git a/nix/mk_tests.nix b/nix/mk_tests.nix index d56dc7155dc..458ef9320ac 100644 --- a/nix/mk_tests.nix +++ b/nix/mk_tests.nix @@ -33,6 +33,7 @@ { tests-name , tests-command , has-wp-proofs ? false +, cover ? true } : stdenvNoCC.mkDerivation { @@ -68,14 +69,28 @@ stdenvNoCC.mkDerivation { else "" ; preBuild = - if has-wp-proofs + (if has-wp-proofs + then '' + mkdir home + HOME=$(pwd)/home + why3 config detect + export FRAMAC_WP_CACHE=offline + export FRAMAC_WP_CACHEDIR=$wp_cache + '' + else "") + + (if cover + then '' + mkdir coverage + export DUNE_WORKSPACE="dev/dune-workspace.cover" + export BISECT_FILE="$(pwd)/coverage/bisect-" + '' + else ""); + + postBuild = + if cover then '' - mkdir home - HOME=$(pwd)/home - why3 config detect - export FRAMAC_WP_CACHE=offline - export FRAMAC_WP_CACHEDIR=$wp_cache - '' + bisect-ppx-report cobertura --coverage-path=coverage coverage.xml + '' else "" ; buildPhase = '' @@ -87,6 +102,7 @@ stdenvNoCC.mkDerivation { # No installation required installPhase = '' - touch $out + mkdir $out + cp -r coverage.xml $out ''; } diff --git a/nix/pkgs.nix b/nix/pkgs.nix index 8f08f15e2ed..a386bb99cb8 100644 --- a/nix/pkgs.nix +++ b/nix/pkgs.nix @@ -23,11 +23,16 @@ let # Builds frama-c = oself.callPackage ./frama-c.nix {}; + frama-c-no-cover = oself.callPackage ./frama-c.nix { cover = false ; }; frama-c-hdrck = oself.callPackage ./frama-c-hdrck.nix {}; frama-c-lint = oself.callPackage ./frama-c-lint.nix {}; # Tests - default-config-tests = oself.callPackage ./default-config-tests.nix {}; + default-config-tests = oself.callPackage ./default-config-tests.nix { + frama-c-nocover = oself.frama-c.override { + cover = false ; + } ; + }; e-acsl-tests = oself.callPackage ./e-acsl-tests.nix { config = ""; }; e-acsl-dev-tests = oself.callPackage ./e-acsl-tests.nix { config = "dev"; }; eva-default-tests = oself.callPackage ./eva-tests.nix { config = ""; }; @@ -52,7 +57,10 @@ let api-doc = oself.callPackage ./api-doc.nix {}; manuals = oself.callPackage ./manuals.nix {}; src-distrib-tests = oself.callPackage ./src-distrib-tests.nix { - frama-c-release = oself.frama-c.override { release_mode = true ; } ; + frama-c-release = oself.frama-c.override { + release_mode = true ; + cover = false ; + } ; }; }; overlay = self: super: { diff --git a/nix/ts-api.nix b/nix/ts-api.nix index cda9f980c8d..064a4207d09 100644 --- a/nix/ts-api.nix +++ b/nix/ts-api.nix @@ -28,11 +28,15 @@ stdenv.mkDerivation rec { ''; buildPhase = '' + mkdir coverage + export BISECT_FILE="$(pwd)/coverage/bisect-" make -C ivette check-api + bisect-ppx-report cobertura --coverage-path=coverage coverage.xml ''; # No installation required installPhase = '' - touch $out + mkdir $out + cp -r coverage.xml $out ''; } -- GitLab