compose-as-code
Version:
Provides a module to express docker compose files as code
57 lines (56 loc) • 2.66 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.snapshot = void 0;
const util_1 = require("util");
const child_process_1 = require("child_process");
const fs_1 = __importDefault(require("fs"));
const crypto_1 = require("crypto");
const compositionCompiler_1 = require("../compositionCompiler");
const promisifiedExec = (0, util_1.promisify)(child_process_1.exec);
function hashDirectory(dirname) {
return __awaiter(this, void 0, void 0, function* () {
try {
let contentStr = '';
const files = fs_1.default.readdirSync(dirname);
files.forEach(filename => {
const content = fs_1.default.readFileSync(dirname + '/' + filename, 'utf-8');
console.log(`${filename} + ${content.length}`);
contentStr += filename + content;
});
return (0, crypto_1.createHash)('sha256').update(contentStr).digest('hex');
}
catch (e) {
return '';
}
});
}
function snapshot(app, outputDir, name, options) {
return __awaiter(this, void 0, void 0, function* () {
const resultDir = `${outputDir}/${name}_snapshot`;
const hashBefore = (yield hashDirectory(resultDir)) || '';
const files = yield (0, compositionCompiler_1.compile)({
outputDir: resultDir,
});
const hashAfter = yield hashDirectory(resultDir);
expect(hashAfter).toEqual(hashBefore);
if (!(options === null || options === void 0 ? void 0 : options.skipDockerCheck)) {
for (const file of files) {
const result = yield promisifiedExec(`docker compose -f ${resultDir}/${file.fileName}.yaml config`);
expect(result.stderr).toEqual('');
}
}
});
}
exports.snapshot = snapshot;