initial commit
This commit is contained in:
commit
b26f0aeb3e
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
node_modules
|
10
LICENSE.md
Normal file
10
LICENSE.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
Copyright (c) 2016, Skejul, Inc
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby
|
||||||
|
granted, provided that the above copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
25
README.md
Normal file
25
README.md
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
shipit-secrets
|
||||||
|
==============
|
||||||
|
|
||||||
|
A simple secret inclusion task for shipit, inspired by capistrano.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
|
||||||
|
shipit-secrets works out of the box with shipit-deploy. Simply include files/paths to link as `secrets.files` in your shipit config.
|
||||||
|
|
||||||
|
```
|
||||||
|
module.exports = function(shipit) {
|
||||||
|
require("shipit-deploy")(shipit);
|
||||||
|
require("shipit-secrets")(shipit);
|
||||||
|
shipit.initConfig({
|
||||||
|
"default": {
|
||||||
|
secrets: {
|
||||||
|
files: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```js
|
7
finish.js
Normal file
7
finish.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
const utils = require("shipit-utils");
|
||||||
|
|
||||||
|
module.exports = function (gruntOrShipit, shipit, secretsConfig) {
|
||||||
|
utils.registerTask(gruntOrShipit, "secrets:finish", () => {
|
||||||
|
shipit.emit("secrets:done");
|
||||||
|
});
|
||||||
|
};
|
35
index.js
Normal file
35
index.js
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
const utils = require("shipit-utils");
|
||||||
|
const _ = require("lodash");
|
||||||
|
|
||||||
|
module.exports = function (gruntOrShipit) {
|
||||||
|
const shipit = init(utils.getShipit(gruntOrShipit));
|
||||||
|
const config = shipit.config || {};
|
||||||
|
const secretsConfig = Object.assign({}, shipit.config.secrets, {
|
||||||
|
files: {},
|
||||||
|
removeBefore: true,
|
||||||
|
runAfter: "published",
|
||||||
|
resolveSource: _.template("<%= shipit.config.deployTo %>/secrets/<%= source %>"),
|
||||||
|
resolveTarget: _.template("<%= shipit.config.deployTo %>/current/<%= target %>")
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const files = _.mapValues(_.mapKeys(files, (source, target) => {
|
||||||
|
return resolveTarget({target, shipit})
|
||||||
|
}), (source) => {
|
||||||
|
return resolveSource({source, shipit})
|
||||||
|
});
|
||||||
|
|
||||||
|
require("./finish.js")(gruntOrShipit, files);
|
||||||
|
require("./link.js")(gruntOrShipit, files);
|
||||||
|
require("./prep.js")(gruntOrShipit, files);
|
||||||
|
|
||||||
|
const task = ["secrets:prep", "secrets:link", "secrets:finish"]
|
||||||
|
if (removeBefore !== true) {
|
||||||
|
//remove the :prep task
|
||||||
|
task.shift();
|
||||||
|
}
|
||||||
|
|
||||||
|
utils.registerTask(gruntOrShipit, "secrets", task);
|
||||||
|
shipit.on(secretsConfig.runAfter, () => shipit.start("secrets"));
|
||||||
|
};
|
||||||
|
|
14
link.js
Normal file
14
link.js
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
const utils = require("shipit-utils");
|
||||||
|
const chalk = require("chalk");
|
||||||
|
|
||||||
|
module.exports = function (gruntOrShipit, files) {
|
||||||
|
utils.registerTask(gruntOrShipit, "secrets:link", () => Promise.all(_(files).map(linkFile).toArray()).then(() => {
|
||||||
|
shipit.log(chalk.green("Secrets linked."));
|
||||||
|
return shipit.emit("secrets:copied");
|
||||||
|
}));
|
||||||
|
|
||||||
|
function linkFile(source, target) {
|
||||||
|
return shipit.remote(`ln -s "${source}" "${target}"`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
22
package.json
Normal file
22
package.json
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"name": "shipit-secrets",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "A simple way to include secrets ala Capistrano",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"shipit",
|
||||||
|
"secrets",
|
||||||
|
"deploy",
|
||||||
|
"link"
|
||||||
|
],
|
||||||
|
"author": "Kegan Myers <kegan@keganmyers.com>",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"chalk": "^1.1.3",
|
||||||
|
"lodash": "^4.13.1",
|
||||||
|
"shipit-utils": "^1.3.1"
|
||||||
|
}
|
||||||
|
}
|
13
prep.js
Normal file
13
prep.js
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
const utils = require("shipit-utils");
|
||||||
|
const chalk = require("chalk");
|
||||||
|
|
||||||
|
module.exports = function (gruntOrShipit, shipit, secretsConfig) {
|
||||||
|
utils.registerTask(gruntOrShipit, "secrets:prep", () => Promise.all(_(secretsConfig.files).map(removeFile).toArray()).then(() => {
|
||||||
|
shipit.log(chalk.green("Secrets prepped."));
|
||||||
|
return shipit.emit("secrets:prepped");
|
||||||
|
}));
|
||||||
|
|
||||||
|
function removeFile(source, target) {
|
||||||
|
return shipit.remote(`rm -f ${target}`);
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in a new issue