@catladder/cli
Version:
Panter cli tool for cloud CI/CD and DevOps
73 lines (72 loc) • 4.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getCloudRunJobsWithNames = exports.getJobCreateScripts = exports.getDeleteJobsScripts = void 0;
const getLabels_1 = require("../../../context/getLabels");
const utils_1 = require("../../../utils");
const createArgsString_1 = require("../utils/createArgsString");
const jobName_1 = require("../utils/jobName");
const common_1 = require("./common");
const constants_1 = require("./constants");
const volumes_1 = require("./volumes");
const getJobOrServiceArgs_1 = require("../utils/getJobOrServiceArgs");
const getDeleteJobsScripts = context => {
const commonArgs = (0, common_1.getCommonCloudRunArgs)(context);
const commonArgsString = (0, createArgsString_1.createArgsString)(commonArgs);
const jobsWithNames = (0, exports.getCloudRunJobsWithNames)(context);
return jobsWithNames.flatMap(({
fullJobName
}) => [
// first delete all job executions. Otherwise delete might fail if one of those is still running
`${(0, common_1.gcloudRunCmd)()} jobs executions list ${commonArgsString} --job ${fullJobName} --format="value(name)" | xargs -I {} ${(0, common_1.gcloudRunCmd)()} jobs executions delete {} --quiet ${commonArgsString}`, `${(0, common_1.gcloudRunCmd)()} jobs delete ${fullJobName} ${commonArgsString}`]);
};
exports.getDeleteJobsScripts = getDeleteJobsScripts;
const getJobCreateScripts = context => (0, exports.getCloudRunJobsWithNames)(context).map(({
job,
fullJobName
}, jobIndex) => {
var _a, _b, _c, _d, _e;
const commandArray = Array.isArray(job.command) ? job.command : job.command.split(" ");
const {
image: commonImage,
project,
region,
...deployArgs
} = (0, common_1.getCommonDeployArgs)(context);
const commonDeployArgsString = (0, createArgsString_1.createArgsString)({
command: `"${commandArray.join(",")}"`,
args: (0, getJobOrServiceArgs_1.getCloudRunServiceOrJobArgsArg)(job.args),
labels: `"${(0, common_1.makeLabelString)((0, getLabels_1.getLabels)(context))},cloud-run-job-name=$current_job_name"`,
image: `"${(_a = job.image) !== null && _a !== void 0 ? _a : commonImage}"`,
project,
region,
cpu: job.cpu,
memory: (_b = job.memory) !== null && _b !== void 0 ? _b : "512Mi",
parallelism: (_c = job.parallelism) !== null && _c !== void 0 ? _c : 1,
"task-timeout": (_d = job.timeout) !== null && _d !== void 0 ? _d : "10m",
"env-vars-file": constants_1.ENV_VARS_FILENAME,
"max-retries": (_e = job.maxRetries) !== null && _e !== void 0 ? _e : 0,
...deployArgs,
// network
"vpc-connector": job === null || job === void 0 ? void 0 : job.vpcConnector,
"vpc-egress": job === null || job === void 0 ? void 0 : job.vpcEgress,
network: job === null || job === void 0 ? void 0 : job.network,
subnet: job === null || job === void 0 ? void 0 : job.subnet
}, ...(0, volumes_1.createVolumeConfig)(job.volumes, "job"));
return [jobIndex === 0 ? `exist_job_names="$(\n ${(0, common_1.gcloudRunCmd)()} jobs list --filter='metadata.name ~ ${context.env}.*${context.name}' --format='value(name)' --limit=999 --project='${project}' --region='${region}'\n)"` : null, `current_job_name="${fullJobName}"`, 'if echo "$exist_job_names" | grep -Fx "$current_job_name" >/dev/null; then', ` ${(0, common_1.gcloudRunCmd)()} jobs update "$current_job_name" ${commonDeployArgsString}`, "else", ` ${(0, common_1.gcloudRunCmd)()} jobs create "$current_job_name" ${commonDeployArgsString}`, "fi"].filter(utils_1.notNil).join("\n");
});
exports.getJobCreateScripts = getJobCreateScripts;
const getCloudRunJobsWithNames = context => {
var _a;
const deployConfig = (0, common_1.getCloudRunDeployConfig)(context);
const jobsWithNames = Object.entries((_a = deployConfig.jobs) !== null && _a !== void 0 ? _a : {})
// filter out disabled jobs
.filter(entry => Boolean(entry[1])).map(([jobName, job]) => ({
fullJobName: (0, jobName_1.getFullJobName)(context, jobName),
job,
jobName
}));
return jobsWithNames;
};
exports.getCloudRunJobsWithNames = getCloudRunJobsWithNames;