Closed LoveIsGrief closed 1 year ago
When setting the option, the resulting docker-compose.yaml always has an image set by services.<name>.service.image.
docker-compose.yaml
services.<name>.service.image
These lines seem to be the cause https://github.com/hercules-ci/arion/blob/f0436c8478d1b5530c115a6b1202c4478dfe2f81/src/nix/modules/service/image.nix#L167-L177
service.image ends up always being set which also always sets nixBuild - at least that's my evaluation. I tried to make it optional, but failed to set the service.build.... fields :shrug:
service.image
nixBuild
service.build....
diff --git a/src/nix/modules/service/docker-compose-service.nix b/src/nix/modules/service/docker-compose-service.nix index 061ae8b..c038ac6 100644 --- a/src/nix/modules/service/docker-compose-service.nix +++ b/src/nix/modules/service/docker-compose-service.nix @@ -86,7 +86,8 @@ in description = serviceRef "environment"; }; service.image = mkOption { - type = str; + type = nullOr str; + default = null; description = serviceRef "image"; }; service.command = mkOption { @@ -328,8 +329,9 @@ in volumes environment sysctls - image ; + } // lib.optionalAttrs (config.service.image != null) { + inherit (config.service) image; } // lib.optionalAttrs (config.service.build.context != null) { inherit (config.service) build; } // lib.optionalAttrs (cap_add != []) { diff --git a/src/nix/modules/service/image.nix b/src/nix/modules/service/image.nix index 706a5c1..b6aa289 100644 --- a/src/nix/modules/service/image.nix +++ b/src/nix/modules/service/image.nix @@ -163,17 +163,31 @@ in ''; }; }; - config = { - build.image = builtImage; - build.imageName = config.build.image.imageName; - build.imageTag = + config = let + + image = builtImage; + imageName = config.build.image.imageName; + imageTag = if config.build.image.imageTag != "" then config.build.image.imageTag else lib.head (lib.strings.splitString "-" (baseNameOf config.build.image.outPath)); - service.image = lib.mkDefault "${config.build.imageName}:${config.build.imageTag}"; - image.rawConfig.Cmd = config.image.command; + serviceImage = lib.mkDefault "${imageName}:${imageTag}"; + hasContext = config.service.build.context != null; - image.nixBuild = lib.mkDefault (priorityIsDefault options.service.image); - }; + in lib.mkMerge [ + { + build = { + inherit image imageName imageTag; + }; + image.rawConfig.Cmd = config.image.command; + image.nixBuild = false; + } + ( lib.mkIf (hasContext == false) + { + service.image = serviceImage; + image.nixBuild = lib.mkDefault (priorityIsDefault options.service.image); + }) + ]; }
Maybe somebody with more nix and nixpkgs knowledge can help solve this.
nix
nixpkgs
When setting the option, the resulting
docker-compose.yaml
always has an image set byservices.<name>.service.image
.These lines seem to be the cause https://github.com/hercules-ci/arion/blob/f0436c8478d1b5530c115a6b1202c4478dfe2f81/src/nix/modules/service/image.nix#L167-L177
service.image
ends up always being set which also always setsnixBuild
- at least that's my evaluation. I tried to make it optional, but failed to set theservice.build....
fields :shrug:Maybe somebody with more
nix
andnixpkgs
knowledge can help solve this.