@nx-tools/nx-docker
Version:
## Upgrade from v1
74 lines (73 loc) • 2.85 kB
JavaScript
;
exports.run = run;
exports.default = void 0;
var _interop_require_wildcard = require("@swc/helpers/lib/_interop_require_wildcard.js").default;
var _core = require("@nx-tools/core");
require("dotenv/config");
var _fs = require("fs");
var _path = require("path");
var buildx = _interop_require_wildcard(require("./buildx"));
var context = _interop_require_wildcard(require("./context"));
const GROUP_PREFIX = 'Nx Docker';
async function run(options, ctx) {
const tmpDir = context.tmpDir();
try {
(0, _core).startGroup(`Docker info`, GROUP_PREFIX);
await (0, _core).exec('docker', [
'version'
]);
await (0, _core).exec('docker', [
'info'
]);
if (!await buildx.isAvailable()) {
throw new Error(`Docker buildx is required. See https://github.com/docker/setup-buildx-action to set up buildx.`);
}
const buildxVersion = await buildx.getVersion();
const defContext = context.defaultContext();
const inputs = await context.getInputs(defContext, {
...options,
file: options.file || (0, _path).join(ctx?.workspace.projects[ctx.projectName].root, 'Dockerfile')
}, ctx);
if (options.metadata?.images) {
const { getMetadata } = (0, _core).loadPackage('@nx-tools/docker-metadata', 'Nx Docker BUild Executor');
(0, _core).startGroup('Generating metadata', GROUP_PREFIX);
const meta = await getMetadata(options.metadata, ctx);
inputs.labels = meta.getLabels();
inputs.tags = meta.getTags();
}
(0, _core).startGroup(`Starting build...`, GROUP_PREFIX);
const args = await context.getArgs(inputs, defContext, buildxVersion);
await (0, _core).getExecOutput('docker', args.map((arg)=>(0, _core).interpolate(arg)), {
ignoreReturnCode: true
}).then((res)=>{
if (res.stderr.length > 0 && res.exitCode != 0) {
throw new Error(`buildx failed with: ${res.stderr.match(/(.*)\s*$/)[0].trim()}`);
}
});
(0, _core).startGroup(`Setting outputs`, GROUP_PREFIX);
const imageID = await buildx.getImageID();
const metadata = await buildx.getMetadata();
if (imageID) {
(0, _core).info(`digest=${imageID}`);
}
if (metadata) {
(0, _core).info(`metadata=${metadata}`);
}
} finally{
cleanup(tmpDir);
}
return {
success: true
};
}
async function cleanup(tmpDir) {
if (tmpDir.length > 0) {
(0, _core).startGroup(`Removing temp folder ${tmpDir}`, GROUP_PREFIX);
(0, _fs).rmdirSync(tmpDir, {
recursive: true
});
}
}
var _default = run;
exports.default = _default;
//# sourceMappingURL=executor.js.map