123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import { execSync } from 'child_process'
- import fg from 'fast-glob'
- const getPackages = (packagePath) =>
- fg.sync('*', { cwd: packagePath, onlyDirectories: true })
- const scopes = [
- ...getPackages('packages'),
- ...getPackages('internal'),
- 'docs',
- 'play',
- 'project',
- 'core',
- 'style',
- 'ci',
- 'dev',
- 'deploy',
- 'other',
- 'typography',
- 'color',
- 'border',
- 'var',
- 'ssr',
- ]
- const gitStatus = execSync('git status --porcelain || true')
- .toString()
- .trim()
- .split('\n')
- const scopeComplete = gitStatus
- .find((r) => ~r.indexOf('M packages'))
- ?.replace(/\//g, '%%')
- ?.match(/packages%%((\w|-)*)/)?.[1]
- const subjectComplete = gitStatus
- .find((r) => ~r.indexOf('M packages/components'))
- ?.replace(/\//g, '%%')
- ?.match(/packages%%components%%((\w|-)*)/)?.[1]
- export default {
- rules: {
- /**
- * type[scope]: [function] description
- * ^^^^^
- */
- 'scope-enum': [2, 'always', scopes],
- /**
- * type[scope]: [function] description
- *
- * ^^^^^^^^^^^^^^ empty line.
- * - Something here
- */
- 'body-leading-blank': [1, 'always'],
- /**
- * type[scope]: [function] description
- *
- * - something here
- *
- * ^^^^^^^^^^^^^^
- */
- 'footer-leading-blank': [1, 'always'],
- /**
- * type[scope]: [function] description [No more than 72 characters]
- * ^^^^^
- */
- 'header-max-length': [2, 'always', 72],
- 'scope-case': [2, 'always', 'lower-case'],
- 'subject-case': [
- 1,
- 'never',
- ['sentence-case', 'start-case', 'pascal-case', 'upper-case'],
- ],
- 'subject-empty': [2, 'never'],
- 'subject-full-stop': [2, 'never', '.'],
- 'type-case': [2, 'always', 'lower-case'],
- 'type-empty': [2, 'never'],
- /**
- * type[scope]: [function] description
- * ^^^^
- */
- 'type-enum': [
- 2,
- 'always',
- [
- 'build',
- 'chore',
- 'ci',
- 'docs',
- 'feat',
- 'fix',
- 'perf',
- 'refactor',
- 'revert',
- 'release',
- 'style',
- 'test',
- 'improvement',
- ],
- ],
- },
- prompt: {
- defaultScope: scopeComplete,
- customScopesAlign: !scopeComplete ? 'top' : 'bottom',
- defaultSubject: subjectComplete && `[${subjectComplete}] `,
- allowCustomIssuePrefixs: false,
- allowEmptyIssuePrefixs: false,
- },
- }
|