init project
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
||||
var DockerIgnore = require('@balena/dockerignore');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var tar = require('tar-fs');
|
||||
var zlib = require('zlib');
|
||||
|
||||
// https://github.com/HenrikJoreteg/extend-object/blob/v0.1.0/extend-object.js
|
||||
|
||||
var arr = [];
|
||||
var each = arr.forEach;
|
||||
var slice = arr.slice;
|
||||
|
||||
module.exports.extend = function(obj) {
|
||||
each.call(slice.call(arguments, 1), function(source) {
|
||||
if (source) {
|
||||
for (var prop in source) {
|
||||
obj[prop] = source[prop];
|
||||
}
|
||||
}
|
||||
});
|
||||
return obj;
|
||||
};
|
||||
|
||||
module.exports.processArgs = function(opts, callback, defaultOpts) {
|
||||
if (!callback && typeof opts === 'function') {
|
||||
callback = opts;
|
||||
opts = null;
|
||||
}
|
||||
return {
|
||||
callback: callback,
|
||||
opts: module.exports.extend({}, defaultOpts, opts)
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Parse the given repo tag name (as a string) and break it out into repo/tag pair.
|
||||
* // if given the input http://localhost:8080/woot:latest
|
||||
* {
|
||||
* repository: 'http://localhost:8080/woot',
|
||||
* tag: 'latest'
|
||||
* }
|
||||
* @param {String} input Input e.g: 'repo/foo', 'ubuntu', 'ubuntu:latest'
|
||||
* @return {Object} input parsed into the repo and tag.
|
||||
*/
|
||||
module.exports.parseRepositoryTag = function(input) {
|
||||
var separatorPos;
|
||||
var digestPos = input.indexOf('@');
|
||||
var colonPos = input.lastIndexOf(':');
|
||||
// @ symbol is more important
|
||||
if (digestPos >= 0) {
|
||||
separatorPos = digestPos;
|
||||
} else if (colonPos >= 0) {
|
||||
separatorPos = colonPos;
|
||||
} else {
|
||||
// no colon nor @
|
||||
return {
|
||||
repository: input
|
||||
};
|
||||
}
|
||||
|
||||
// last colon is either the tag (or part of a port designation)
|
||||
var tag = input.slice(separatorPos + 1);
|
||||
|
||||
// if it contains a / its not a tag and is part of the url
|
||||
if (tag.indexOf('/') === -1) {
|
||||
return {
|
||||
repository: input.slice(0, separatorPos),
|
||||
tag: tag
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
repository: input
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
module.exports.prepareBuildContext = function(file, next) {
|
||||
if (file && file.context) {
|
||||
fs.readFile(path.join(file.context, '.dockerignore'), (err, data) => {
|
||||
let ignoreFn;
|
||||
let filterFn;
|
||||
|
||||
if (!err) {
|
||||
const dockerIgnore = DockerIgnore({ ignorecase: false }).add(data.toString());
|
||||
|
||||
filterFn = dockerIgnore.createFilter();
|
||||
ignoreFn = (path) => {
|
||||
return !filterFn(path);
|
||||
}
|
||||
}
|
||||
|
||||
const entries = file.src.slice() || []
|
||||
|
||||
const pack = tar.pack(file.context, {
|
||||
entries: filterFn ? entries.filter(filterFn) : entries,
|
||||
ignore: ignoreFn // Only works on directories
|
||||
});
|
||||
|
||||
next(pack.pipe(zlib.createGzip()));
|
||||
})
|
||||
} else {
|
||||
next(file);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user