import type { context as ctx, GitHub } from '@actions/github/lib/utils'; /** * Notifies the PR about uncommitted changes generated by the `generate:*` commands. * * This script is used by github-script * 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. */ export async function script( github: InstanceType, context: typeof ctx ): Promise { 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({ ...repoArgs, issue_number: pr_number, }); const body = `GitHub Actions has found some problems running the preflight checks. Please make sure to: - run \`pnpm run preflight\` locally - fix all issues until the command completes without errors - commit and push the changes `; const botComment = comments.find( (comment) => comment.user?.type === 'Bot' && comment.body?.includes(body) ); const isSuccess = context.payload.workflow_run.conclusion === 'success'; 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, }); } } }