UNPKG

reg-notify-gitlab-plugin

Version:

Notify reg-suit result to GitLab repository

223 lines 11.2 kB
"use strict"; 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.appendOrUpdateMergerequestsBody = exports.addDiscussionToMergeRequests = exports.commentToMergeRequests = exports.DESC_BODY_END_MARK = exports.DESC_BODY_START_MARK = exports.COMMENT_MARK = void 0; const create_comment_1 = require("./create-comment"); exports.COMMENT_MARK = "<!-- reg-notify-gitlab-plugin posted -->"; exports.DESC_BODY_START_MARK = exports.COMMENT_MARK; exports.DESC_BODY_END_MARK = "<!-- reg-notify-gitlab-plugin posted end -->"; function createNoteBody(params, shortDescription) { return (exports.COMMENT_MARK + "\n" + (0, create_comment_1.createCommentBody)({ failedItemsCount: params.comparisonResult.failedItems.length, newItemsCount: params.comparisonResult.newItems.length, deletedItemsCount: params.comparisonResult.deletedItems.length, passedItemsCount: params.comparisonResult.passedItems.length, reportUrl: params.reportUrl, shortDescription, })); } function modifyDescription(description, params, shortDescription) { if (description.indexOf(exports.DESC_BODY_START_MARK) === -1) { return (description + "\n" + exports.DESC_BODY_START_MARK + "\n" + (0, create_comment_1.createCommentBody)({ failedItemsCount: params.comparisonResult.failedItems.length, newItemsCount: params.comparisonResult.newItems.length, deletedItemsCount: params.comparisonResult.deletedItems.length, passedItemsCount: params.comparisonResult.passedItems.length, reportUrl: params.reportUrl, shortDescription, }) + "\n" + exports.DESC_BODY_END_MARK); } const [pre, tmp] = description.split(exports.DESC_BODY_START_MARK); const post = tmp.split(exports.DESC_BODY_END_MARK)[1]; return (pre + "\n" + exports.DESC_BODY_START_MARK + "\n" + (0, create_comment_1.createCommentBody)({ failedItemsCount: params.comparisonResult.failedItems.length, newItemsCount: params.comparisonResult.newItems.length, deletedItemsCount: params.comparisonResult.deletedItems.length, passedItemsCount: params.comparisonResult.passedItems.length, reportUrl: params.reportUrl, shortDescription, }) + "\n" + exports.DESC_BODY_END_MARK + "\n" + post); } function commentToMergeRequests({ noEmit, logger, client, notifyParams, projectId, shortDescription, }) { return __awaiter(this, void 0, void 0, function* () { try { const mrList = yield client.getMergeRequests({ project_id: +projectId }); if (!mrList.length) { logger.warn("There's no opened merge requests. Retry open some merge request including the commit " + logger.colors.green(notifyParams.actualKey)); return; } const commitsList = yield Promise.all(mrList.map((mr) => __awaiter(this, void 0, void 0, function* () { const commits = yield client.getMergeRequestCommits({ project_id: +projectId, merge_request_iid: mr.iid }); return { mr, commits }; }))); const targetMrs = commitsList.filter(({ commits }) => commits.some(c => c.id === notifyParams.actualKey)); if (!targetMrs.length) { logger.warn("There's no opened merge requests including the commit " + logger.colors.green(notifyParams.actualKey) + " ..."); return; } yield Promise.all(targetMrs.map(({ mr }) => __awaiter(this, void 0, void 0, function* () { const notes = yield client.getMergeRequestNotes({ project_id: +projectId, merge_request_iid: mr.iid }); const commentedNote = notes.find(note => note.body.startsWith(exports.COMMENT_MARK)); const spinner = logger.getSpinner("commenting merge request" + logger.colors.magenta(mr.web_url)); spinner.start(); try { if (!commentedNote) { if (!noEmit) { yield client.postMergeRequestNote({ project_id: +projectId, merge_request_iid: mr.iid, body: createNoteBody(notifyParams, shortDescription), }); } } else { if (!noEmit) { yield client.putMergeRequestNote({ project_id: +projectId, merge_request_iid: mr.iid, note_id: commentedNote.id, body: createNoteBody(notifyParams, shortDescription), }); } } spinner.stop(); } catch (err) { spinner.stop(); throw err; } }))); } catch (error) { throw error; } }); } exports.commentToMergeRequests = commentToMergeRequests; function addDiscussionToMergeRequests({ noEmit, logger, client, notifyParams, projectId, shortDescription, }) { return __awaiter(this, void 0, void 0, function* () { try { const mrList = yield client.getMergeRequests({ project_id: +projectId }); if (!mrList.length) { logger.warn("There's no opened merge requests. Retry open some merge request including the commit " + logger.colors.green(notifyParams.actualKey)); return; } const commitsList = yield Promise.all(mrList.map((mr) => __awaiter(this, void 0, void 0, function* () { const commits = yield client.getMergeRequestCommits({ project_id: +projectId, merge_request_iid: mr.iid }); return { mr, commits }; }))); const targetMrs = commitsList.filter(({ commits }) => commits.some(c => c.id === notifyParams.actualKey)); if (!targetMrs.length) { logger.warn("There's no opened merge requests including the commit " + logger.colors.green(notifyParams.actualKey) + " ..."); return; } yield Promise.all(targetMrs.map(({ mr }) => __awaiter(this, void 0, void 0, function* () { const notes = yield client.getMergeRequestNotes({ project_id: +projectId, merge_request_iid: mr.iid }); const commentedNote = notes.find(note => note.body.startsWith(exports.COMMENT_MARK)); const spinner = logger.getSpinner("commenting merge request" + logger.colors.magenta(mr.web_url)); spinner.start(); try { if (!commentedNote) { if (!noEmit) { yield client.postMergeRequestDiscussion({ project_id: +projectId, merge_request_iid: mr.iid, body: createNoteBody(notifyParams, shortDescription), }); } } else { if (!noEmit) { yield client.putMergeRequestNote({ project_id: +projectId, merge_request_iid: mr.iid, note_id: commentedNote.id, body: createNoteBody(notifyParams, shortDescription), }); } } spinner.stop(); } catch (err) { spinner.stop(); throw err; } }))); } catch (error) { throw error; } }); } exports.addDiscussionToMergeRequests = addDiscussionToMergeRequests; function appendOrUpdateMergerequestsBody({ noEmit, logger, client, notifyParams, projectId, shortDescription, }) { return __awaiter(this, void 0, void 0, function* () { try { const mrList = yield client.getMergeRequests({ project_id: +projectId }); if (!mrList.length) { logger.warn("There's no opened merge requests. Retry open some merge request including the commit " + logger.colors.green(notifyParams.actualKey)); return; } const commitsList = yield Promise.all(mrList.map((mr) => __awaiter(this, void 0, void 0, function* () { const commits = yield client.getMergeRequestCommits({ project_id: +projectId, merge_request_iid: mr.iid }); return { mr, commits }; }))); const targetMrs = commitsList.filter(({ commits }) => commits.some(c => c.id === notifyParams.actualKey)); if (!targetMrs.length) { logger.warn("There's no opened merge requests including the commit " + logger.colors.green(notifyParams.actualKey) + " ..."); return; } yield Promise.all(targetMrs.map(({ mr }) => __awaiter(this, void 0, void 0, function* () { const newDescription = modifyDescription(mr.description, notifyParams, shortDescription); const spinner = logger.getSpinner("commenting merge request" + logger.colors.magenta(mr.web_url)); spinner.start(); try { if (!noEmit) { yield client.putMergeRequest({ project_id: +projectId, iid: mr.iid, description: newDescription, }); } spinner.stop(); } catch (err) { spinner.stop(); throw err; } }))); } catch (error) { throw error; } }); } exports.appendOrUpdateMergerequestsBody = appendOrUpdateMergerequestsBody; //# sourceMappingURL=use-cases.js.map