Compare commits

...

11 Commits

Author SHA1 Message Date
35e71ccf00 1.1.0 2016-08-04 16:09:44 +02:00
11a2cf83ee add keyValueObjectArray 2016-08-04 16:09:39 +02:00
d7a0541d81 1.0.8 2016-06-21 16:25:09 +02:00
c03e17d522 improve log output 2016-06-21 16:25:03 +02:00
b9d1080829 1.0.7 2016-06-21 16:13:45 +02:00
a84a257e4b improve log output 2016-06-21 16:13:29 +02:00
2fa659a22a 1.0.6 2016-06-20 22:19:11 +02:00
bdc99cc3a6 link typings om package.json 2016-06-20 22:18:48 +02:00
2956278369 cosmetics 2016-06-20 12:05:35 +02:00
c61ef2eeba 1.0.5 2016-06-20 11:21:26 +02:00
41c97c4c05 improve README 2016-06-20 11:21:21 +02:00
8 changed files with 129 additions and 79 deletions

View File

@ -2,10 +2,10 @@
provides an easy way for promised environments provides an easy way for promised environments
## Usage ## Usage
qenv needs two files to work: qenv works with two files:
* **qenv.yml** - specified which ENV vars are required * **qenv.yml** - specifies which ENV vars are required.
* **env.yml** specified all env vars that are not already set in the current environment * **env.yml** - specifies all env vars that are not already set in the current environment.
Now obviously you can set build specific env vars in many CI environments. Now obviously you can set build specific env vars in many CI environments.
So there we do not need an **env.yml** since all ENV vars are in place So there we do not need an **env.yml** since all ENV vars are in place

7
dist/index.d.ts vendored
View File

@ -1,6 +1,11 @@
export interface keyValueObject {
key: string;
value: string;
}
export declare class Qenv { export declare class Qenv {
requiredEnvVars: string[]; requiredEnvVars: string[];
availableEnvVars: string[]; availableEnvVars: string[];
missingEnvVars: string[]; missingEnvVars: string[];
constructor(basePathArg: string, envYmlPathArg: any); keyValueObjectArray: keyValueObject[];
constructor(basePathArg: string, envYmlPathArg: any, failOnMissing?: boolean);
} }

75
dist/index.js vendored

File diff suppressed because one or more lines are too long

View File

@ -4,5 +4,4 @@ exports.beautylog = require("beautylog");
exports.lodash = require("lodash"); exports.lodash = require("lodash");
exports.path = require("path"); exports.path = require("path");
exports.smartfile = require("smartfile"); exports.smartfile = require("smartfile");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWVudi5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcWVudi5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDVixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ3BDLGNBQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEIsWUFBSSxXQUFXLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInFlbnYucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ1YsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNwQyxjQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hCLFlBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUN2QixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDIiwiZmlsZSI6InFlbnYucGx1Z2lucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCI7XG5leHBvcnQgaW1wb3J0IGJlYXV0eWxvZyA9IHJlcXVpcmUoXCJiZWF1dHlsb2dcIik7XG5leHBvcnQgbGV0IGxvZGFzaCA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5leHBvcnQgaW1wb3J0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmV4cG9ydCBpbXBvcnQgc21hcnRmaWxlID0gcmVxdWlyZShcInNtYXJ0ZmlsZVwiKTtcbiJdfQ==

View File

@ -1,8 +1,9 @@
{ {
"name": "qenv", "name": "qenv",
"version": "1.0.4", "version": "1.1.0",
"description": "promised environments", "description": "promised environments",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts",
"scripts": { "scripts": {
"test": "(npmts)" "test": "(npmts)"
}, },
@ -22,15 +23,15 @@
}, },
"homepage": "https://gitlab.com/pushrocks/qenv#README", "homepage": "https://gitlab.com/pushrocks/qenv#README",
"devDependencies": { "devDependencies": {
"npmts-g": "^5.2.6", "npmts-g": "^5.2.8",
"should": "^9.0.2", "should": "^10.0.0",
"typings-test": "^1.0.1" "typings-test": "^1.0.1"
}, },
"dependencies": { "dependencies": {
"beautylog": "^5.0.12", "beautylog": "^5.0.20",
"lodash": "^4.13.1", "lodash": "^4.14.1",
"q": "^1.4.1", "q": "^1.4.1",
"smartfile": "^3.0.10", "smartfile": "^4.0.13",
"typings-global": "^1.0.3" "typings-global": "^1.0.6"
} }
} }

View File

