Deployment and lifecycle management for Nix
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

building: more flake parts options, add system targeting

+86 -30
+10
.forgejo/workflows/build-x86_64.yaml
··· 17 17 - run: | 18 18 export HOME=$PWD 19 19 nix develop .# --command seed-ci --attic-upload=true --nom=false --sower-seed=true --system x86_64-linux --cache-build-deps=true 20 + 21 + sower: 22 + runs-on: local/x86_64-linux 23 + 24 + steps: 25 + - uses: actions/checkout@v4 26 + 27 + - run: | 28 + export HOME=$PWD 29 + nix run .#client -- builder build --workers 4 --system x86_64-linux --debug
+12 -7
cmd/client/builder/main.go
··· 38 38 q := queue.NewPool(int64(workers)) 39 39 defer q.Release() 40 40 41 - err := evalJobs(workers, q, pushResult) 41 + err := evalJobs(workers, "", q, pushResult) 42 42 if err != nil { 43 43 return err 44 44 } ··· 50 50 return nil 51 51 } 52 52 53 - func Build(workers int) error { 53 + func Build(workers int, system string) error { 54 54 q := queue.NewPool(int64(workers)) 55 55 defer q.Release() 56 56 57 - err := evalJobs(workers, q, buildResult) 57 + err := evalJobs(workers, system, q, buildResult) 58 58 if err != nil { 59 59 return err 60 60 } ··· 66 66 return nil 67 67 } 68 68 69 - func Eval(workers int) error { 69 + func Eval(workers int, system string) error { 70 70 q := queue.NewPool(1) 71 71 defer q.Release() 72 72 73 - err := evalJobs(workers, q, printResult) 73 + err := evalJobs(workers, system, q, printResult) 74 74 if err != nil { 75 75 return err 76 76 } ··· 78 78 return nil 79 79 } 80 80 81 - func evalJobs(workers int, resultQueue *queue.Queue, resultFunc func(evalResult) error) error { 81 + func evalJobs(workers int, system string, resultQueue *queue.Queue, resultFunc func(evalResult) error) error { 82 82 if workers == 0 { 83 83 return fmt.Errorf("no workers specified") 84 84 } 85 85 86 - cmd := exec.Command("nix-eval-jobs", "--flake", ".#sowerJobs", "--force-recurse", "--workers", fmt.Sprint(workers)) 86 + target := ".#sowerJobs" 87 + if system != "" { 88 + target = fmt.Sprintf(".#sowerJobs.%s", system) 89 + } 90 + 91 + cmd := exec.Command("nix-eval-jobs", "--flake", target, "--force-recurse", "--workers", fmt.Sprint(workers)) 87 92 88 93 stdout, err := cmd.StdoutPipe() 89 94 if err != nil {
+6 -4
cmd/client/main.go
··· 41 41 } 42 42 43 43 type builderBuildCmd struct { 44 - Workers int `arg:"--workers,-w"` 44 + Workers int `arg:"--workers,-w"` 45 + System string `arg:"--system"` 45 46 } 46 47 47 48 type builderEvalCmd struct { 48 - Workers int `arg:"--workers,-w"` 49 + Workers int `arg:"--workers,-w"` 50 + System string `arg:"--system"` 49 51 } 50 52 51 53 type daemonCmd struct { ··· 228 230 func buildCommand(cfg config) { 229 231 switch { 230 232 case cfg.Builder.Build != nil: 231 - err := builder.Build(cfg.Builder.Build.Workers) 233 + err := builder.Build(cfg.Builder.Build.Workers, cfg.Builder.Build.System) 232 234 if err != nil { 233 235 slog.Error("Failed to eval", "error", err) 234 236 os.Exit(1) 235 237 } 236 238 case cfg.Builder.Eval != nil: 237 - err := builder.Eval(cfg.Builder.Eval.Workers) 239 + err := builder.Eval(cfg.Builder.Eval.Workers, cfg.Builder.Eval.System) 238 240 if err != nil { 239 241 slog.Error("Failed to eval", "error", err) 240 242 os.Exit(1)
+1 -1
flake.nix
··· 14 14 { 15 15 imports = [ 16 16 ./nix/lib.nix 17 - ./nix/flake-module.nix 17 + ./nix/flake/module.nix 18 18 ./nix/legacy-flake-module.nix 19 19 inputs.process-compose-flake.flakeModule 20 20 ];
-15
nix/flake-module.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./sowerjobs.nix 5 - ]; 6 - 7 - perSystem = 8 - { 9 - self', 10 - ... 11 - }: 12 - { 13 - sowerJobs = self'.packages; 14 - }; 15 - }
+32
nix/flake/module.nix
··· 1 + { config, lib, ... }: 2 + { 3 + imports = [ 4 + ./sower.nix 5 + ./sowerjobs.nix 6 + ]; 7 + 8 + perSystem = 9 + { 10 + self', 11 + ... 12 + }: 13 + let 14 + cfg = config.sower.jobs; 15 + is_service = builtins.hasAttr "sowerServices"; 16 + checks = lib.mapAttrs' (n: v: lib.nameValuePair "check/${n}" v) self'.checks; 17 + packages = lib.mapAttrs' (n: v: lib.nameValuePair "package/${n}" v) ( 18 + lib.filterAttrs (_: v: !(is_service v)) self'.packages 19 + ); 20 + services = lib.mapAttrs' (n: v: lib.nameValuePair "service/${n}" v) ( 21 + lib.filterAttrs (_: v: is_service v) self'.packages 22 + ); 23 + in 24 + { 25 + 26 + sowerJobs = lib.mkMerge [ 27 + (lib.mkIf cfg.checks.enable checks) 28 + (lib.mkIf cfg.packages.enable packages) 29 + (lib.mkIf cfg.services.enable services) 30 + ]; 31 + }; 32 + }
+24
nix/flake/sower.nix
··· 1 + { lib, ... }: 2 + { 3 + options = { 4 + sower = { 5 + enable = lib.mkOption { 6 + type = lib.types.bool; 7 + description = "enable sower features"; 8 + default = true; 9 + }; 10 + 11 + jobs = { 12 + checks.enable = lib.mkEnableOption "building checks"; 13 + packages.enable = lib.mkEnableOption "building packages without services"; 14 + services.enable = lib.mkEnableOption "building packages with services"; 15 + }; 16 + }; 17 + }; 18 + 19 + config = { 20 + sower.jobs = { 21 + services.enable = lib.mkDefault true; 22 + }; 23 + }; 24 + }
+1 -3
nix/sowerjobs.nix nix/flake/sowerjobs.nix
··· 14 14 type = types.lazyAttrsOf types.package; 15 15 default = { }; 16 16 description = '' 17 - An attribute set of sowerJobs to be built by [`nix build`](https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-build.html). 18 - 19 - `nix build .#<name>` will build `sowerJobs.<name>`. 17 + An attribute set of sowerJobs, similar to packages 20 18 ''; 21 19 }; 22 20 file = ./sowerjobs.nix;