Implement the run feature
parent
00c3cee149
commit
5c57df91a5
@ -0,0 +1,37 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
// const nijs = require("nijs");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
function nixEscapeString(string) {
|
||||||
|
return string
|
||||||
|
.replace(/\\/g, "\\\\")
|
||||||
|
.replace(/"/g, "\\\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = function generateEnvironment({ targetBinary, packages, binaryName }) {
|
||||||
|
// return nijs.jsToNix("foo", true);
|
||||||
|
|
||||||
|
// return nijs.jsToNix(function (args) {
|
||||||
|
// return args.pkgs().buildFHSUserEnv({
|
||||||
|
// name: path.basename(targetBinary)
|
||||||
|
// });
|
||||||
|
// }, true);
|
||||||
|
|
||||||
|
return `
|
||||||
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
|
pkgs.buildFHSUserEnv {
|
||||||
|
name = "${nixEscapeString(binaryName)}";
|
||||||
|
|
||||||
|
targetPkgs = pkgs: with pkgs; [
|
||||||
|
${packages.join(" ")}
|
||||||
|
];
|
||||||
|
|
||||||
|
runScript = pkgs.writeScript "run-${nixEscapeString(binaryName)}" ''
|
||||||
|
cmd="$1"
|
||||||
|
shift
|
||||||
|
exec -- "${nixEscapeString(targetBinary)}" "$@"
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
};
|
@ -0,0 +1,22 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const Promise = require("bluebird");
|
||||||
|
const nanoid = require("nanoid");
|
||||||
|
|
||||||
|
const runProgram = require("./run-program");
|
||||||
|
|
||||||
|
module.exports = function nixBuild(file) {
|
||||||
|
return Promise.try(() => {
|
||||||
|
let outLink = `/tmp/depfish-build-${nanoid()}`;
|
||||||
|
|
||||||
|
return Promise.try(() => {
|
||||||
|
return runProgram("nix", [
|
||||||
|
"build",
|
||||||
|
"--file", file,
|
||||||
|
"--out-link", outLink
|
||||||
|
]);
|
||||||
|
}).then(() => {
|
||||||
|
return outLink;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
@ -0,0 +1,28 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const Promise = require("bluebird");
|
||||||
|
const childProcess = require("child_process");
|
||||||
|
|
||||||
|
module.exports = function runProgram(binary, args = [], options = {}) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let proc = childProcess.spawn(binary, args, Object.assign({
|
||||||
|
stdio: [ process.stdin, process.stdout, process.stderr ]
|
||||||
|
}, options));
|
||||||
|
|
||||||
|
proc.on("error", (error) => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
|
||||||
|
proc.on("exit", (exitCode, signal) => {
|
||||||
|
if (exitCode === 0) {
|
||||||
|
resolve();
|
||||||
|
} else if (exitCode != null) {
|
||||||
|
reject(`Non-zero exit code: ${exitCode}`);
|
||||||
|
} else if (signal != null) {
|
||||||
|
reject(`Process terminated by signal: ${signal}`);
|
||||||
|
} else {
|
||||||
|
reject("Process exited abnormally");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
Loading…
Reference in New Issue