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