aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsunadoi <[email protected]>2022-10-10 05:11:25 +0900
committerGitHub <[email protected]>2022-10-09 22:11:25 +0200
commitf934792db4c3c1b44550b79cee893aa545164c59 (patch)
treecf4b32e8a1574d79cf005b781f0181e6fbfd5dd9
parent13dac4f4c6879933ceba045e1235161ed3c6b4f2 (diff)
downloadfaker-f934792db4c3c1b44550b79cee893aa545164c59.tar.xz
faker-f934792db4c3c1b44550b79cee893aa545164c59.zip
infra: add CI step to detect generate script diffs (#1405)
-rw-r--r--.github/workflows/ci.yml53
-rw-r--r--.github/workflows/commentCodeGeneration.ts48
-rw-r--r--.gitignore3
-rw-r--r--package.json1
-rw-r--r--pnpm-lock.yaml151
5 files changed, 256 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,
+ });
+ }
+};
diff --git a/.gitignore b/.gitignore
index dba79bf0..79a3e2df 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,6 +61,9 @@ node_modules/
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
+# Transpiled JS script files for GitHub Actions
+.github/workflows/*.js
+
# IDE
/.idea
/nbproject
diff --git a/package.json b/package.json
index 10543e25..bf8ac932 100644
--- a/package.json
+++ b/package.json
@@ -93,6 +93,7 @@
]
},
"devDependencies": {
+ "@actions/github": "~5.1.1",
"@algolia/client-search": "~4.14.2",
"@types/glob": "~8.0.0",
"@types/markdown-it": "~12.2.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 62dea50e..5a9cbb0d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,6 +1,7 @@
lockfileVersion: 5.4
specifiers:
+ '@actions/github': ~5.1.1
'@algolia/client-search': ~4.14.2
'@types/glob': ~8.0.0
'@types/markdown-it': ~12.2.3
@@ -46,6 +47,7 @@ specifiers:
vitest: ~0.23.4
devDependencies:
+ '@actions/github': 5.1.1
'@algolia/client-search': 4.14.2
'@types/glob': 8.0.0
'@types/markdown-it': 12.2.3
@@ -92,6 +94,23 @@ devDependencies:
packages:
+ /@actions/github/5.1.1:
+ resolution: {integrity: sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==}
+ dependencies:
+ '@actions/http-client': 2.0.1
+ '@octokit/core': 3.6.0
+ '@octokit/plugin-paginate-rest': 2.21.3_@[email protected]
+ '@octokit/plugin-rest-endpoint-methods': 5.16.2_@[email protected]
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+
+ /@actions/http-client/2.0.1:
+ resolution: {integrity: sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==}
+ dependencies:
+ tunnel: 0.0.6
+ dev: true
+
/@algolia/autocomplete-core/1.7.1:
resolution: {integrity: sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==}
dependencies:
@@ -467,6 +486,94 @@ packages:
fastq: 1.13.0
dev: true
+ /@octokit/auth-token/2.5.0:
+ resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==}
+ dependencies:
+ '@octokit/types': 6.41.0
+ dev: true
+
+ /@octokit/core/3.6.0:
+ resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==}
+ dependencies:
+ '@octokit/auth-token': 2.5.0
+ '@octokit/graphql': 4.8.0
+ '@octokit/request': 5.6.3
+ '@octokit/request-error': 2.1.0
+ '@octokit/types': 6.41.0
+ before-after-hook: 2.2.3
+ universal-user-agent: 6.0.0
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+
+ /@octokit/endpoint/6.0.12:
+ resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==}
+ dependencies:
+ '@octokit/types': 6.41.0
+ is-plain-object: 5.0.0
+ universal-user-agent: 6.0.0
+ dev: true
+
+ /@octokit/graphql/4.8.0:
+ resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==}
+ dependencies:
+ '@octokit/request': 5.6.3
+ '@octokit/types': 6.41.0
+ universal-user-agent: 6.0.0
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+
+ /@octokit/openapi-types/12.11.0:
+ resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==}
+ dev: true
+
+ /@octokit/plugin-paginate-rest/2.21.3_@[email protected]:
+ resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==}
+ peerDependencies:
+ '@octokit/core': '>=2'
+ dependencies:
+ '@octokit/core': 3.6.0
+ '@octokit/types': 6.41.0
+ dev: true
+
+ /@octokit/plugin-rest-endpoint-methods/5.16.2_@[email protected]:
+ resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==}
+ peerDependencies:
+ '@octokit/core': '>=3'
+ dependencies:
+ '@octokit/core': 3.6.0
+ '@octokit/types': 6.41.0
+ deprecation: 2.3.1
+ dev: true
+
+ /@octokit/request-error/2.1.0:
+ resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==}
+ dependencies:
+ '@octokit/types': 6.41.0
+ deprecation: 2.3.1
+ once: 1.4.0
+ dev: true
+
+ /@octokit/request/5.6.3:
+ resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==}
+ dependencies:
+ '@octokit/endpoint': 6.0.12
+ '@octokit/request-error': 2.1.0
+ '@octokit/types': 6.41.0
+ is-plain-object: 5.0.0
+ node-fetch: 2.6.7
+ universal-user-agent: 6.0.0
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+
+ /@octokit/types/6.41.0:
+ resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==}
+ dependencies:
+ '@octokit/openapi-types': 12.11.0
+ dev: true
+
/@polka/url/1.0.0-next.21:
resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
dev: true
@@ -1044,6 +1151,10 @@ packages:
tweetnacl: 0.14.5
dev: true
+ /before-after-hook/2.2.3:
+ resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
+ dev: true
+
/blob-util/2.0.2:
resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
dev: true
@@ -1674,6 +1785,10 @@ packages:
engines: {node: '>=0.4.0'}
dev: true
+ /deprecation/2.3.1:
+ resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
+ dev: true
+
/detect-indent/6.1.0:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
@@ -3420,6 +3535,18 @@ packages:
resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
dev: true
+ /node-fetch/2.6.7:
+ resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+ dependencies:
+ whatwg-url: 5.0.0
+ dev: true
+
/normalize-package-data/2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
@@ -4439,6 +4566,10 @@ packages:
punycode: 2.1.1
dev: true
+ /tr46/0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ dev: true
+
/trim-newlines/3.0.1:
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
engines: {node: '>=8'}
@@ -4479,6 +4610,11 @@ packages:
safe-buffer: 5.2.1
dev: true
+ /tunnel/0.0.6:
+ resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
+ engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
+ dev: true
+
/tweetnacl/0.14.5:
resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
dev: true
@@ -4569,6 +4705,10 @@ packages:
which-boxed-primitive: 1.0.2
dev: true
+ /universal-user-agent/6.0.0:
+ resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==}
+ dev: true
+
/universalify/2.0.0:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
@@ -4757,6 +4897,17 @@ packages:
'@vue/shared': 3.2.40
dev: true
+ /webidl-conversions/3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ dev: true
+
+ /whatwg-url/5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+ dev: true
+
/which-boxed-primitive/1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
dependencies: