UNPKG

@adinsure-ops/ops-cli

Version:

Operations CLI for working with AdInsure

174 lines (173 loc) 6.98 kB
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;