diff options
| author | sunadoi <[email protected]> | 2022-10-10 05:11:25 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-10-09 22:11:25 +0200 |
| commit | f934792db4c3c1b44550b79cee893aa545164c59 (patch) | |
| tree | cf4b32e8a1574d79cf005b781f0181e6fbfd5dd9 /.github | |
| parent | 13dac4f4c6879933ceba045e1235161ed3c6b4f2 (diff) | |
| download | faker-f934792db4c3c1b44550b79cee893aa545164c59.tar.xz faker-f934792db4c3c1b44550b79cee893aa545164c59.zip | |
infra: add CI step to detect generate script diffs (#1405)
Diffstat (limited to '.github')
| -rw-r--r-- | .github/workflows/ci.yml | 53 | ||||
| -rw-r--r-- | .github/workflows/commentCodeGeneration.ts | 48 |
2 files changed, 101 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a05df2ec..61750b54 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -203,3 +203,56 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true + + check-code-generation: + runs-on: ubuntu-latest + name: 'Check Code Generation: node-18, ubuntu-latest' + permissions: + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install pnpm + uses: pnpm/[email protected] + with: + version: 7 + + - name: Set node version to 18 + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'pnpm' + + - name: Install deps + run: pnpm install + env: + CYPRESS_INSTALL_BINARY: 0 + + - name: Generate code + run: | + pnpm run generate:locales + pnpm run generate:api-docs + + - name: Check diff + id: diff + run: | + git add . + git diff --cached --exit-code + continue-on-error: true + + - name: Transpile ts + run: pnpm exec tsc .github/workflows/commentCodeGeneration.ts --outDir .github/workflows + + - name: Comment + uses: actions/github-script@v6 + with: + script: | + const script = require('${{ github.workspace }}/.github/workflows/commentCodeGeneration.js') + await script(github, context, ${{ steps.diff.outcome == 'success' }}) + + - name: Status + if: ${{ steps.diff.outcome == 'failure' }} + run: exit 1 diff --git a/.github/workflows/commentCodeGeneration.ts b/.github/workflows/commentCodeGeneration.ts new file mode 100644 index 00000000..715854cd --- /dev/null +++ b/.github/workflows/commentCodeGeneration.ts @@ -0,0 +1,48 @@ +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 + * @param isSuccess A boolean indicating whether the workflow was successful + */ +module.exports = async ( + github: InstanceType<typeof GitHub>, + context: typeof ctx, + isSuccess: boolean +) => { + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + + const body = `Uncommitted changes were detected after runnning <code>generate:*</code> commands.\nPlease run <code>pnpm run generate:locales</code> and <code>pnpm run generate:api-docs</code> to generate/update the related files, and commit them.`; + + const botComment = comments.find( + (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; + } + + if (!botComment) { + await github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body, + }); + } +}; |