@ -1,16 +1,16 @@
"use strict"; "use strict";
require("typings-test"); require("typings-test");
var path = require("path"); const path = require("path");
require("should"); require("should");
var index_1 = require("../dist/index"); const index_1 = require("../dist/index");
process.cwd = function () { process.cwd = () => {
return path.join(__dirname, "./assets/"); return path.join(__dirname, "./assets/");
}; };
process.env["key1"] = "original"; process.env["key1"] = "original";
var qenvTestObject; let qenvTestObject;
describe("Qenv class", function () { describe("Qenv class", function () {
it("should create a new class", function () { it("should create a new class", function () {
qenvTestObject = new index_1.Qenv(process.cwd(), process.cwd()); qenvTestObject = new index_1.Qenv(process.cwd(), process.cwd(), false);
}); });
it("key1 should be not be overwritten since it is already present", function () { it("key1 should be not be overwritten since it is already present", function () {
process.env.key1.should.equal("original"); process.env.key1.should.equal("original");
@ -18,6 +18,9 @@ describe("Qenv class", function () {
it("key2 should be read from Yml", function () { it("key2 should be read from Yml", function () {
process.env.key2.should.equal("fromYml"); process.env.key2.should.equal("fromYml");
}); });
it("keyValueObjectArray should hold all retrieved values", function () {
qenvTestObject.keyValueObjectArray[0].value.should.equal("original");
qenvTestObject.keyValueObjectArray[1].value.should.equal("fromYml");
});
}); });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsTUFBWSxJQUFJLFdBQU0sTUFBTSxDQUFDLENBQUE7QUFDN0IsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQix3QkFBbUIsZUFBZSxDQUFDLENBQUE7QUFFbkMsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUE7QUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQTtBQUVoQyxJQUFJLGNBQW1CLENBQUM7QUFDeEIsUUFBUSxDQUFDLFlBQVksRUFBQztJQUNsQixFQUFFLENBQUMsMkJBQTJCLEVBQUM7UUFDM0IsY0FBYyxHQUFHLElBQUksWUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsK0RBQStELEVBQUM7UUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyw4QkFBOEIsRUFBQztRQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLHNEQUFzRCxFQUFDO1FBQ3RELGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUE7QUFFTixDQUFDLENBQUMsQ0FBQyJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsSUFBWSxJQUFJLFdBQU0sTUFBTSxDQUFDLENBQUE7QUFDN0IsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQixzQkFBbUIsZUFBZSxDQUFDLENBQUE7QUFFbkMsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUE7QUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQTtBQUVoQyxJQUFJLGNBQW1CLENBQUM7QUFDeEIsUUFBUSxDQUFDLFlBQVksRUFBQztJQUNsQixFQUFFLENBQUMsMkJBQTJCLEVBQUM7UUFDM0IsY0FBYyxHQUFHLElBQUksWUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQywrREFBK0QsRUFBQztRQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLDhCQUE4QixFQUFDO1FBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUE7QUFFTixDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJ0ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy10ZXN0XCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgXCJzaG91bGRcIjtcbmltcG9ydCB7UWVudn0gZnJvbSBcIi4uL2Rpc3QvaW5kZXhcIjtcblxucHJvY2Vzcy5jd2QgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHBhdGguam9pbihfX2Rpcm5hbWUsXCIuL2Fzc2V0cy9cIik7XG59XG5cbnByb2Nlc3MuZW52W1wia2V5MVwiXSA9IFwib3JpZ2luYWxcIlxuXG5sZXQgcWVudlRlc3RPYmplY3Q6UWVudjtcbmRlc2NyaWJlKFwiUWVudiBjbGFzc1wiLGZ1bmN0aW9uKCl7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGEgbmV3IGNsYXNzXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgcWVudlRlc3RPYmplY3QgPSBuZXcgUWVudihwcm9jZXNzLmN3ZCgpLHByb2Nlc3MuY3dkKCkpO1xuICAgIH0pO1xuICAgIGl0KFwia2V5MSBzaG91bGQgYmUgbm90IGJlIG92ZXJ3cml0dGVuIHNpbmNlIGl0IGlzIGFscmVhZHkgcHJlc2VudFwiLGZ1bmN0aW9uKCl7XG4gICAgICAgIHByb2Nlc3MuZW52LmtleTEuc2hvdWxkLmVxdWFsKFwib3JpZ2luYWxcIik7XG4gICAgfSk7XG4gICAgaXQoXCJrZXkyIHNob3VsZCBiZSByZWFkIGZyb20gWW1sXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgcHJvY2Vzcy5lbnYua2V5Mi5zaG91bGQuZXF1YWwoXCJmcm9tWW1sXCIpO1xuICAgIH0pXG5cbn0pOyJdfQ==

View File

@ -12,13 +12,17 @@ process.env["key1"] = "original"
let qenvTestObject:Qenv; let qenvTestObject:Qenv;
describe("Qenv class",function(){ describe("Qenv class",function(){
it("should create a new class",function(){ it("should create a new class",function(){
qenvTestObject = new Qenv(process.cwd(),process.cwd()); qenvTestObject = new Qenv(process.cwd(),process.cwd(),false);
}); });
it("key1 should be not be overwritten since it is already present",function(){ it("key1 should be not be overwritten since it is already present",function(){
process.env.key1.should.equal("original"); process.env.key1.should.equal("original");
}); });
it("key2 should be read from Yml",function(){ it("key2 should be read from Yml",function(){
process.env.key2.should.equal("fromYml"); process.env.key2.should.equal("fromYml");
});
it("keyValueObjectArray should hold all retrieved values",function(){
qenvTestObject.keyValueObjectArray[0].value.should.equal("original");
qenvTestObject.keyValueObjectArray[1].value.should.equal("fromYml");
}) })
}); });

View File

@ -1,51 +1,72 @@
import * as plugins from "./qenv.plugins"; import * as plugins from "./qenv.plugins";
export class Qenv { export interface keyValueObject {
requiredEnvVars:string[]; key: string,
availableEnvVars:string[]; value: string
missingEnvVars:string[];
constructor(basePathArg = process.cwd(),envYmlPathArg){
this.requiredEnvVars = getRequiredEnvVars(basePathArg);
this.availableEnvVars = getAvailableEnvVars(this.requiredEnvVars,envYmlPathArg);
this.missingEnvVars = getMissingEnvVars(this.requiredEnvVars,this.availableEnvVars);
for(let keyArg in this.missingEnvVars){
plugins.beautylog.warn(this.missingEnvVars[keyArg] + " is required, but missing!")
}
}
}; };
let getRequiredEnvVars = (pathArg:string):string[] => { export class Qenv {
let result:string[] = []; requiredEnvVars:string[] = [];
let qenvFilePath = plugins.path.join(pathArg,"qenv.yml"); availableEnvVars:string[] = [];
let qenvFile = plugins.smartfile.local.toObjectSync(qenvFilePath); missingEnvVars:string[] = [];
for(let keyArg in qenvFile.vars){ keyValueObjectArray:keyValueObject[] = [];
result.push(qenvFile.vars[keyArg]); constructor(basePathArg = process.cwd(),envYmlPathArg,failOnMissing = true){
getRequiredEnvVars(basePathArg,this.requiredEnvVars);
getAvailableEnvVars(this.requiredEnvVars,envYmlPathArg,this.availableEnvVars,this.keyValueObjectArray);
this.missingEnvVars = getMissingEnvVars(this.requiredEnvVars,this.availableEnvVars);
//handle missing variables
if (this.missingEnvVars.length > 0){
plugins.beautylog.info("Required Env Vars are:")
console.log(this.requiredEnvVars);
plugins.beautylog.error("However some Env variables could not be resolved:");
console.log(this.missingEnvVars);
if(failOnMissing){
plugins.beautylog.error("Exiting!")
process.exit(1);
} }
return result; }
};
};
let getRequiredEnvVars = (pathArg:string, requiredEnvVarsArray:string[]) => {
let qenvFilePath = plugins.path.join(pathArg,"qenv.yml");
let qenvFile = plugins.smartfile.fs.toObjectSync(qenvFilePath);
for(let keyArg in qenvFile.vars){
requiredEnvVarsArray.push(qenvFile.vars[keyArg]);
};
} }
let getAvailableEnvVars = (requiredEnvVarsArg:string[],envYmlPathArg:string):string[] => {
let result = [];
let getAvailableEnvVars = (requiredEnvVarsArg:string[],envYmlPathArg:string,availableEnvVarsArray:string[],keyValueObjectArrayArg:keyValueObject[]) => {
envYmlPathArg = plugins.path.join(envYmlPathArg,"env.yml") envYmlPathArg = plugins.path.join(envYmlPathArg,"env.yml")
let envYml; let envYml;
try { try {
envYml = plugins.smartfile.local.toObjectSync(envYmlPathArg); envYml = plugins.smartfile.fs.toObjectSync(envYmlPathArg);
} }
catch(err){ catch(err){
plugins.beautylog.log("env file couldn't be found at " + envYmlPathArg)
envYml = {}; envYml = {};
} }
for(let keyArg in requiredEnvVarsArg){ for(let requiredEnvVar of requiredEnvVarsArg){
let requiredEnvVar:string = requiredEnvVarsArg[keyArg];
if(process.env[requiredEnvVar]){ if(process.env[requiredEnvVar]){
result.push(requiredEnvVar); availableEnvVarsArray.push(requiredEnvVar);
keyValueObjectArrayArg.push({
key: requiredEnvVar,
value: process.env[requiredEnvVar]
});
} else if(envYml.hasOwnProperty(requiredEnvVar)){ } else if(envYml.hasOwnProperty(requiredEnvVar)){
process.env[requiredEnvVar] = envYml[requiredEnvVar]; process.env[requiredEnvVar] = envYml[requiredEnvVar];
result.push(requiredEnvVar); availableEnvVarsArray.push(requiredEnvVar);
keyValueObjectArrayArg.push({
key: requiredEnvVar,
value: process.env[requiredEnvVar]
});
} }
} };
return result; };
}
let getMissingEnvVars = (requiredEnvVarsArray:string[],availableEnvVarsArray:string[]) => { let getMissingEnvVars = (requiredEnvVarsArray:string[],availableEnvVarsArray:string[]) => {
return plugins.lodash.difference(requiredEnvVarsArray,availableEnvVarsArray); return plugins.lodash.difference(requiredEnvVarsArray,availableEnvVarsArray);
} };