{"id":21442082,"url":"https://github.com/norskeld/config-conventional","last_synced_at":"2026-06-28T16:31:13.596Z","repository":{"id":57132223,"uuid":"427172445","full_name":"norskeld/config-conventional","owner":"norskeld","description":"Customised and relaxed @commitlint/config-conventional.","archived":false,"fork":false,"pushed_at":"2024-04-16T11:37:45.000Z","size":7,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-21T16:32:07.606Z","etag":null,"topics":["commitlint","commitlint-config"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/norskeld.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-11T23:27:14.000Z","updated_at":"2021-11-15T12:44:33.000Z","dependencies_parsed_at":"2024-06-21T13:05:57.938Z","dependency_job_id":"63f62a7c-8205-45da-ba4a-b79511db3666","html_url":"https://github.com/norskeld/config-conventional","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/norskeld/config-conventional","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norskeld%2Fconfig-conventional","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norskeld%2Fconfig-conventional/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norskeld%2Fconfig-conventional/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norskeld%2Fconfig-conventional/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/norskeld","download_url":"https://codeload.github.com/norskeld/config-conventional/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norskeld%2Fconfig-conventional/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34896652,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["commitlint","commitlint-config"],"created_at":"2024-11-23T01:48:31.855Z","updated_at":"2026-06-28T16:31:13.578Z","avatar_url":"https://github.com/norskeld.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @nrsk/config-conventional\n\n\u003e Customised and relaxed [@commitlint/config-conventional].\n\n## Getting started\n\n```sh\nnpm i -D @commitlint/cli @nrsk/config-conventional\n```\n\n## Rules\n\n\u003e Note: The following rules are considered problems and will yield a non-zero exit code when not met.\n\n### type-enum\n\n- **condition**: `type` is in `value`\n- **rule**: `always`\n- **level**: `error`\n- **value**: `[build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test]`\n\n```sh\necho \"foo: some message\"  # fails\necho \"fix: some message\"  # passes\n```\n\n### type-case\n\n- **condition**: `type` is in case `value`\n- **rule**: `always`\n- **level**: `error`\n- **value**: `'lowerCase'`\n\n```sh\necho \"FIX: some message\"  # fails\necho \"fix: some message\"  # passes\n```\n\n### type-empty\n\n- **condition**: `type` is empty\n- **rule**: `never`\n- **level**: `error`\n\n```sh\necho \": some message\".    # fails\necho \"fix: some message\"  # passes\n```\n\n### scope-case\n\n- **condition**: `scope` is in case `value`\n- **rule**: `always`\n- **level**: `error`\n- **value**: `'lowerCase'`\n\n```sh\necho \"fix(SCOPE): some message\"  # fails\necho \"fix(scope): some message\"  # passes\n```\n\n### subject-case\n\n- **condition**: `subject` is one of `[sentence-case, start-case, pascal-case, upper-case]`\n- **rule**: `never`\n- **level**: `error`\n\n```sh\necho \"fix(SCOPE): Some message\"  # fails\necho \"fix(SCOPE): Some Message\"  # fails\necho \"fix(SCOPE): SomeMessage\"   # fails\necho \"fix(SCOPE): SOMEMESSAGE\"   # fails\necho \"fix(scope): some message\"  # passes\necho \"fix(scope): some Message\"  # passes\n```\n\n### subject-empty\n\n- **condition**: `subject` is empty\n- **rule**: `never`\n- **level**: `error`\n\n```sh\necho \"fix:\"               # fails\necho \"fix: some message\"  # passes\n```\n\n### subject-full-stop\n\n- **condition**: `subject` ends with `value`\n- **rule**: `never`\n- **level**: `error`\n- **value**: `'.'`\n\n```sh\necho \"fix: some message.\"  # fails\necho \"fix: some message\"   # passes\n```\n\n### header-max-length\n\n- **condition**: `header` has `value` or less characters\n- **rule**: `always`\n- **level**: `error`\n- **value**: `100`\n\n```sh\necho \"fix: some message that is way too long...\"  # fails\necho \"fix: some message\"                          # passes\n```\n\n### footer-leading-blank\n\n- **condition**: `footer` should have a leading blank line\n- **rule**: `always`\n- **level**: `warning`\n\n```sh\n# fails\necho \"fix: some message\nBREAKING CHANGE: It will be significant\"\n\n# passes\necho \"fix: some message\n\nBREAKING CHANGE: It will be significant\"\n```\n\n### footer-max-line-length\n\n\u003e `512` characters is actually way more than you would usually need, but in my case\n\u003e smaller value was breaking my semantic-release workflow, because release notes generated\n\u003e by semantic-release were way too long, so my workflow kept failing.\n\n- **condition**: each line in `footer` has `value` or less characters\n- **rule**: `always`\n- **level**: `error`\n- **value**: `512`\n\n```sh\n# fails\necho \"fix: some message\n\nBREAKING CHANGE: footer with multiple lines\nhas a message that is way too long and will break the line rule 'line-max-length' by several characters\"\n\n# passes\necho \"fix: some message\n\nBREAKING CHANGE: footer with multiple lines\nbut still no line is too long\"\n```\n\n### body-leading-blank\n\n- **condition**: `body` should have a leading blank line\n- **rule**: `always`\n- **level**: `warning`\n\n```sh\n# warning\necho \"fix: some message\nbody\"\n\n# passes\necho \"fix: some message\n\nbody\"\n```\n\n### body-max-line-length\n\n- **condition**: `body` each line has `value` or less characters\n- **rule**: `always`\n- **level**: `error`\n- **value**: `512`\n\n```sh\n# fails\necho \"fix: some message\n\nbody with multiple lines\nhas a message that is way too long and will break the line rule 'line-max-length' by several characters\"\n\n# passes\necho \"fix: some message\n\nbody with multiple lines\nbut still no line is too long\"\n```\n\n## License\n\n[Unlicense](LICENSE). Do whatever you want!\n\n[@commitlint/config-conventional]: https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorskeld%2Fconfig-conventional","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnorskeld%2Fconfig-conventional","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorskeld%2Fconfig-conventional/lists"}