on master help sign in
Add nix attribute for qemu/virtualbox image
commit6072726850ae5d567666ee1c55ec33ad19c6ca86 authorAlexandre Esteves <alexandre.fmp.esteves@gmail.com> dateTue 5 May 2020, 23:14 (6 years ago) parent662777e
1 file changed+33−16
default.nix+33−16
default.nix+33−16
@@ -167,29 +167,37 @@ in rec {
167167
168168 inherit mkAssets;
169169
170− serverExe = backend: frontend: assets: optimizationLevel: version:
170+ serverExe = backend: frontend: assets: optimizationLevel: bundledConfig: version:
171171 pkgs.runCommand "serverExe" {} ''
172172 mkdir $out
173173 set -eux
174174 ln -s "${if profiling then backend else haskellLib.justStaticExecutables backend}"/bin/* $out/
175175 ln -s "${mkAssets assets}" $out/static.assets
176176 ln -s ${mkAssets (compressedJs frontend optimizationLevel)} $out/frontend.jsexe.assets
177+ ${pkgs.lib.optionalString (bundledConfig != null) "ln -s ${bundledConfig} $out/config"}
177178 echo ${version} > $out/version
178179 '';
179180
181+ mkNixOS = imports: import (pkgs.path + /nixos) {
182+ system = "x86_64-linux";
183+ configuration = { inherit imports; };
184+ };
185+
186+ serverImports = args: [
187+ (serverModules.mkDefaultNetworking args)
188+ (serverModules.mkObeliskApp args)
189+ ];
190+
180191 server = { exe, hostName, adminEmail, routeHost, enableHttps, version, module ? serverModules.mkBaseEc2 }@args:
181− let
182− nixos = import (pkgs.path + /nixos);
183− in nixos {
184− system = "x86_64-linux";
185− configuration = {
186− imports = [
187− (module { inherit exe hostName adminEmail routeHost enableHttps version; nixosPkgs = pkgs; })
188− (serverModules.mkDefaultNetworking args)
189− (serverModules.mkObeliskApp args)
190− ];
191− };
192− };
192+ mkNixOS (serverImports args ++ [
193+ (module { inherit exe hostName adminEmail routeHost enableHttps version; nixosPkgs = pkgs; })
194+ ]);
195+
196+ mkVM = { exe, hostName, adminEmail, routeHost, enableHttps, version, module }@args:
197+ mkNixOS (serverImports args ++ [
198+ (pkgs.path + /nixos/modules/virtualisation/virtualbox-image.nix)
199+ (module { inherit exe hostName adminEmail routeHost enableHttps version; nixosPkgs = pkgs; })
200+ ]);
193201
194202 # An Obelisk project is a reflex-platform project with a predefined layout and role for each component
195203 project = base': projectDefinition:
@@ -309,14 +317,20 @@ in rec {
309317 in allConfig;
310318 in (mkProject (projectDefinition args)).projectConfig);
311319 mainProjectOut = projectOut { inherit system; };
312− serverOn = projectInst: version: serverExe
320+ serverOn = projectInst: bundledConfig: version: serverExe
313321 projectInst.ghc.backend
314322 mainProjectOut.ghcjs.frontend
315323 projectInst.passthru.staticFiles
316324 projectInst.passthru.__closureCompilerOptimizationLevel
325+ bundledConfig
317326 version;
318− linuxExe = serverOn (projectOut { system = "x86_64-linux"; });
327+ linuxExe = serverOn (projectOut { system = "x86_64-linux"; }) null;
328+ ovaExe = serverOn (projectOut { system = "x86_64-linux"; }) (base' + /config);
319329 dummyVersion = "Version number is only available for deployments";
330+
331+ vm = args@{ hostName, adminEmail, routeHost, enableHttps, version, module ? (_:_:{}) }:
332+ mkVM (args // { inherit module; exe = ovaExe version; });
333+
320334 in mainProjectOut // {
321335 __unstable__.profiledObRun = let
322336 profiled = projectOut { inherit system; enableLibraryProfiling = true; };
@@ -348,7 +362,10 @@ in rec {
348362
349363 linuxExeConfigurable = linuxExe;
350364 linuxExe = linuxExe dummyVersion;
351− exe = serverOn mainProjectOut dummyVersion;
365+ exe = serverOn mainProjectOut null dummyVersion;
366+ inherit vm;
367+ ova = args@{ hostName, adminEmail, routeHost, enableHttps, version, module ? (_: _: {}) }:
368+ (vm args).config.system.build.virtualBoxOVA;
352369 server = args@{ hostName, adminEmail, routeHost, enableHttps, version, module ? serverModules.mkBaseEc2 }:
353370 server (args // { exe = linuxExe version; });
354371 obelisk = import (base' + "/.obelisk/impl") {};