diff options
author | Ben Sima <ben@bsima.me> | 2025-01-06 14:27:31 -0500 |
---|---|---|
committer | Ben Sima <ben@bsima.me> | 2025-01-06 14:27:31 -0500 |
commit | d9fb7a85c920c9332fba34087fe8527d140b65f0 (patch) | |
tree | b99eac825214df8120db4f0e5143d7e1ac64a0e5 /Omni/Bild.hs | |
parent | 4a1ce4ecad5b4d41494f65887a7094685739e75b (diff) |
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.
Diffstat (limited to 'Omni/Bild.hs')
-rwxr-xr-x | Omni/Bild.hs | 41 |
1 files changed, 19 insertions, 22 deletions
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) |