From 7009715369a50740ba2ce00534012c1caf269ad2 Mon Sep 17 00:00:00 2001 From: Dmitriy Mozgovoy Date: Thu, 9 Nov 2023 00:47:06 +0200 Subject: [PATCH] chore(ci): fixed release notification action; (#6064) --- bin/GithubAPI.js | 6 +++--- bin/RepoBot.js | 25 +++++++++++++++++++++++-- bin/githubAxios.js | 10 +++++++++- templates/pr_published.hbs | 2 +- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/bin/GithubAPI.js b/bin/GithubAPI.js index 6ff4725..296f7f6 100644 --- a/bin/GithubAPI.js +++ b/bin/GithubAPI.js @@ -27,7 +27,7 @@ export default class GithubAPI { return (await this.axios.post(`/issues/${issue}/comments`, {body})).data; } - async getComments(issue, {desc = false, per_page= 100, page = 1}) { + async getComments(issue, {desc = false, per_page= 100, page = 1} = {}) { return (await this.axios.get(`/issues/${issue}/comments`, {params: {direction: desc ? 'desc' : 'asc', per_page, page}})).data; } @@ -40,11 +40,11 @@ export default class GithubAPI { } async appendLabels(issue, labels) { - return (await this.axios.post(`issues/${issue}/labels`, {labels})).data; + return (await this.axios.post(`/issues/${issue}/labels`, {labels})).data; } async getUser(user) { - return (await this.axios.get(`users/${user}`)).data; + return (await githubAxios.get(`/users/${user}`)).data; } async isCollaborator(user) { diff --git a/bin/RepoBot.js b/bin/RepoBot.js index 3d85bbf..da0ae37 100644 --- a/bin/RepoBot.js +++ b/bin/RepoBot.js @@ -4,9 +4,19 @@ import Handlebars from "handlebars"; import fs from "fs/promises"; import {colorize} from "./helpers/colorize.js"; import {getReleaseInfo} from "./contributors.js"; +import path from "path"; +import {fileURLToPath} from "url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const NOTIFY_PR_TEMPLATE = path.resolve(__dirname, '../templates/pr_published.hbs'); const normalizeTag = (tag) => tag ? 'v' + tag.replace(/^v/, '') : ''; +const GITHUB_BOT_LOGIN = 'github-actions[bot]'; + +const skipCollaboratorPRs = true; + class RepoBot { constructor(options) { const { @@ -15,7 +25,7 @@ class RepoBot { } = options || {}; this.templates = Object.assign({ - published: '../templates/pr_published.hbs' + published: NOTIFY_PR_TEMPLATE }, templates); this.github = api || new GithubAPI(owner, repo); @@ -53,7 +63,18 @@ class RepoBot { await this.github.appendLabels(id, [tag]); - if (isBot || labels.find(({name}) => name === 'automated pr') || (await this.github.isCollaborator(login))) { + if (isBot || labels.find(({name}) => name === 'automated pr') || (skipCollaboratorPRs && await this.github.isCollaborator(login))) { + return false; + } + + const comments = await this.github.getComments(id, {desc: true}); + + const comment = comments.find( + ({body, user}) => user.login === GITHUB_BOT_LOGIN && body.indexOf('published in') >= 0 + ) + + if (comment) { + console.log(colorize()`Release comment [${comment.html_url}] already exists in #${pr.id}`); return false; } diff --git a/bin/githubAxios.js b/bin/githubAxios.js index 5ecc98e..ed9c4a0 100644 --- a/bin/githubAxios.js +++ b/bin/githubAxios.js @@ -1,11 +1,19 @@ import axios from '../index.js'; +import {colorize} from "./helpers/colorize.js"; const {GITHUB_TOKEN} = process.env; GITHUB_TOKEN ? console.log(`[GITHUB_TOKEN OK]`) : console.warn(`[GITHUB_TOKEN is not defined]`); +const defaultTransform = axios.defaults.transformRequest; + export default axios.create({ + transformRequest: [defaultTransform[0], function (data) { + console.log(colorize()`[${this.method.toUpperCase()}] Request [${new URL(axios.getUri(this)).pathname}]`); + return data; + }], + baseURL: 'https://api.github.com/', headers: { Authorization: GITHUB_TOKEN ? `token ${GITHUB_TOKEN}` : null } -}) +}); diff --git a/templates/pr_published.hbs b/templates/pr_published.hbs index 0af9a2c..c1c5b50 100644 --- a/templates/pr_published.hbs +++ b/templates/pr_published.hbs @@ -1 +1 @@ -Hello, @{{ author.login }}! This PR has been published in [{{ release.tag }}]({{ release.url }}) release. Thank you for your contribution ❤️! +Hi, @{{ author.login }}! This PR has been published in [{{ release.tag }}]({{ release.url }}) release. Thank you for your contribution ❤️!