Port nix CI to flakes
Change bscpkgs repo url to sourcehut
This commit is contained in:
		
							parent
							
								
									b6903bc445
								
							
						
					
					
						commit
						d100b42e5a
					
				| @ -14,44 +14,44 @@ build:debian-testing: | |||||||
|     paths: |     paths: | ||||||
|       - install/ |       - install/ | ||||||
| 
 | 
 | ||||||
| build:rt-tests: | build:local: | ||||||
|   stage: build |   stage: build | ||||||
|   tags: |   tags: | ||||||
|     - nix |     - nix | ||||||
|   script: |   script: | ||||||
|     - nix build -L --no-link --tarball-ttl 0 --file nix/rt.nix bsc.ovni-rt |     - nix build -L --no-link .#ovniPackages.local | ||||||
|  | 
 | ||||||
|  | build:rt: | ||||||
|  |   stage: build | ||||||
|  |   tags: | ||||||
|  |     - nix | ||||||
|  |   script: | ||||||
|  |     - nix build -L --no-link .#ovniPackages.rt | ||||||
|  | 
 | ||||||
|  | build:debug: | ||||||
|  |   stage: build | ||||||
|  |   tags: | ||||||
|  |     - nix | ||||||
|  |   script: | ||||||
|  |     - nix build -L --no-link .#ovniPackages.debug | ||||||
| 
 | 
 | ||||||
| build:asan: | build:asan: | ||||||
|   stage: build |   stage: build | ||||||
|   tags: |   tags: | ||||||
|     - nix |     - nix | ||||||
|   script: |   script: | ||||||
|     - nix build -L --no-link --tarball-ttl 0 --file nix/rt.nix bsc.ovni-asan |     - nix build -L --no-link .#ovniPackages.asan | ||||||
| 
 | 
 | ||||||
| build:no-mpi: | build:nompi: | ||||||
|   stage: build |   stage: build | ||||||
|   tags: |   tags: | ||||||
|     - nix |     - nix | ||||||
|   script: |   script: | ||||||
|     - nix build -L --no-link --tarball-ttl 0 --file nix/rt.nix bsc.ovni-nompi |     - nix build -L --no-link .#ovniPackages.nompi | ||||||
| 
 | 
 | ||||||
| build:old-gcc: | build:compilers: | ||||||
|   stage: build |   stage: build | ||||||
|   tags: |   tags: | ||||||
|     - nix |     - nix | ||||||
|   script: |   script: | ||||||
|     - nix build -L --no-link --tarball-ttl 0 --file nix/rt.nix bsc.oldOvnis |     - nix build -L --no-link .#ovniPackages.compilers | ||||||
| 
 |  | ||||||
| build:old-gcc-no-lto: |  | ||||||
|   stage: build |  | ||||||
|   tags: |  | ||||||
|     - nix |  | ||||||
|   script: |  | ||||||
|     - nix build -L --no-link --tarball-ttl 0 --file nix/rt.nix bsc.oldOvnisNoLTO |  | ||||||
| 
 |  | ||||||
| build:old-gcc-release: |  | ||||||
|   stage: build |  | ||||||
|   tags: |  | ||||||
|     - nix |  | ||||||
|   script: |  | ||||||
|     - nix build -L --no-link --tarball-ttl 0 --file nix/rt.nix bsc.oldOvnisRelease |  | ||||||
|  | |||||||
							
								
								
									
										45
									
								
								flake.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								flake.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | |||||||
