UNPKG

@nx-tools/nx-docker

Version:
74 lines (73 loc) 2.85 kB
"use strict"; 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