doc-only-change.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const args = require('minimist')(process.argv.slice(2));
  2. const { Octokit } = require('@octokit/rest');
  3. const octokit = new Octokit();
  4. async function checkIfDocOnlyChange () {
  5. let { prNumber, prURL } = args;
  6. if (prNumber || prURL) {
  7. try {
  8. // CircleCI doesn't provide the PR number except on forked PRs,
  9. // so to cover all cases we just extract it from the PR URL.
  10. if (!prNumber || isNaN(prNumber)) {
  11. if (args.prURL) {
  12. prNumber = prURL.split('/').pop();
  13. }
  14. }
  15. const filesChanged = await octokit.paginate(octokit.pulls.listFiles.endpoint.merge({
  16. owner: 'electron',
  17. repo: 'electron',
  18. pull_number: prNumber,
  19. per_page: 100
  20. }));
  21. console.log('Changed Files: ', filesChanged.map(fileInfo => fileInfo.filename));
  22. const nonDocChange = filesChanged.length === 0 || filesChanged.find(({ filename }) => {
  23. const fileDirs = filename.split('/');
  24. if (fileDirs[0] !== 'docs') return true;
  25. });
  26. process.exit(nonDocChange ? 1 : 0);
  27. } catch (error) {
  28. console.error('Error getting list of files changed: ', error);
  29. process.exit(-1);
  30. }
  31. } else {
  32. console.error(`Check if only the docs were changed for a commit.
  33. Usage: doc-only-change.js --prNumber=PR_NUMBER || --prURL=PR_URL`);
  34. process.exit(-1);
  35. }
  36. }
  37. checkIfDocOnlyChange();