|  | { | ||||||
|  |   "nodes": { | ||||||
|  |     "bscpkgs": { | ||||||
|  |       "inputs": { | ||||||
|  |         "nixpkgs": [ | ||||||
|  |           "nixpkgs" | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1696596732, | ||||||
|  |         "narHash": "sha256-9kvkzMo6X1PyDpPfmPsEBZrMOIWqvEFNoa/3n5i37fI=", | ||||||
|  |         "ref": "refs/heads/master", | ||||||
|  |         "rev": "91cdc91738cbe7df4e283d31cf0fff74a31cdd1d", | ||||||
|  |         "revCount": 892, | ||||||
|  |         "type": "git", | ||||||
|  |         "url": "https://git.sr.ht/~rodarima/bscpkgs" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "type": "git", | ||||||
|  |         "url": "https://git.sr.ht/~rodarima/bscpkgs" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "nixpkgs": { | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1693663421, | ||||||
|  |         "narHash": "sha256-ImMIlWE/idjcZAfxKK8sQA7A1Gi/O58u5/CJA+mxvl8=", | ||||||
|  |         "path": "/nix/store/wl5m5xfayd69ycyspzyd4rilfgl6wmh0-source", | ||||||
|  |         "rev": "e56990880811a451abd32515698c712788be5720", | ||||||
|  |         "type": "path" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "id": "nixpkgs", | ||||||
|  |         "type": "indirect" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "root": { | ||||||
|  |       "inputs": { | ||||||
|  |         "bscpkgs": "bscpkgs", | ||||||
|  |         "nixpkgs": "nixpkgs" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "root": "root", | ||||||
|  |   "version": 7 | ||||||
|  | } | ||||||
							
								
								
									
										89
									
								
								flake.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								flake.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | |||||||
|  | { | ||||||
|  |   inputs.nixpkgs.url = "nixpkgs"; | ||||||
|  |   inputs.bscpkgs.url = "git+https://git.sr.ht/~rodarima/bscpkgs"; | ||||||
|  |   inputs.bscpkgs.inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|  | 
 | ||||||
|  |   nixConfig.bash-prompt = "\[nix-develop\]$ "; | ||||||
|  | 
 | ||||||
|  |   outputs = { self, nixpkgs, bscpkgs }: | ||||||
|  |   let | ||||||
|  |     pkgs = bscpkgs.outputs.legacyPackages.x86_64-linux; | ||||||
|  |     compilerList = with pkgs; [ | ||||||
|  |       #gcc49Stdenv # broken | ||||||
|  |       gcc6Stdenv | ||||||
|  |       gcc7Stdenv | ||||||
|  |       gcc8Stdenv | ||||||
|  |       gcc9Stdenv | ||||||
|  |       gcc10Stdenv | ||||||
|  |       gcc11Stdenv | ||||||
|  |       gcc12Stdenv | ||||||
|  |       gcc13Stdenv | ||||||
|  |     ]; | ||||||
|  |     lib = pkgs.lib; | ||||||
|  |   in { | ||||||
|  |     packages.x86_64-linux.ovniPackages = rec { | ||||||
|  |       # Build with the current source | ||||||
|  |       local = pkgs.ovni.overrideAttrs (old: { | ||||||
|  |         pname = "ovni-local"; | ||||||
|  |         src = self; | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       # Build in Debug mode | ||||||
|  |       debug = local.overrideAttrs (old: { | ||||||
|  |         pname = "ovni-debug"; | ||||||
|  |         cmakeBuildType = "Debug"; | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       # Without MPI | ||||||
|  |       nompi = local.overrideAttrs (old: { | ||||||
|  |         pname = "ovni-nompi"; | ||||||
|  |         buildInputs = lib.filter (x: x != pkgs.mpi ) old.buildInputs; | ||||||
|  |         cmakeFlags = old.cmakeFlags ++ [ "-DUSE_MPI=OFF" ]; | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       # Helper function to build with different compilers | ||||||
|  |       genOvniCC = stdenv: (local.override { | ||||||
|  |         stdenv = stdenv; | ||||||
|  |       }).overrideAttrs (old: { | ||||||
|  |         name = "ovni-gcc" + stdenv.cc.cc.version; | ||||||
|  |         cmakeFlags = old.cmakeFlags ++ [ | ||||||
|  |           "-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF" | ||||||
|  |         ]; | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       # Test several gcc versions | ||||||
|  |       compilers = let | ||||||
|  |         drvs = map genOvniCC compilerList; | ||||||
|  |       in pkgs.runCommand "ovni-compilers" { } '' | ||||||
|  |         printf "%s\n" ${builtins.toString drvs} > $out | ||||||
|  |       ''; | ||||||
|  | 
 | ||||||
|  |       # Enable RT tests | ||||||
|  |       rt = (local.override { | ||||||
|  |         # Provide the clang compiler as default | ||||||
|  |         stdenv = pkgs.stdenvClangOmpss2; | ||||||
|  |       }).overrideAttrs (old: { | ||||||
|  |         pname = "ovni-rt"; | ||||||
|  |         # We need to be able to exit the chroot to run Nanos6 tests, as they | ||||||
|  |         # require access to /sys for hwloc | ||||||
|  |         __noChroot = true; | ||||||
|  |         buildInputs = old.buildInputs ++ (with pkgs; [ nosv nanos6 nodes ]); | ||||||
|  |         cmakeFlags = old.cmakeFlags ++ [ "-DENABLE_ALL_TESTS=ON" ]; | ||||||
|  |         preConfigure = old.preConfigure or "" + '' | ||||||
|  |           export NODES_HOME="${pkgs.nodes}" | ||||||
|  |           export NANOS6_HOME="${pkgs.nanos6}" | ||||||
|  |         ''; | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       # Build with ASAN and pass RT tests | ||||||
|  |       asan = rt.overrideAttrs (old: { | ||||||
|  |         pname = "ovni-asan"; | ||||||
|  |         cmakeFlags = old.cmakeFlags ++ [ "-DCMAKE_BUILD_TYPE=Asan" ]; | ||||||
|  |         # Ignore leaks in tests for now, only check memory errors | ||||||
|  |         preCheck = old.preCheck + '' | ||||||
|  |           export ASAN_OPTIONS=detect_leaks=0 | ||||||
|  |         ''; | ||||||
|  |       }); | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								nix/ovni.nix
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								nix/ovni.nix
									
									
									
									
									
								
							| @ -1,33 +0,0 @@ | |||||||
| { |  | ||||||
|   stdenv |  | ||||||
| , cmake |  | ||||||
| , mpi |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| stdenv.mkDerivation rec { |  | ||||||
|   name = "ovni"; |  | ||||||
| 
 |  | ||||||
|   buildInputs = [ cmake mpi ]; |  | ||||||
| 
 |  | ||||||
|   # Prevent accidental reutilization of previous builds, as we are taking the |  | ||||||
|   # current directory as-is |  | ||||||
|   preConfigure = '' |  | ||||||
|     rm -rf build install |  | ||||||
| 
 |  | ||||||
|     # There is no /bin/bash |  | ||||||
|     patchShebangs test/*.sh |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   cmakeBuildType = "Debug"; |  | ||||||
|   cmakeFlags = [ "-DCMAKE_SKIP_BUILD_RPATH=OFF" ]; |  | ||||||
|   buildFlags = [ "VERBOSE=1" ]; |  | ||||||
|   preCheck = '' |  | ||||||
|     export CTEST_OUTPUT_ON_FAILURE=1 |  | ||||||
|   ''; |  | ||||||
|   dontStrip = true; |  | ||||||
|   doCheck = true; |  | ||||||
|   checkTarget = "test"; |  | ||||||
|   hardeningDisable = [ "all" ]; |  | ||||||
| 
 |  | ||||||
|   src = ../.; |  | ||||||
| } |  | ||||||
							
								
								
									
										103
									
								
								nix/rt.nix
									
									
									
									
									
								
							
							
						
						
									
										103
									
								
								nix/rt.nix
									
									
									
									
									
								
							| @ -1,103 +0,0 @@ | |||||||
| let |  | ||||||
|   pkgs = import (builtins.fetchTarball |  | ||||||
|     "https://pm.bsc.es/gitlab/rarias/bscpkgs/-/archive/master/bscpkgs-master.tar.gz"); |  | ||||||
| 
 |  | ||||||
|   rWrapper = pkgs.rWrapper.override { |  | ||||||
|     packages = with pkgs.rPackages; [ tidyverse rjson jsonlite egg viridis ]; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Recursively set MPI |  | ||||||
|   bsc = pkgs.bsc.extend (last: prev: { |  | ||||||
| 
 |  | ||||||
|     include-what-you-use = let |  | ||||||
|       gcc = pkgs.gcc; |  | ||||||
|       targetConfig = pkgs.stdenv.targetPlatform.config; |  | ||||||
|     in pkgs.wrapCCWith rec { |  | ||||||
|       cc = pkgs.include-what-you-use; |  | ||||||
|       extraBuildCommands = '' |  | ||||||
|         echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags |  | ||||||
|         echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-cflags |  | ||||||
|         echo "-isystem${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}/include" >> $out/nix-support/cc-cflags |  | ||||||
|         wrap include-what-you-use $wrapper $ccPath/include-what-you-use |  | ||||||
|         substituteInPlace "$out/bin/include-what-you-use" --replace 'dontLink=0' 'dontLink=1' |  | ||||||
|       ''; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     ovni-local = last.callPackage ./ovni.nix { }; |  | ||||||
| 
 |  | ||||||
|     # Build ovni with old gcc versions |  | ||||||
|     genOldOvni = stdenv: (last.ovni-local.override { |  | ||||||
|       stdenv = stdenv; |  | ||||||
|     }).overrideAttrs (old: { |  | ||||||
|       pname = old.name + "@" + stdenv.cc.cc.version; |  | ||||||
|       cmakeFlags = old.cmakeFlags ++ [ |  | ||||||
|         "-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF" |  | ||||||
|       ]; |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     oldCompilers = [ |  | ||||||
|       #pkgs.gcc49Stdenv # broken |  | ||||||
|       pkgs.gcc6Stdenv |  | ||||||
|       pkgs.gcc7Stdenv |  | ||||||
|       pkgs.gcc8Stdenv |  | ||||||
|       pkgs.gcc9Stdenv |  | ||||||
|       pkgs.gcc10Stdenv |  | ||||||
|       pkgs.gcc11Stdenv |  | ||||||
|       pkgs.gcc12Stdenv |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     oldOvnis = map last.genOldOvni last.oldCompilers; |  | ||||||
| 
 |  | ||||||
|     genOldOvniNoLTO = stdenv: (last.genOldOvni stdenv).overrideAttrs (old: { |  | ||||||
|       cmakeFlags = old.cmakeFlags ++ [ |  | ||||||
|         "-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF" |  | ||||||
|       ]; |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     oldOvnisNoLTO = map last.genOldOvniNoLTO last.oldCompilers; |  | ||||||
| 
 |  | ||||||
|     genOldOvniRelease = stdenv: (last.genOldOvni stdenv).overrideAttrs (old: { |  | ||||||
|       cmakeBuildType = "Release"; |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     oldOvnisRelease = map last.genOldOvniRelease last.oldCompilers; |  | ||||||
| 
 |  | ||||||
|     ovni-nompi = last.ovni-local.overrideAttrs (old: { |  | ||||||
|       buildInputs = pkgs.lib.filter (x: x != last.mpi ) old.buildInputs; |  | ||||||
|       cmakeFlags = old.cmakeFlags ++ [ "-DUSE_MPI=OFF" ]; |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     # Now we rebuild ovni with the Nanos6 and nOS-V versions, which were |  | ||||||
|     # linked to the previous ovni. We need to be able to exit the chroot |  | ||||||
|     # to run Nanos6 tests, as they require access to /sys for hwloc |  | ||||||
|     ovni-rt = (last.ovni-local.override { |  | ||||||
|       stdenv = last.stdenvClangOmpss2; |  | ||||||
|     }).overrideAttrs (old: { |  | ||||||
|       __noChroot = true; |  | ||||||
|       buildInputs = old.buildInputs ++ [ |  | ||||||
|         last.include-what-you-use |  | ||||||
|         pkgs.gdb |  | ||||||
|         last.nosv |  | ||||||
|         last.nanos6 |  | ||||||
|         last.nodes |  | ||||||
|         pkgs.strace |  | ||||||
|       ]; |  | ||||||
|       cmakeFlags = old.cmakeFlags ++ [ "-DENABLE_ALL_TESTS=ON" ]; |  | ||||||
|       preConfigure = old.preConfigure + '' |  | ||||||
|         export NODES_HOME="${last.nodes}" |  | ||||||
|         export NANOS6_HOME="${last.nanos6}" |  | ||||||
|       ''; |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     ovni-asan = last.ovni-rt.overrideAttrs (old: { |  | ||||||
|       cmakeFlags = old.cmakeFlags ++ [ "-DCMAKE_BUILD_TYPE=Asan" ]; |  | ||||||
|       # Ignore leaks in tests for now, only check memory errors |  | ||||||
|       preCheck = old.preCheck + '' |  | ||||||
|         export ASAN_OPTIONS=detect_leaks=0 |  | ||||||
|       ''; |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
| in |  | ||||||
|   pkgs // { bsc = bsc; } |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user