@nx/docker
Version:
66 lines (65 loc) • 2.38 kB
JavaScript
;
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;
}
}