aboutsummaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorST-DDT <[email protected]>2024-08-15 00:47:29 +0200
committerGitHub <[email protected]>2024-08-14 22:47:29 +0000
commitff808d5093f6722e2e3f79decf5997c13fdaf245 (patch)
treed4fbf38bcd3ff02ee039968077495154a1fad780 /.github
parent1e9d65bce14cb446388a61e2c9a74c5f898a985e (diff)
downloadfaker-ff808d5093f6722e2e3f79decf5997c13fdaf245.tar.xz
faker-ff808d5093f6722e2e3f79decf5997c13fdaf245.zip
infra: fix preflight comment for external contributors (#3038)
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/commentCodeGeneration.ts64
-rw-r--r--.github/workflows/pr.yml13
-rw-r--r--.github/workflows/preflight-comment.yml45
3 files changed, 87 insertions, 35 deletions
diff --git a/.github/workflows/commentCodeGeneration.ts b/.github/workflows/commentCodeGeneration.ts
index 96a520d1..2e8a115c 100644
--- a/.github/workflows/commentCodeGeneration.ts
+++ b/.github/workflows/commentCodeGeneration.ts
@@ -7,18 +7,34 @@ import type { context as ctx, GitHub } from '@actions/github/lib/utils';
* https://github.com/actions/github-script
*
* @param github A pre-authenticated octokit/rest.js client with pagination plugins
- * @param context An object containing the context of the workflow run
- * @param isSuccess A boolean indicating whether the workflow was successful
+ * @param context An object containing the context of the workflow run.
*/
export async function script(
github: InstanceType<typeof GitHub>,
- context: typeof ctx,
- isSuccess: boolean
+ context: typeof ctx
): Promise<void> {
+ const repoArgs = { owner: context.repo.owner, repo: context.repo.repo };
+
+ // Identify the PR that triggered the workflow
+ const head_branch: string = context.payload.workflow_run.head_branch;
+ const { data: prs } = await github.rest.pulls.list({
+ ...repoArgs,
+ state: 'open',
+ head: head_branch,
+ });
+
+ if (prs.length === 0) {
+ console.log(`No PRs found for branch ${head_branch}`);
+ return;
+ }
+
+ const pr_number = prs[0].number;
+
+ // Check if the PR already has a comment from the bot
+
const { data: comments } = await github.rest.issues.listComments({
- owner: context.repo.owner,
- repo: context.repo.repo,
- issue_number: context.issue.number,
+ ...repoArgs,
+ issue_number: pr_number,
});
const body = `GitHub Actions has found some problems running the preflight checks.
@@ -34,22 +50,24 @@ Please make sure to:
(comment) => comment.user?.type === 'Bot' && comment.body?.includes(body)
);
- if (isSuccess) {
- if (!botComment) return;
- await github.rest.issues.deleteComment({
- owner: context.repo.owner,
- repo: context.repo.repo,
- comment_id: botComment.id,
- });
- return;
- }
+ const isSuccess = context.payload.workflow_run.conclusion === 'success';
- if (!botComment) {
- await github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body,
- });
+ if (isSuccess) {
+ // Delete the bot comment if present
+ if (botComment != null) {
+ await github.rest.issues.deleteComment({
+ ...repoArgs,
+ comment_id: botComment.id,
+ });
+ }
+ } else {
+ // Create the comment if missing
+ if (botComment == null) {
+ await github.rest.issues.createComment({
+ ...repoArgs,
+ issue_number: pr_number,
+ body,
+ });
+ }
}
}
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 878e427a..506f1776 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -11,8 +11,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
name: 'Check Code Generation: node-22, ubuntu-latest'
- permissions:
- pull-requests: write
+
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
@@ -52,16 +51,6 @@ jobs:
git diff --cached --name-only --exit-code
continue-on-error: true
- - name: Transpile ts
- run: pnpm tsup-node .github/workflows/commentCodeGeneration.ts --format cjs --clean false --out-dir .github/workflows
-
- - name: Comment
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
- with:
- script: |
- const { script } = require('${{ github.workspace }}/.github/workflows/commentCodeGeneration.cjs')
- await script(github, context, ${{ steps.generate.outcome == 'success' && steps.diff.outcome == 'success' }})
-
- name: Status
if: ${{ steps.generate.outcome == 'failure' || steps.diff.outcome == 'failure' }}
run: exit 1
diff --git a/.github/workflows/preflight-comment.yml b/.github/workflows/preflight-comment.yml
new file mode 100644
index 00000000..b55d41cf
--- /dev/null
+++ b/.github/workflows/preflight-comment.yml
@@ -0,0 +1,45 @@
+name: Preflight Comment
+
+on:
+ workflow_run:
+ workflows: 'PR'
+ types:
+ - completed
+
+permissions:
+ pull-requests: write
+
+jobs:
+ comment-code-generation:
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ name: 'Comment Code Generation'
+ steps:
+ - name: Checkout
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
+ with:
+ ref: 'next'
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
+
+ - name: Set node version to 22
+ uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ with:
+ node-version: 22
+ cache: 'pnpm'
+
+ - name: Install deps
+ run: pnpm install
+ env:
+ CYPRESS_INSTALL_BINARY: 0
+
+ - name: Transpile ts
+ run: pnpm tsup-node .github/workflows/commentCodeGeneration.ts --format cjs --clean false --out-dir .github/workflows
+
+ - name: Comment
+ uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
+ with:
+ script: |
+ const { script } = require('${{ github.workspace }}/.github/workflows/commentCodeGeneration.cjs')
+ await script(github, context)