Commit 291b6d1cb650
Changed files (4)
.builds/nixos.19.09.yml
@@ -1,9 +0,0 @@
-image: nixos/19.09
-sources:
- - https://gitlab.com/vdemeester/home.git
-secrets:
- - 0818d60d-b587-4d4e-81d8-dc15072ccb97
-tasks:
-- pkgs: |
- export CACHIX_SIGNING_KEY=$(cat ~/.cachix.key)
- nix-build home/pkgs | cachix push shortbrain
.builds/nixos.20.03.yml → .builds/nixos.yml
@@ -6,4 +6,4 @@ secrets:
tasks:
- pkgs: |
export CACHIX_SIGNING_KEY=$(cat ~/.cachix.key)
- nix-build home/pkgs | cachix push shortbrain
+ nix-build ci.nix -A cacheOutputs | cachix push shortbrain
pkgs/default.nix
@@ -1,7 +1,5 @@
-{ system ? builtins.currentSystem }:
-let
- pkgs = import <nixpkgs> { inherit system; };
-in
+{ pkgs ? import <nixpkgs> {} }:
+
rec {
# pre nur-packages import
scripts = pkgs.callPackage ./scripts {};
ci.nix
@@ -0,0 +1,58 @@
+# This file provides all the buildable and cacheable packages and
+# package outputs in you package set. These are what gets built by CI,
+# so if you correctly mark packages as
+#
+# - broken (using `meta.broken`),
+# - unfree (using `meta.license.free`), and
+# - locally built (using `preferLocalBuild`)
+#
+# then your CI will be able to build and cache only those packages for
+# which this is possible.
+
+{ pkgs ? import <nixpkgs> {} }:
+
+with builtins;
+let
+ isReserved = n: n == "lib" || n == "overlays" || n == "modules";
+ isDerivation = p: isAttrs p && p ? type && p.type == "derivation";
+ isBuildable = p: !(p.meta.broken or false) && p.meta.license.free or true;
+ isCacheable = p: !(p.preferLocalBuild or false);
+ shouldRecurseForDerivations = p: isAttrs p && p.recurseForDerivations or false;
+
+ nameValuePair = n: v: { name = n; value = v; };
+
+ concatMap = builtins.concatMap or (f: xs: concatLists (map f xs));
+
+ flattenPkgs = s:
+ let
+ f = p:
+ if shouldRecurseForDerivations p then flattenPkgs p
+ else if isDerivation p then [ p ]
+ else [];
+ in
+ concatMap f (attrValues s);
+
+ outputsOf = p: map (o: p.${o}) p.outputs;
+
+ nurAttrs = import ./pkgs/default.nix { inherit pkgs; };
+
+ nurPkgs =
+ flattenPkgs
+ (
+ listToAttrs
+ (
+ map (n: nameValuePair n nurAttrs.${n})
+ (
+ filter (n: !isReserved n)
+ (attrNames nurAttrs)
+ )
+ )
+ );
+in
+rec {
+ buildPkgs = filter isBuildable nurPkgs;
+ cachePkgs = filter isCacheable buildPkgs;
+
+ buildOutputs = concatMap outputsOf buildPkgs;
+ cacheOutputs = concatMap outputsOf cachePkgs;
+}