diff --git a/.github/workflows/action-test.yml b/.github/workflows/action-test.yml index 9c8d483aae370c38bae30130f9071f2c12174b96..b411b4cabe0b9f6a7f68823dc37dd1371d9e0be5 100644 --- a/.github/workflows/action-test.yml +++ b/.github/workflows/action-test.yml @@ -13,3 +13,6 @@ jobs: - uses: ./ # with: # BOT_GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }} + with: + IS_MODIFY_TITLE: true + diff --git a/action.yml b/action.yml index 7b96963bad6a13151166b0863bd04ed60a245a95..76e7fddd9dd25a6056d98405d4c42405d28660ec 100644 --- a/action.yml +++ b/action.yml @@ -9,6 +9,8 @@ inputs: description: 'The issue comment bot GITHUB_TOKEN.' BOT_LOGIN_NAME: description: 'The issue comment bot github login name.' + IS_MODIFY_TITLE: + description: 'Is need modify issue title, true or false, default false.' runs: using: 'node12' main: 'dist/index.js' diff --git a/dist/index.js b/dist/index.js index b3643a7905c182a90385ddb5af99bd53cd0f54b7..0f8bbae272e84900f1c7310ef5b5547fe26e0376 100644 Binary files a/dist/index.js and b/dist/index.js differ diff --git a/dist/index.js.map b/dist/index.js.map index 4d2e19eabed2ffcf06530c1b7d11aa4a5bff1c81..447fdd29c9ec6872b9520798b3135ff04d5fd834 100644 Binary files a/dist/index.js.map and b/dist/index.js.map differ diff --git a/src/main.ts b/src/main.ts index 23aeb64135544b71fea0c0e3978f6cd6899c4e44..dd42fc90e1138bdc34bdfe4a1f0c4eef7bf269b7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,28 +17,41 @@ async function run(): Promise { return } let issueNumber = null - let originBody = null + let originComment = null + let originTitle = null let issueUser = null + let botNote = "Bot detected the issue body's language is not English, translate it automatically. πŸ‘―πŸ‘­πŸ»πŸ§‘β€πŸ€β€πŸ§‘πŸ‘«πŸ§‘πŸΏβ€πŸ€β€πŸ§‘πŸ»πŸ‘©πŸΎβ€πŸ€β€πŸ‘¨πŸΏπŸ‘¬πŸΏ" + let isModifyTitle = core.getInput('IS_MODIFY_TITLE') if (github.context.eventName === 'issue_comment') { const issueCommentPayload = github.context .payload as webhook.EventPayloads.WebhookPayloadIssueComment issueNumber = issueCommentPayload.issue.number issueUser = issueCommentPayload.comment.user.login - originBody = issueCommentPayload.comment.body + originComment = issueCommentPayload.comment.body } else { const issuePayload = github.context.payload as webhook.EventPayloads.WebhookPayloadIssues issueNumber = issuePayload.issue.number issueUser = issuePayload.issue.user.login - originBody = - ` -**Title:** ${issuePayload.issue.title} + originComment = issuePayload.issue.body + originTitle = issuePayload.issue.title -${issuePayload.issue.body} - ` + if (isModifyTitle === 'true') { + originComment = issuePayload.issue.body + originTitle = issuePayload.issue.title + } else { + originComment = + ` + **Title:** ${issuePayload.issue.title} + + ${issuePayload.issue.body} + ` + } } - // detect comment body is english - if (detectIsEnglish(originBody)) { + let translateOrigin = originComment + '@====@' + originTitle + + // detect issue title comment body is english + if (detectIsEnglish(translateOrigin)) { core.info('Detect the issue comment body is english already, ignore return.') return } @@ -67,29 +80,67 @@ ${issuePayload.issue.body} // translate issue comment body to english - const translateBody = await translateCommentBody( - originBody, issueUser - ) + const translateTmp = await translateIssueOrigin(translateOrigin) - if (translateBody === null - || translateBody === '' - || translateBody === originBody) { + if (translateTmp === null + || translateTmp === '' + || translateTmp === translateOrigin) { core.warning("The translateBody is null or same, ignore return.") return } + let translateBody:string[] = translateTmp.split('@====@') + let translateComment = null + let translateTitle = null + + + if (translateBody.length == 1) { + translateComment = translateBody[0] + } else if (translateBody.length == 2) { + translateComment = translateBody[0] + translateTitle = translateBody[1] + } else { + core.setFailed(`the translateBody is ${translateTmp}`) + } + // create comment by bot if (octokit === null) { octokit = github.getOctokit(botToken) } - await createComment(issueNumber, translateBody, octokit) + if (translateTitle !== null && isModifyTitle === 'false') { + translateComment = + ` +> ${botNote} +---- +**Title:** ${translateTitle} + +${translateComment} + ` + } else { + translateComment = + ` +> ${botNote} +---- + +${translateComment} + ` + } + + if (isModifyTitle === 'true') { + await modifyTitle(issueNumber, translateTitle, octokit) + } + + await createComment(issueNumber, translateComment, octokit) core.setOutput('complete time', new Date().toTimeString()) } catch (error) { core.setFailed(error.message) } } -function detectIsEnglish(body: string): boolean | true { +function detectIsEnglish(body: string | null): boolean | true { + if (body === null) { + return true + } const detectResult = franc(body) if (detectResult === 'und' || detectResult === undefined @@ -101,19 +152,13 @@ function detectIsEnglish(body: string): boolean | true { return detectResult === 'eng' } -async function translateCommentBody(body: string, issueUser: string): Promise { +async function translateIssueOrigin(body: string): Promise { let result = '' await translate(body, {to: 'en'}) .then(res => { if (res.text !== body) { - result = - ` -> Bot detected the issue body's language is not English, translate it automatically. πŸ‘―πŸ‘­πŸ»πŸ§‘β€πŸ€β€πŸ§‘πŸ‘«πŸ§‘πŸΏβ€πŸ€β€πŸ§‘πŸ»πŸ‘©πŸΎβ€πŸ€β€πŸ‘¨πŸΏπŸ‘¬πŸΏ ----- - -${res.text} - ` - } + result = res.text + } }) .catch(err => { core.error(err) @@ -122,7 +167,7 @@ ${res.text} return result } -async function createComment(issueNumber: number, body: string, octokit: any): Promise { +async function createComment(issueNumber: number, body: string | null, octokit: any): Promise { const {owner, repo} = github.context.repo const issue_url = github.context.payload.issue?.html_url await octokit.issues.createComment({ @@ -134,4 +179,16 @@ async function createComment(issueNumber: number, body: string, octokit: any): P core.info(`complete to push translate issue comment: ${body} in ${issue_url} `) } +async function modifyTitle(issueNumber: number, title: string | null, octokit: any): Promise { + const {owner, repo} = github.context.repo + const issue_url = github.context.payload.issue?.html_url + await octokit.issues.update({ + owner, + repo, + issue_number: issueNumber, + title + }) + core.info(`complete to modify translate issue title: ${title} in ${issue_url} `) +} + run()