@nx-tools/nx-docker
Version:
## Upgrade from v1
227 lines (226 loc) • 8.21 kB
JavaScript
;
exports.defaultContext = defaultContext;
exports.tmpDir = tmpDir;
exports.tmpNameSync = tmpNameSync;
exports.getInputs = getInputs;
exports.getArgs = getArgs;
exports.getInputList = getInputList;
var _interop_require_default = require("@swc/helpers/lib/_interop_require_default.js").default;
var _interop_require_wildcard = require("@swc/helpers/lib/_interop_require_wildcard.js").default;
var _devkit = require("@nrwl/devkit");
var _core = require("@nx-tools/core");
var _sync = _interop_require_default(require("csv-parse/lib/sync"));
var fs = _interop_require_wildcard(require("fs"));
var handlebars = _interop_require_wildcard(require("handlebars"));
var os = _interop_require_wildcard(require("os"));
var path = _interop_require_wildcard(require("path"));
var tmp = _interop_require_wildcard(require("tmp"));
var buildx = _interop_require_wildcard(require("./buildx"));
let _defaultContext, _tmpDir;
function defaultContext() {
if (!_defaultContext) {
_defaultContext = '.';
}
return _defaultContext;
}
function tmpDir() {
if (!_tmpDir) {
_tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-build-push-')).split(path.sep).join(path.posix.sep);
}
return _tmpDir;
}
function tmpNameSync(options) {
return tmp.tmpNameSync(options);
}
async function getInputs(defaultContext1, options, ctx) {
const prefix = (0, _devkit).names(ctx?.projectName || '').constantName;
return {
addHosts: await getInputList('add-hosts', prefix, options['add-hosts']),
allow: await getInputList('allow', prefix, options.allow),
buildArgs: await getInputList('build-args', prefix, options['build-args'], true),
builder: (0, _core).getInput('builder', {
prefix,
fallback: options.builder
}),
cacheFrom: await getInputList('cache-from', prefix, options['cache-from'], true),
cacheTo: await getInputList('cache-to', prefix, options['cache-to'], true),
cgroupParent: (0, _core).getInput('cgroup-parent', {
prefix,
fallback: options['cgroup-parent']
}),
context: (0, _core).getInput('context', {
prefix,
fallback: options.context || defaultContext1
}),
file: (0, _core).getInput('file', {
prefix,
fallback: options.file
}),
githubToken: (0, _core).getInput('github-token'),
labels: await getInputList('labels', prefix, options.labels, true),
load: (0, _core).getBooleanInput('load', {
fallback: `${options.load || false}`
}),
network: (0, _core).getInput('network', {
prefix,
fallback: options.network
}),
noCache: (0, _core).getBooleanInput('no-cache', {
fallback: `${options['no-cache'] || false}`
}),
outputs: await getInputList('outputs', prefix, options.outputs, true),
platforms: await getInputList('platforms', prefix, options.platforms),
pull: (0, _core).getBooleanInput('pull', {
fallback: `${options.pull || false}`
}),
push: (0, _core).getBooleanInput('push', {
fallback: `${options.push || false}`
}),
secretFiles: await getInputList('secret-files', prefix, options['secret-files'], true),
secrets: await getInputList('secrets', prefix, options.secrets, true),
shmSize: (0, _core).getInput('shm-size', {
prefix,
fallback: options['shm-size']
}),
ssh: await getInputList('ssh', prefix, options.ssh),
tags: await getInputList('tags', prefix, options.tags),
target: (0, _core).getInput('target', {
prefix,
fallback: options.target
}),
ulimit: await getInputList('ulimit', prefix, options.ulimit, true)
};
}
async function getArgs(inputs, defaultContext2, buildxVersion) {
const args = [
'buildx'
];
args.push.apply(args, await getBuildArgs(inputs, defaultContext2, buildxVersion));
args.push.apply(args, await getCommonArgs(inputs, buildxVersion));
args.push(handlebars.compile(inputs.context)({
defaultContext: defaultContext2
}));
return args;
}
async function getBuildArgs(inputs, defaultContext3, buildxVersion) {
const args = [
'build'
];
await (0, _core).asyncForEach(inputs.addHosts, async (addHost)=>{
args.push('--add-host', addHost);
});
if (inputs.allow.length > 0) {
args.push('--allow', inputs.allow.join(','));
}
await (0, _core).asyncForEach(inputs.buildArgs, async (buildArg)=>{
args.push('--build-arg', buildArg);
});
await (0, _core).asyncForEach(inputs.cacheFrom, async (cacheFrom)=>{
args.push('--cache-from', cacheFrom);
});
await (0, _core).asyncForEach(inputs.cacheTo, async (cacheTo)=>{
args.push('--cache-to', cacheTo);
});
if (inputs.cgroupParent) {
args.push('--cgroup-parent', inputs.cgroupParent);
}
if (inputs.file) {
args.push('--file', inputs.file);
}
if (!buildx.isLocalOrTarExporter(inputs.outputs) && (inputs.platforms.length == 0 || buildx.satisfies(buildxVersion, '>=0.4.2'))) {
args.push('--iidfile', await buildx.getImageIDFile());
}
await (0, _core).asyncForEach(inputs.labels, async (label)=>{
args.push('--label', label);
});
await (0, _core).asyncForEach(inputs.outputs, async (output)=>{
args.push('--output', output);
});
if (inputs.platforms.length > 0) {
args.push('--platform', inputs.platforms.join(','));
}
await (0, _core).asyncForEach(inputs.secrets, async (secret)=>{
try {
args.push('--secret', await buildx.getSecretString(secret));
} catch (err) {
(0, _core).warning(err.message);
}
});
await (0, _core).asyncForEach(inputs.secretFiles, async (secretFile)=>{
try {
args.push('--secret', await buildx.getSecretFile(secretFile));
} catch (err) {
(0, _core).warning(err.message);
}
});
if (inputs.githubToken && !buildx.hasGitAuthToken(inputs.secrets) && inputs.context == defaultContext3) {
args.push('--secret', await buildx.getSecretString(`GIT_AUTH_TOKEN=${inputs.githubToken}`));
}
if (inputs.shmSize) {
args.push('--shm-size', inputs.shmSize);
}
await (0, _core).asyncForEach(inputs.ssh, async (ssh)=>{
args.push('--ssh', ssh);
});
await (0, _core).asyncForEach(inputs.tags, async (tag)=>{
args.push('--tag', tag);
});
if (inputs.target) {
args.push('--target', inputs.target);
}
await (0, _core).asyncForEach(inputs.ulimit, async (ulimit)=>{
args.push('--ulimit', ulimit);
});
return args;
}
async function getCommonArgs(inputs, buildxVersion) {
const args = [];
if (inputs.builder) {
args.push('--builder', inputs.builder);
}
if (inputs.load) {
args.push('--load');
}
if (buildx.satisfies(buildxVersion, '>=0.6.0')) {
args.push('--metadata-file', await buildx.getMetadataFile());
}
if (inputs.network) {
args.push('--network', inputs.network);
}
if (inputs.noCache) {
args.push('--no-cache');
}
if (inputs.pull) {
args.push('--pull');
}
if (inputs.push) {
args.push('--push');
}
return args;
}
async function getInputList(name, prefix, fallback, ignoreComma) {
const res = [];
const items = (0, _core).getInput(name, {
prefix
});
if (items == '') {
return fallback ?? res;
}
for (const output of (await (0, _sync).default(items, {
columns: false,
relax: true,
relaxColumnCount: true,
skipLinesWithEmptyValues: true
}))){
if (output.length == 1) {
res.push(output[0]);
continue;
} else if (!ignoreComma) {
res.push(...output);
continue;
}
res.push(output.join(','));
}
return res.filter((item)=>item).map((pat)=>pat.trim());
}
//# sourceMappingURL=context.js.map