UNPKG

2.34 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const Doer_1 = __importDefault(require("./Doer"));
7const VERSION = require('../package').version;
8/**
9 * Generates a default.nix for a `SoftwareEnvironment` instance
10 */
11class NixGenerator extends Doer_1.default {
12 /**
13 * Generate a default.nix file for a `SoftwareEnvironment` instance
14 *
15 * @param environ `SoftwareEnvironment` instance
16 */
17 generate(environ, folder) {
18 this.folder = folder;
19 let comments = true;
20 let nixfile = '';
21 if (!environ)
22 return '';
23 if (comments) {
24 nixfile += `# Generated by Dockter ${VERSION} at ${new Date().toISOString()}
25# To stop Dockter generating this file and start editing it yourself,
26# rename it to "default.nix".\n`;
27 }
28 nixfile += `with import (builtins.fetchTarball {
29 name = "stencila-18.12";
30 url = https://github.com/stencila/nixpkgs/archive/18.12.tar.gz;
31 sha256 = "0kygd44qc2d41dh6pccjiisdvxgpnj9njmhalr0mhrh971xxgnkz";
32}) {};
33
34stdenv.mkDerivation rec {
35 name = "${environ.name}";
36 buildInputs = [
37 bashInteractive coreutils utillinux findutils gnugrep which openssl cacert
38`;
39 for (let softwareRequirement of environ.softwareRequirements) {
40 let platform = softwareRequirement.runtimePlatform;
41 if (platform === 'R') {
42 nixfile += ` R\n`;
43 }
44 if (platform === 'Node.js') {
45 nixfile += ` nodejs\n`;
46 }
47 if (platform === 'Python') {
48 nixfile += ` python37\n`;
49 }
50 let language = platform.toLowerCase().replace(/\.[^/.]+$/, '');
51 if (language === 'python') {
52 language = 'python37';
53 }
54 let pkgs = softwareRequirement.softwareRequirements.map((x) => `${language}Packages.${x.name.toLowerCase()}`).join(' ');
55 nixfile += ` ${pkgs}\n`;
56 }
57 nixfile = nixfile.trim();
58 nixfile += `
59 ];
60}\n`;
61 // Write `.default.nix` for use by Nix
62 this.write('.default.nix', nixfile);
63 return nixfile;
64 }
65}
66exports.default = NixGenerator;