kopia lustrzana https://github.com/c9/core
100 wiersze
3.1 KiB
JavaScript
100 wiersze
3.1 KiB
JavaScript
#!/usr/bin/env node
|
|
"use strict";
|
|
|
|
var DEFAULT_SETTINGS = "deploy";
|
|
var ALWAYS_INCLUDE_SETTINGS = ["node", "mode", "manifest", "domains", "primaryDomain", "primaryBaseUrl", "baseUrlPattern"];
|
|
|
|
var fs = require("fs");
|
|
var optimist = require("optimist");
|
|
var loadManifest = require("c9/manifest").load;
|
|
var reJSON = require("c9/json-with-re");
|
|
|
|
module.exports = generateSettings;
|
|
|
|
if (!module.parent) {
|
|
main(process.argv.slice(2), function(err) {
|
|
if (err) {
|
|
console.error(err);
|
|
console.error("Stacktrace: ", err.stack);
|
|
process.exit(1);
|
|
}
|
|
});
|
|
}
|
|
|
|
function main(argv, callback) {
|
|
var options = optimist(argv)
|
|
.usage("Usage: $0 [CONFIG_NAME] [--help]")
|
|
.alias("s", "settings")
|
|
.default("settings", DEFAULT_SETTINGS)
|
|
.describe("settings", "Settings file to use")
|
|
.default("source", __dirname + "/../../..")
|
|
.describe("source", "Source directory")
|
|
.describe("targetFile", "Target package.json")
|
|
.boolean("help")
|
|
.describe("help", "Show command line options.");
|
|
|
|
argv = options.argv;
|
|
if (argv.help) {
|
|
options.showHelp();
|
|
return callback();
|
|
}
|
|
|
|
if (argv._.length != 1) {
|
|
options.showHelp();
|
|
return callback();
|
|
}
|
|
var config = argv._[0];
|
|
var settingsName = argv.settings;
|
|
var source = argv.source;
|
|
|
|
generateSettings(source, config, settingsName, function(err, contents) {
|
|
if (err) return callback(err);
|
|
|
|
if (argv.targetFile)
|
|
fs.writeFileSync(argv.targetFile, contents);
|
|
else
|
|
console.log(contents);
|
|
});
|
|
}
|
|
|
|
function generateSettings(source, config, settingsName, callback) {
|
|
// Check if build already exists.
|
|
var manifest = loadManifest(source);
|
|
manifest.hostname = "[%type%]-[%provider%]-[%region%]-[%index%]-[%env%]";
|
|
|
|
var oldSettings;
|
|
try {
|
|
oldSettings = require(source + "/settings/" + settingsName)(manifest);
|
|
} catch (e) {
|
|
return callback(e);
|
|
}
|
|
|
|
var buildConfig = require(source + "/configs/" + config).buildConfig({mode: settingsName});
|
|
|
|
if (buildConfig.settingsInclude == "*") {
|
|
newSettings = oldSettings;
|
|
}
|
|
else {
|
|
buildConfig.settingsInclude = buildConfig.settingsInclude.concat(ALWAYS_INCLUDE_SETTINGS);
|
|
var newSettings =
|
|
buildConfig.settingsInclude.reduce(function(settings, name) {
|
|
settings[name] = oldSettings[name];
|
|
return settings;
|
|
}, {});
|
|
}
|
|
|
|
newSettings.node = oldSettings.node;
|
|
|
|
var contents =
|
|
"var hostname = require('c9/hostname');\n" +
|
|
"var reJSON = require('c9/json-with-re');\n" +
|
|
"var fill = require('simple-template').fill;\n" +
|
|
"module.exports = function() {\n" +
|
|
" var options = hostname.parse(hostname.get());\n" +
|
|
" options.root = __dirname + '/..';\n" +
|
|
" var template = " + reJSON.stringify(newSettings, 2).replace(new RegExp(source, "g"), "[%root%]") + ";\n" +
|
|
" return reJSON.parse(fill(JSON.stringify(template), options));\n" +
|
|
"};";
|
|
|
|
callback(null, contents);
|
|
} |