From a133157b3a4b7cc526c027cd5965a2387d10a361 Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Fri, 7 Mar 2025 16:19:58 +0530 Subject: [PATCH 01/10] Removed Jira links from readme (#36) Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c1fc5a2..e92e5fc 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ on: types: - opened - closed - - synchronize # See https://mychargebee.atlassian.net/browse/TECHINT-498 + - synchronize branches: - master @@ -50,7 +50,7 @@ jobs: prStatusChange: runs-on: ubuntu-latest steps: - - name: Install Node # See https://github.com/chargebee/chargebee-app/pull/37468 + - name: Install Node uses: actions/setup-node@v3 with: node-version: 18.x From 2a15273e8363541eeff0f044910b684dafe60fa8 Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:26:41 +0530 Subject: [PATCH 02/10] Add GitHub Actions workflow for secret scanning and configure pre-commit hook for Gitleaks Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- .github/workflows/secret-scan.yml | 10 ++++++++++ .pre-commit-config.yaml | 5 +++++ 2 files changed, 15 insertions(+) create mode 100644 .github/workflows/secret-scan.yml create mode 100644 .pre-commit-config.yaml diff --git a/.github/workflows/secret-scan.yml b/.github/workflows/secret-scan.yml new file mode 100644 index 0000000..85e4fe5 --- /dev/null +++ b/.github/workflows/secret-scan.yml @@ -0,0 +1,10 @@ +name: CB Secret PR Scan + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + SecretScanning: + uses: chargebee/cb-secrets-scanner/.github/workflows/cb-secret-scan.yml@main + secrets: inherit \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..93d4c32 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,5 @@ +repos: + - repo: https://github.com/gitleaks/gitleaks + rev: v8.18.4 + hooks: + - id: gitleaks \ No newline at end of file From 402c43a3770e2c0ea75ce80728106108f626991a Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Tue, 26 Aug 2025 12:44:14 +0530 Subject: [PATCH 03/10] Add resolveAllComments function to delete comments from cursor[bot] on PR open Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- apps/github.js | 18 +++++++++++++++++- dist/index.js | 19 ++++++++++++++++++- handlers/pr.js | 1 + 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/apps/github.js b/apps/github.js index 90d7a19..71eaa9d 100644 --- a/apps/github.js +++ b/apps/github.js @@ -22,6 +22,22 @@ async function setLabels(context, issueNumber, labels) { await context.octokit.issues.setLabels(context.repo({issue_number: issueNumber, labels: labels})) } +async function resolveAllComments(context, prNumber) { + const { data: comments } = await context.octokit.request( + 'GET /repos/{owner}/{repo}/pulls/{pull_number}/comments', + context.repo({pull_number: prNumber}) + ) + + for (const comment of comments) { + if (comment.user.login !== 'cursor[bot]') continue; + console.log("deleting comment : " + comment.id); + await context.octokit.request( + 'DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}', + context.repo({comment_id: comment.id}) + ); + } +} + async function mergePr(context, pr, onMergeFailure) { const maxRetries = 5 let i = 0 @@ -74,4 +90,4 @@ async function closePr(context, prNumber) { await context.octokit.pulls.update(context.repo({pull_number: prNumber, state : "closed"})) } -module.exports = {fetchProtectedBranchNames, createPr, setLabels, mergePr, deleteBranch, isMergeable, closePr, fetchOpenPr} +module.exports = {fetchProtectedBranchNames, createPr, setLabels, mergePr, deleteBranch, isMergeable, closePr, fetchOpenPr, resolveAllComments} diff --git a/dist/index.js b/dist/index.js index ea2de3b..3acf0b3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -51,6 +51,22 @@ async function setLabels(context, issueNumber, labels) { await context.octokit.issues.setLabels(context.repo({issue_number: issueNumber, labels: labels})) } +async function resolveAllComments(context, prNumber) { + const { data: comments } = await context.octokit.request( + 'GET /repos/{owner}/{repo}/pulls/{pull_number}/comments', + context.repo({pull_number: prNumber}) + ) + + for (const comment of comments) { + if (comment.user.login !== 'cursor[bot]') continue; + console.log("deleting comment : " + comment.id); + await context.octokit.request( + 'DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}', + context.repo({comment_id: comment.id}) + ); + } +} + async function mergePr(context, pr, onMergeFailure) { const maxRetries = 5 let i = 0 @@ -103,7 +119,7 @@ async function closePr(context, prNumber) { await context.octokit.pulls.update(context.repo({pull_number: prNumber, state : "closed"})) } -module.exports = {fetchProtectedBranchNames, createPr, setLabels, mergePr, deleteBranch, isMergeable, closePr, fetchOpenPr} +module.exports = {fetchProtectedBranchNames, createPr, setLabels, mergePr, deleteBranch, isMergeable, closePr, fetchOpenPr, resolveAllComments} /***/ }), @@ -285,6 +301,7 @@ async function onPrOpen(context) { ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { + await github.resolveAllComments(context, pr.number); const isMergeable = await github.isMergeable(context, pr.number) if (isMergeable === false) { await Promise.all([ diff --git a/handlers/pr.js b/handlers/pr.js index d48516b..78dccc0 100644 --- a/handlers/pr.js +++ b/handlers/pr.js @@ -114,6 +114,7 @@ async function onPrOpen(context) { ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { + await github.resolveAllComments(context, pr.number); const isMergeable = await github.isMergeable(context, pr.number) if (isMergeable === false) { await Promise.all([ From fc7cacf838bfadc65a0968d8887ba9b52ea98541 Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Tue, 26 Aug 2025 12:53:13 +0530 Subject: [PATCH 04/10] Comment out the notification part for testing Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- dist/index.js | 8 ++++---- handlers/pr.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dist/index.js b/dist/index.js index 3acf0b3..221def3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -295,10 +295,10 @@ async function onPrOpen(context) { } } - let promises = [ - notifications.prOpened(pr), - github.setLabels(context, pr.number, [pr.to]) - ] + // let promises = [ + // notifications.prOpened(pr), + // github.setLabels(context, pr.number, [pr.to]) + // ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { await github.resolveAllComments(context, pr.number); diff --git a/handlers/pr.js b/handlers/pr.js index 78dccc0..da66b1d 100644 --- a/handlers/pr.js +++ b/handlers/pr.js @@ -108,10 +108,10 @@ async function onPrOpen(context) { } } - let promises = [ - notifications.prOpened(pr), - github.setLabels(context, pr.number, [pr.to]) - ] + // let promises = [ + // notifications.prOpened(pr), + // github.setLabels(context, pr.number, [pr.to]) + // ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { await github.resolveAllComments(context, pr.number); From 68133e06055f6fa7b084ec267f81f8af8caebbeb Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:00:31 +0530 Subject: [PATCH 05/10] Update resolveAllComments to delete comments from both cursor[bot] and cb-jarunmadhesh; invoke resolveAllComments in isMergeable function Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- apps/github.js | 3 ++- dist/index.js | 4 ++-- handlers/pr.js | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/github.js b/apps/github.js index 71eaa9d..e524c53 100644 --- a/apps/github.js +++ b/apps/github.js @@ -29,7 +29,7 @@ async function resolveAllComments(context, prNumber) { ) for (const comment of comments) { - if (comment.user.login !== 'cursor[bot]') continue; + if (comment.user.login !== 'cursor[bot]' || comment.user.login !== "cb-jarunmadhesh") continue; console.log("deleting comment : " + comment.id); await context.octokit.request( 'DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}', @@ -72,6 +72,7 @@ async function isMergeable (context, prNumber) { const maxRetries = 5 let i = 0 while (i++ < maxRetries) { + await resolveAllComments(context, prNumber); const pr = await context.octokit.pulls.get(context.repo({pull_number: prNumber})) console.log(`PR Details of ${prNumber}`) console.log(JSON.stringify(pr.data, null, 2)); diff --git a/dist/index.js b/dist/index.js index 221def3..3d9f103 100644 --- a/dist/index.js +++ b/dist/index.js @@ -58,7 +58,7 @@ async function resolveAllComments(context, prNumber) { ) for (const comment of comments) { - if (comment.user.login !== 'cursor[bot]') continue; + if (comment.user.login !== 'cursor[bot]' || comment.user.login !== "cb-jarunmadhesh") continue; console.log("deleting comment : " + comment.id); await context.octokit.request( 'DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}', @@ -101,6 +101,7 @@ async function isMergeable (context, prNumber) { const maxRetries = 5 let i = 0 while (i++ < maxRetries) { + await resolveAllComments(context, prNumber); const pr = await context.octokit.pulls.get(context.repo({pull_number: prNumber})) console.log(`PR Details of ${prNumber}`) console.log(JSON.stringify(pr.data, null, 2)); @@ -301,7 +302,6 @@ async function onPrOpen(context) { // ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { - await github.resolveAllComments(context, pr.number); const isMergeable = await github.isMergeable(context, pr.number) if (isMergeable === false) { await Promise.all([ diff --git a/handlers/pr.js b/handlers/pr.js index da66b1d..3e3ba5c 100644 --- a/handlers/pr.js +++ b/handlers/pr.js @@ -114,7 +114,6 @@ async function onPrOpen(context) { // ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { - await github.resolveAllComments(context, pr.number); const isMergeable = await github.isMergeable(context, pr.number) if (isMergeable === false) { await Promise.all([ From b194bff6730cfe8c05652099b1f4f160bd9ba840 Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:05:05 +0530 Subject: [PATCH 06/10] fix Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- apps/github.js | 2 +- dist/index.js | 10 +++++----- handlers/pr.js | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/github.js b/apps/github.js index e524c53..46b96a0 100644 --- a/apps/github.js +++ b/apps/github.js @@ -29,7 +29,7 @@ async function resolveAllComments(context, prNumber) { ) for (const comment of comments) { - if (comment.user.login !== 'cursor[bot]' || comment.user.login !== "cb-jarunmadhesh") continue; + if (comment.user.login !== 'cursor[bot]' && comment.user.login !== "cb-jarunmadhesh") continue; console.log("deleting comment : " + comment.id); await context.octokit.request( 'DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}', diff --git a/dist/index.js b/dist/index.js index 3d9f103..de38c04 100644 --- a/dist/index.js +++ b/dist/index.js @@ -58,7 +58,7 @@ async function resolveAllComments(context, prNumber) { ) for (const comment of comments) { - if (comment.user.login !== 'cursor[bot]' || comment.user.login !== "cb-jarunmadhesh") continue; + if (comment.user.login !== 'cursor[bot]' && comment.user.login !== "cb-jarunmadhesh") continue; console.log("deleting comment : " + comment.id); await context.octokit.request( 'DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}', @@ -296,10 +296,10 @@ async function onPrOpen(context) { } } - // let promises = [ - // notifications.prOpened(pr), - // github.setLabels(context, pr.number, [pr.to]) - // ] + let promises = [ + notifications.prOpened(pr), + github.setLabels(context, pr.number, [pr.to]) + ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { const isMergeable = await github.isMergeable(context, pr.number) diff --git a/handlers/pr.js b/handlers/pr.js index 3e3ba5c..d48516b 100644 --- a/handlers/pr.js +++ b/handlers/pr.js @@ -108,10 +108,10 @@ async function onPrOpen(context) { } } - // let promises = [ - // notifications.prOpened(pr), - // github.setLabels(context, pr.number, [pr.to]) - // ] + let promises = [ + notifications.prOpened(pr), + github.setLabels(context, pr.number, [pr.to]) + ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { const isMergeable = await github.isMergeable(context, pr.number) From ae7c670db95568e5f26b356487ac03f6af728e85 Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:09:40 +0530 Subject: [PATCH 07/10] comment out slack notifications again for testing Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- dist/index.js | 4 ++-- handlers/pr.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index de38c04..3ea64ae 100644 --- a/dist/index.js +++ b/dist/index.js @@ -297,8 +297,8 @@ async function onPrOpen(context) { } let promises = [ - notifications.prOpened(pr), - github.setLabels(context, pr.number, [pr.to]) + // notifications.prOpened(pr), + // github.setLabels(context, pr.number, [pr.to]) ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { diff --git a/handlers/pr.js b/handlers/pr.js index d48516b..35caf7c 100644 --- a/handlers/pr.js +++ b/handlers/pr.js @@ -109,8 +109,8 @@ async function onPrOpen(context) { } let promises = [ - notifications.prOpened(pr), - github.setLabels(context, pr.number, [pr.to]) + // notifications.prOpened(pr), + // github.setLabels(context, pr.number, [pr.to]) ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { From 1a4d973cbd33351f7f6f47900a80b8f806f53856 Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:11:11 +0530 Subject: [PATCH 08/10] remove code changes done for testing Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- apps/github.js | 2 +- dist/index.js | 6 +++--- handlers/pr.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/github.js b/apps/github.js index 46b96a0..9b3db74 100644 --- a/apps/github.js +++ b/apps/github.js @@ -29,7 +29,7 @@ async function resolveAllComments(context, prNumber) { ) for (const comment of comments) { - if (comment.user.login !== 'cursor[bot]' && comment.user.login !== "cb-jarunmadhesh") continue; + if (comment.user.login !== 'cursor[bot]') continue; console.log("deleting comment : " + comment.id); await context.octokit.request( 'DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}', diff --git a/dist/index.js b/dist/index.js index 3ea64ae..ed70799 100644 --- a/dist/index.js +++ b/dist/index.js @@ -58,7 +58,7 @@ async function resolveAllComments(context, prNumber) { ) for (const comment of comments) { - if (comment.user.login !== 'cursor[bot]' && comment.user.login !== "cb-jarunmadhesh") continue; + if (comment.user.login !== 'cursor[bot]') continue; console.log("deleting comment : " + comment.id); await context.octokit.request( 'DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}', @@ -297,8 +297,8 @@ async function onPrOpen(context) { } let promises = [ - // notifications.prOpened(pr), - // github.setLabels(context, pr.number, [pr.to]) + notifications.prOpened(pr), + github.setLabels(context, pr.number, [pr.to]) ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { diff --git a/handlers/pr.js b/handlers/pr.js index 35caf7c..d48516b 100644 --- a/handlers/pr.js +++ b/handlers/pr.js @@ -109,8 +109,8 @@ async function onPrOpen(context) { } let promises = [ - // notifications.prOpened(pr), - // github.setLabels(context, pr.number, [pr.to]) + notifications.prOpened(pr), + github.setLabels(context, pr.number, [pr.to]) ] if (isPrFromMasterToStagingBranch(pr) || isPrFromStagingToDevelopBranch(pr)) { From b69e3056ae5b8ed45e3a012f528b5dbd7ab2cb61 Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:12:35 +0530 Subject: [PATCH 09/10] console error Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- apps/github.js | 4 ++++ dist/index.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/apps/github.js b/apps/github.js index 9b3db74..019d96a 100644 --- a/apps/github.js +++ b/apps/github.js @@ -23,6 +23,7 @@ async function setLabels(context, issueNumber, labels) { } async function resolveAllComments(context, prNumber) { + try { const { data: comments } = await context.octokit.request( 'GET /repos/{owner}/{repo}/pulls/{pull_number}/comments', context.repo({pull_number: prNumber}) @@ -36,6 +37,9 @@ async function resolveAllComments(context, prNumber) { context.repo({comment_id: comment.id}) ); } + } catch(err) { + console.error(err); + } } async function mergePr(context, pr, onMergeFailure) { diff --git a/dist/index.js b/dist/index.js index ed70799..6267132 100644 --- a/dist/index.js +++ b/dist/index.js @@ -52,6 +52,7 @@ async function setLabels(context, issueNumber, labels) { } async function resolveAllComments(context, prNumber) { + try { const { data: comments } = await context.octokit.request( 'GET /repos/{owner}/{repo}/pulls/{pull_number}/comments', context.repo({pull_number: prNumber}) @@ -65,6 +66,9 @@ async function resolveAllComments(context, prNumber) { context.repo({comment_id: comment.id}) ); } + } catch(err) { + console.error(err); + } } async function mergePr(context, pr, onMergeFailure) { From 5f6dbb6a2e1b3da60c2783e02e29a3fea9377e8a Mon Sep 17 00:00:00 2001 From: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:13:46 +0530 Subject: [PATCH 10/10] remove export Signed-off-by: Jarun Madhesh <124247136+cb-jarunmadhesh@users.noreply.github.com> --- apps/github.js | 2 +- dist/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/github.js b/apps/github.js index 019d96a..8306a92 100644 --- a/apps/github.js +++ b/apps/github.js @@ -95,4 +95,4 @@ async function closePr(context, prNumber) { await context.octokit.pulls.update(context.repo({pull_number: prNumber, state : "closed"})) } -module.exports = {fetchProtectedBranchNames, createPr, setLabels, mergePr, deleteBranch, isMergeable, closePr, fetchOpenPr, resolveAllComments} +module.exports = {fetchProtectedBranchNames, createPr, setLabels, mergePr, deleteBranch, isMergeable, closePr, fetchOpenPr} diff --git a/dist/index.js b/dist/index.js index 6267132..d4e3bb5 100644 --- a/dist/index.js +++ b/dist/index.js @@ -124,7 +124,7 @@ async function closePr(context, prNumber) { await context.octokit.pulls.update(context.repo({pull_number: prNumber, state : "closed"})) } -module.exports = {fetchProtectedBranchNames, createPr, setLabels, mergePr, deleteBranch, isMergeable, closePr, fetchOpenPr, resolveAllComments} +module.exports = {fetchProtectedBranchNames, createPr, setLabels, mergePr, deleteBranch, isMergeable, closePr, fetchOpenPr} /***/ }),