UNPKG

@nx/docker

Version:

The Nx Plugin for Docker to aid in containerizing projects.

66 lines (65 loc) 2.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dockerReleasePublish; const devkit_1 = require("@nx/devkit"); const child_process_1 = require("child_process"); const path_1 = require("path"); const fs_1 = require("fs"); async function dockerReleasePublish(schema, context) { const projectConfig = context.projectGraph.nodes[context.projectName]; const options = normalizeOptions(projectConfig, schema); if (!options.dryRun) { const digest = dockerPush(options.imageReference); devkit_1.logger.log(`Successfully pushed ${options.imageReference}. Digest: ${digest}`); } else { devkit_1.logger.log(`Docker Image ${options.imageReference} was not pushed as --dry-run is enabled.`); } return { success: true, }; } function normalizeOptions(projectConfig, schema) { return { imageReference: findImageReference(projectConfig, schema), dryRun: process.env.NX_DRY_RUN === 'true' || schema.dryRun || false, }; } function findImageReference(projectConfig, schema) { let imageRef = readVersionFromFile(projectConfig.data.root); if (imageRef) { if (checkDockerImageExistsLocally(imageRef)) { return imageRef; } throw new Error(`Could not find Docker Image ${imageRef}. Did you run 'nx release version'?`); } } function readVersionFromFile(projectRoot) { const versionFilePath = (0, path_1.join)(projectRoot, '.docker-version'); if (!(0, fs_1.existsSync)(versionFilePath)) { throw new Error("Could not find .docker-version file. Did you run 'nx release version'?"); } const version = (0, fs_1.readFileSync)(versionFilePath, { encoding: 'utf8' }); return version.trim(); } function checkDockerImageExistsLocally(imageRef) { try { const result = (0, child_process_1.execSync)(`docker images --filter "reference=${imageRef}" --quiet`, { encoding: 'utf8' }); return result.trim().length > 0; } catch { return false; } } function dockerPush(imageReference) { try { const result = (0, child_process_1.execSync)(`docker push ${imageReference} --quiet`, { encoding: 'utf8', }); return result.trim(); } catch (e) { devkit_1.logger.error(`Failed to push ${imageReference}`); throw e; } }