From d9fb7a85c920c9332fba34087fe8527d140b65f0 Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Mon, 6 Jan 2025 14:27:31 -0500 Subject: Use x bit to identify buildable nix targets This replaces the manually-curated nixTargets list in Bild.hs. Now any nix file that has the executable bit set will be built. I added run.sh shebangs to each of the buildable nix targets as well. When executing these, they will succeed at building, but they have no 'out' metadata, and so when run.sh tries to exec them, it will fail. This is fine for now. How would one go about execing a linux tree anyway? If all of the nix targets output something standard like a qemu image or a container, then I could have a standard wrapper that calls the image and starts the system. That might be the ideal way to have a runnable nix target. But this would require rethinking my infrastructure and how to deploy things, so I can't quite do that yet. --- Omni/Bild.hs | 41 +++++++++++++++++++---------------------- Omni/Cloud.nix | 1 + Omni/Dev/Beryllium.nix | 1 + Omni/Dev/Lithium.nix | 1 + Omni/Os/Boot.nix | 1 + 5 files changed, 23 insertions(+), 22 deletions(-) mode change 100644 => 100755 Omni/Cloud.nix mode change 100644 => 100755 Omni/Dev/Beryllium.nix mode change 100644 => 100755 Omni/Dev/Lithium.nix mode change 100644 => 100755 Omni/Os/Boot.nix (limited to 'Omni') diff --git a/Omni/Bild.hs b/Omni/Bild.hs index 92bbb78..9c649a7 100755 --- a/Omni/Bild.hs +++ b/Omni/Bild.hs @@ -450,25 +450,13 @@ isBuildableNs = \case (Namespace _ Namespace.Keys) -> False (Namespace _ Namespace.Lisp) -> True (Namespace _ Namespace.Md) -> False - (Namespace path Namespace.Nix) - | path `elem` nixTargets -> True - | otherwise -> False + (Namespace _ Namespace.Nix) -> True (Namespace _ Namespace.None) -> False (Namespace _ Namespace.Py) -> True (Namespace _ Namespace.Sh) -> False (Namespace _ Namespace.Scm) -> True (Namespace _ Namespace.Rs) -> True (Namespace _ Namespace.Toml) -> True - where - nixTargets = - [ ["Omni", "Cloud"], - ["Omni", "Dev"], - ["Omni", "Dev", "Lithium"], - ["Omni", "Dev", "Beryllium"], - ["Omni", "Os", "Boot"], - ["Biz", "Dragons", "Analysis"], - ["Biz"] - ] -- | The default output directory. This is not IO because I don't want to -- refactor all of my code right now, but it probably should be. @@ -946,15 +934,24 @@ build andTest loud jobs cpus analysis = p <- Dir.getPermissions <| root outToPath out Dir.setPermissions (root outToPath out) (Dir.setOwnerExecutable True p) pure (Exit.ExitSuccess, mempty) - NixBuild -> do - Log.info ["bild", "nix", user <> "@" <> host, nschunk namespace] - proc loud namespace (toNixFlag compiler) - <| compilerFlags - ++ [ "--max-jobs", - Text.pack <| str jobs, - "--cores", - Text.pack <| str cpus - ] + NixBuild -> + Dir.getPermissions quapath /> Dir.executable +> \isExe -> + isExe + ?: ( Log.info ["bild", "nix", user <> "@" <> host, nschunk namespace] + >> proc + loud + namespace + (toNixFlag compiler) + ( compilerFlags + ++ [ "--max-jobs", + Text.pack <| str jobs, + "--cores", + Text.pack <| str cpus + ] + ), + Log.warn ["bild", "nix", nschunk namespace, "x bit not set, not building"] + >> pure (Exit.ExitSuccess, mempty) + ) Copy -> do Log.warn ["bild", "copy", "not implemented yet", nschunk namespace] pure (Exit.ExitSuccess, mempty) diff --git a/Omni/Cloud.nix b/Omni/Cloud.nix old mode 100644 new mode 100755 index 8d5095d..9d1712f --- a/Omni/Cloud.nix +++ b/Omni/Cloud.nix @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh {bild}: # Cloud infrastructure, always online. Mostly for messaging-related stuff. bild.os { diff --git a/Omni/Dev/Beryllium.nix b/Omni/Dev/Beryllium.nix old mode 100644 new mode 100755 index 8452d1e..50dd652 --- a/Omni/Dev/Beryllium.nix +++ b/Omni/Dev/Beryllium.nix @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh {bild}: bild.os { imports = [ diff --git a/Omni/Dev/Lithium.nix b/Omni/Dev/Lithium.nix old mode 100644 new mode 100755 index 72a841f..3063b1b --- a/Omni/Dev/Lithium.nix +++ b/Omni/Dev/Lithium.nix @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh {bild}: # Dev machine for work and building stuff. bild.os { diff --git a/Omni/Os/Boot.nix b/Omni/Os/Boot.nix old mode 100644 new mode 100755 index bfbae8c..58c7f70 --- a/Omni/Os/Boot.nix +++ b/Omni/Os/Boot.nix @@ -1,3 +1,4 @@ +#!/usr/bin/env run.sh {bild}: /* This target creates a qcow2 image of a barebones NixOS VM which should be used -- cgit v1.2.3