@storm-software/k8s-tools
Version:
Tools for managing Kubernetes (k8s) infrastructure within a Nx workspace.
205 lines (186 loc) • 8.26 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
var _chunkXJT7AOEUjs = require('./chunk-XJT7AOEU.js');
var _chunkHEVP2Q77js = require('./chunk-HEVP2Q77.js');
// src/plugins/docker/_dockerfile.ts
var _devkit = require('@nx/devkit');
var _fs = require('fs');
var name = "storm-software/docker";
var description = "Plugin for parsing Dockerfile files";
var createNodesV2 = [
"*/**/{Dockerfile,Dockerfile.*}",
async (configFiles, options, context) => {
return await _devkit.createNodesFromFiles.call(void 0,
async (dockerFilePath, options2 = {
defaultEngine: "docker"
}, context2) => {
try {
if (!dockerFilePath) {
return {};
}
const root = dockerFilePath.substring(
dockerFilePath.lastIndexOf("/") + 1
);
const projectJsonPath = _devkit.joinPathFragments.call(void 0, root, "project.json");
if (!_fs.existsSync.call(void 0, projectJsonPath)) {
return {};
}
const projectJson = _devkit.readJsonFile.call(void 0, projectJsonPath);
if (_optionalChain([projectJson, 'optionalAccess', _ => _.name])) {
return {};
}
const workspaceRoot = _chunkHEVP2Q77js.findWorkspaceRoot.call(void 0, );
const config = await _chunkHEVP2Q77js.getConfig.call(void 0, workspaceRoot);
Object.keys(projectJson).forEach((key) => {
if (!project[key]) {
project[key] = projectJson[key];
}
});
const project = {
root,
name: _optionalChain([projectJson, 'optionalAccess', _2 => _2.name])
};
const engine = _nullishCoalesce(options2.defaultEngine, () => ( "docker"));
const labels = [
`org.opencontainers.image.ref.name=${project.name}`,
`org.opencontainers.image.title=${titleCase(project.name)}`,
`org.opencontainers.image.authors=${config.organization ? titleCase(
typeof config.organization === "string" ? config.organization : config.organization.name
) : "Storm Software"}`,
`org.opencontainers.image.vendor=${config.organization ? titleCase(
typeof config.organization === "string" ? config.organization : config.organization.name
) : "Storm Software"}`,
`org.opencontainers.image.documentation=${config.docs}`,
`org.opencontainers.image.url=${config.homepage}`,
`org.opencontainers.image.source=${config.repository}`
];
let tag = "latest";
const packageManager = _chunkXJT7AOEUjs.getPackageInfo.call(void 0, project);
if (packageManager) {
if (packageManager.type === "Cargo.toml") {
tag = packageManager.content.package.version;
labels.push(
`org.opencontainers.image.description=${packageManager.content.package.description}`
);
} else if (packageManager.type === "package.json") {
tag = packageManager.content.version;
labels.push(
`org.opencontainers.image.description=${packageManager.content.description}`
);
}
}
project.targets = {
...project.targets,
container: {
executor: "@nx-tools/nx-container:build",
options: {
file: dockerFilePath,
engine,
labels,
push: true,
platforms: ["linux/amd64"],
metadata: {
images: [
`${config.namespace ? config.namespace : "storm-software"}/${_optionalChain([project, 'access', _3 => _3.name, 'optionalAccess', _4 => _4.replace, 'call', _5 => _5(`${config.namespace}-`, "")])}`,
`ghcr.io/${(typeof config.organization === "string" ? config.organization : _optionalChain([config, 'access', _6 => _6.organization, 'optionalAccess', _7 => _7.name])) || "storm-software"}/${project.name}`
],
tags: [
"type=schedule",
"type=ref,event=branch",
"type=ref,event=tag",
"type=ref,event=pr",
"type=semver,pattern={{version}}",
"type=semver,pattern={{major}}.{{minor}}",
"type=semver,pattern={{major}}",
"type=sha"
]
}
},
defaultConfiguration: "production",
configurations: {
development: {
quiet: false,
"build-args": [
"ENVIRONMENT=development",
"DEBUG_IMAGE=true",
`RELEASE=${tag}`
]
},
production: {
quiet: true,
"build-args": [
"ENVIRONMENT=production",
"DEBUG_IMAGE=false",
`RELEASE=${tag}`
]
}
}
}
};
if ((_chunkXJT7AOEUjs.isEqualProjectTag.call(void 0,
project,
_chunkXJT7AOEUjs.ProjectTagConstants.ProjectType.TAG_ID,
_chunkXJT7AOEUjs.ProjectTagConstants.ProjectType.APPLICATION
) || project.projectType === "application") && _chunkXJT7AOEUjs.hasProjectTag.call(void 0, project, _chunkXJT7AOEUjs.ProjectTagConstants.Registry.TAG_ID)) {
if (project.targets["nx-release-publish"]) {
project.targets["nx-release-publish"] = {
...project.targets["nx-release-publish"],
executor: "@storm-software/k8s-tools:container-publish",
options: {
packageRoot: project.root
}
};
} else {
project.targets["nx-release-publish"] = {
cache: true,
inputs: [
"linting",
"testing",
"documentation",
"rust",
"^production"
],
dependsOn: ["build", "^nx-release-publish"],
executor: "@storm-software/k8s-tools:container-publish",
options: {
packageRoot: project.root
}
};
}
}
_chunkXJT7AOEUjs.setDefaultProjectTags.call(void 0, project);
const projects = {};
const externalNodes = {};
projects[project.root] = {
...project,
release: {
...project.release,
version: {
..._optionalChain([project, 'access', _8 => _8.release, 'optionalAccess', _9 => _9.version]),
generator: "@storm-software/workspace-tools:release-version"
}
}
};
return {
projects,
externalNodes
};
} catch (e) {
console.error(e);
return {};
}
},
configFiles,
options,
context
);
}
];
var titleCase = (input) => {
if (!input) {
return "";
}
return input.split(/(?=[A-Z])|[\.\-\s_]/).map((s) => s.trim()).filter((s) => !!s).map(
(s) => s ? s.toLowerCase().charAt(0).toUpperCase() + s.toLowerCase().slice(1) : s
).join(" ");
};
exports.name = name; exports.description = description; exports.createNodesV2 = createNodesV2;