@adinsure-ops/ops-cli
Version:
Operations CLI for working with AdInsure
174 lines (173 loc) • 6.98 kB
JavaScript
import { __awaiter } from "tslib";
import { Args, Flags } from '@oclif/core';
import chalk from 'chalk';
import CommandBase from '../../command.base.js';
import GitLab from '../../lib/gitlab.js';
import OpsConfig from '../../lib/config.js';
class GitlabGetTagPipeline extends CommandBase {
waitPipelineStatus(gitlab, tag, timeout, delay) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
let time = 0;
try {
const status = yield gitlab.getTagPipelineStatus(tag);
switch (status) {
case 'unknown': {
reject(new Error(`Pipeline or tag does not exist!`));
return;
}
case 'failed': {
reject(new Error(`Pipeline failed!`));
return;
}
case 'canceled': {
reject(new Error(`Pipeline canceled!`));
return;
}
case 'skipped': {
reject(new Error(`Pipeline skipped!`));
return;
}
case 'success': {
resolve(`Pipeline passed successfully!`);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (error) {
reject(new Error(error.message));
return;
}
const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
if (time >= timeout) {
reject(new Error('Timeout waiting pipeline'));
clearInterval(interval);
}
time += delay;
try {
const status = yield gitlab.getTagPipelineStatus(tag);
switch (status) {
case 'unknown': {
reject(new Error(`Pipeline or tag does not exist!`));
clearInterval(interval);
break;
}
case 'failed': {
reject(new Error(`Pipeline failed!`));
clearInterval(interval);
break;
}
case 'canceled': {
reject(new Error(`Pipeline canceled!`));
clearInterval(interval);
break;
}
case 'skipped': {
reject(new Error(`Pipeline skipped!`));
clearInterval(interval);
break;
}
case 'success': {
resolve(`Pipeline passed successfully!`);
clearInterval(interval);
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (error) {
reject(new Error(error.message));
clearInterval(interval);
}
}), delay * 1000);
}));
});
}
hostConfigValidation(config) {
return __awaiter(this, void 0, void 0, function* () {
const host = config.get("gitlab_host");
if (host !== undefined) {
GitlabGetTagPipeline.flags.host.default = host;
return;
}
GitlabGetTagPipeline.flags.host.default =
"https://git.adacta-fintech.com";
});
}
projectConfigValidation(config) {
return __awaiter(this, void 0, void 0, function* () {
const project = config.get("gitlab_project_id");
if (project !== undefined) {
GitlabGetTagPipeline.flags.project.default = project;
return;
}
GitlabGetTagPipeline.flags.project.default = "413";
});
}
run() {
const _super = Object.create(null, {
run: { get: () => super.run }
});
return __awaiter(this, void 0, void 0, function* () {
_super.run.call(this);
const config = new OpsConfig(this.security.getConfigPath());
this.hostConfigValidation(config);
this.projectConfigValidation(config);
const { args, flags } = yield this.parse(GitlabGetTagPipeline);
const gitlab = new GitLab(flags.host, flags.project, flags.pat);
if (!flags.wait) {
const status = yield gitlab.getTagPipelineStatus(args.tag);
return this.log(`${chalk.green(status)}`);
}
try {
const status = yield this.waitPipelineStatus(gitlab, args.tag, Number.parseInt(flags.timeout, 10), Number.parseInt(flags.delay, 10));
this.log(status);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (error) {
this.error(error.message);
}
});
}
}
GitlabGetTagPipeline.description = 'get pipeline status for tag';
GitlabGetTagPipeline.usage = 'gitlab:get-tag-pipeline <tag>';
GitlabGetTagPipeline.examples = [
`$ ops gitlab:get-tag-pipeline 17.0.0`,
];
GitlabGetTagPipeline.args = {
tag: Args.string({
required: true,
description: 'Tag',
}),
};
GitlabGetTagPipeline.flags = {
pat: Flags.string({
required: true,
env: 'PRIVATE_TOKEN',
description: 'Token from user that has permissions to list and create tags',
}),
host: Flags.string({
default: 'https://git.adacta-fintech.com',
env: 'CI_SERVER_URL',
description: 'Server hostname',
}),
project: Flags.string({
default: '413',
env: 'CI_PROJECT_ID',
description: 'Project ID',
}),
wait: Flags.boolean({
description: 'Wait for pipeline to finish',
default: false,
}),
timeout: Flags.string({
default: '120',
description: 'Timeout for wait command in seconds (defaults to 120 seconds)',
}),
delay: Flags.string({
default: '5',
description: 'Delay of check in seconds (defaults to 5 seconds)',
}),
};
export default GitlabGetTagPipeline;