diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml new file mode 100644 index 000000000..2a012f72f --- /dev/null +++ b/.github/workflows/commitlint.yml @@ -0,0 +1,33 @@ +name: Commitlint + +on: + pull_request: + types: [opened, synchronize, reopened, edited] + +jobs: + commitlint: + name: Validate Commit Messages + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + run: yarn install + + - name: Validate PR commits with commitlint + run: npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose + + pr-title: + name: Validate PR Title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 000000000..70bd3dd23 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx --no-install commitlint --edit "$1" diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 000000000..84dcb122a --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], +}; diff --git a/package.json b/package.json index 2c6acb486..fc73445c6 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,12 @@ "deploy:web": "yarn workspace phoenix-ng deploy:web", "lint": "lerna run eslint && lerna run prettier:check", "lint:fix": "lerna run eslint:fix && lerna run prettier:write", - "docs:coverage": "yarn workspace phoenix-event-display docs:coverage" + "docs:coverage": "yarn workspace phoenix-event-display docs:coverage", + "commitlint": "commitlint --edit" }, "devDependencies": { + "@commitlint/cli": "^21.0.2", + "@commitlint/config-conventional": "^21.0.2", "@eslint/compat": "^1.4.1", "@eslint/eslintrc": "^3.3.3", "@eslint/js": "^9.39.1", diff --git a/yarn.lock b/yarn.lock index fae10a912..fe27fe4f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3386,6 +3386,190 @@ __metadata: languageName: node linkType: hard +"@commitlint/cli@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/cli@npm:21.0.2" + dependencies: + "@commitlint/format": ^21.0.1 + "@commitlint/lint": ^21.0.2 + "@commitlint/load": ^21.0.2 + "@commitlint/read": ^21.0.2 + "@commitlint/types": ^21.0.1 + tinyexec: ^1.0.0 + yargs: ^18.0.0 + bin: + commitlint: cli.js + checksum: f75c5fb0539d6bc21ad1d76337591d24c69e144e45a12ed4b8a3c24bdec83c866c3781b1559b762ec5b9db5532708c2965d67134d5c750e9f73a411a8290f075 + languageName: node + linkType: hard + +"@commitlint/config-conventional@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/config-conventional@npm:21.0.2" + dependencies: + "@commitlint/types": ^21.0.1 + conventional-changelog-conventionalcommits: ^9.2.0 + checksum: 56b0e281f4feefd6b919dc62c1076a3f23c5c2e737c04b787e88114d60137ef4c8dfc341f6285e5fe39f99974371ec199a577f34bb696e0f588b639de8f9095f + languageName: node + linkType: hard + +"@commitlint/config-validator@npm:^21.0.1": + version: 21.0.1 + resolution: "@commitlint/config-validator@npm:21.0.1" + dependencies: + "@commitlint/types": ^21.0.1 + ajv: ^8.11.0 + checksum: 28347e5dbe73e1966b7fde96fe7e9aac5b09d2bba78848e00d537f7b5c9a7844536d51381f9fc3fdd0ab080d24d3deaf8a68c6f4cdf34c98cdbf5ecf6ece1505 + languageName: node + linkType: hard + +"@commitlint/ensure@npm:^21.0.1": + version: 21.0.1 + resolution: "@commitlint/ensure@npm:21.0.1" + dependencies: + "@commitlint/types": ^21.0.1 + es-toolkit: ^1.46.0 + checksum: 93996c5bc2bcd82dda83d9f45476111f15ccd60bb794af65e3fdfa7ef5adcbc60d5383f0b13687c7adb04e68097eedcb9fc3c68e28937f6ae4d8ab4f54c66156 + languageName: node + linkType: hard + +"@commitlint/execute-rule@npm:^21.0.1": + version: 21.0.1 + resolution: "@commitlint/execute-rule@npm:21.0.1" + checksum: 95ac27ae4920db0bd6d3c403ba396ab8dec425ddd0f9c033de911f1702f8f6c1a4099cfc3684803120537826a89467e0ec615f577ab65cd7fad2d0fef3accde2 + languageName: node + linkType: hard + +"@commitlint/format@npm:^21.0.1": + version: 21.0.1 + resolution: "@commitlint/format@npm:21.0.1" + dependencies: + "@commitlint/types": ^21.0.1 + picocolors: ^1.1.1 + checksum: dafa8a1bc28fba4911ceef7ddd2e6c2291cc8c57cad8e6836f269ff86edc561d2add667fab3eee6855cf194bc31d26d0122f9d04007f7ed66bc5b4c7c913f037 + languageName: node + linkType: hard + +"@commitlint/is-ignored@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/is-ignored@npm:21.0.2" + dependencies: + "@commitlint/types": ^21.0.1 + semver: ^7.6.0 + checksum: 9ecfa4fe1d7dd73434f678f2e366d33e8d93213d63e5622d59d2216a25f82c1c89216ff747a02aa9f4edf6005ac15a022d3dbf1fd9553a35a67cb0fcb4b00ea4 + languageName: node + linkType: hard + +"@commitlint/lint@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/lint@npm:21.0.2" + dependencies: + "@commitlint/is-ignored": ^21.0.2 + "@commitlint/parse": ^21.0.2 + "@commitlint/rules": ^21.0.2 + "@commitlint/types": ^21.0.1 + checksum: 8bfac73b705e8f165dc7a8ad83b7da657270998a18b6a54e4988dba0f3e57342e41ea6e3462802c992fa2b71946a018a9998bd84a319ad213d78eaeb5d3b1500 + languageName: node + linkType: hard + +"@commitlint/load@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/load@npm:21.0.2" + dependencies: + "@commitlint/config-validator": ^21.0.1 + "@commitlint/execute-rule": ^21.0.1 + "@commitlint/resolve-extends": ^21.0.1 + "@commitlint/types": ^21.0.1 + cosmiconfig: ^9.0.1 + cosmiconfig-typescript-loader: ^6.1.0 + es-toolkit: ^1.46.0 + is-plain-obj: ^4.1.0 + picocolors: ^1.1.1 + checksum: bb5f989eee183ef0d8c8b70916d33b4e6fc7c51e6a2c331db6caebda5baf09266d55a5ad52b64ef3ba9ebced5e7b21fe103ecd5400af49d7589974f4d233244c + languageName: node + linkType: hard + +"@commitlint/message@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/message@npm:21.0.2" + checksum: 316ea1dabbdc51accb9a247cf18d9820c62d9de0b15a93c66bd840a78ff60bdfa118e729e993a93de4a4b8b4b0595ff6aeb0f22ccf0ef303b9d80dbedaa8f02e + languageName: node + linkType: hard + +"@commitlint/parse@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/parse@npm:21.0.2" + dependencies: + "@commitlint/types": ^21.0.1 + conventional-changelog-angular: ^8.2.0 + conventional-commits-parser: ^6.3.0 + checksum: 4394b8da776f11f2bff07435641c71fd8481055d43805430b3f2678cbf4cca2cf52333b4e080e606e791ceff165844da36f48da7346ca5518f96ec18cba93bd2 + languageName: node + linkType: hard + +"@commitlint/read@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/read@npm:21.0.2" + dependencies: + "@commitlint/top-level": ^21.0.2 + "@commitlint/types": ^21.0.1 + git-raw-commits: ^5.0.0 + tinyexec: ^1.0.0 + checksum: 72281a9597cc8bc2d370bf1d53dc0e32e89a9fc288bc2024fb0dec410471b3973b6837c8e5da25a94432b31d45c6dc44f78d73fa9d37b82da940a6de986f6b70 + languageName: node + linkType: hard + +"@commitlint/resolve-extends@npm:^21.0.1": + version: 21.0.1 + resolution: "@commitlint/resolve-extends@npm:21.0.1" + dependencies: + "@commitlint/config-validator": ^21.0.1 + "@commitlint/types": ^21.0.1 + es-toolkit: ^1.46.0 + global-directory: ^5.0.0 + resolve-from: ^5.0.0 + checksum: 6bb9321008421cc75ee7db2dab6698760f878889927dd8379699e6a711c67cf073c9478a9c3d035063f1850e9ce30174b5a6720c5ed923d30080874d1c289571 + languageName: node + linkType: hard + +"@commitlint/rules@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/rules@npm:21.0.2" + dependencies: + "@commitlint/ensure": ^21.0.1 + "@commitlint/message": ^21.0.2 + "@commitlint/to-lines": ^21.0.1 + "@commitlint/types": ^21.0.1 + checksum: f3d9d8fbc8bafd64e8d6d3ec8210e6f404a5e19b30983e95348d20fd7b24fc20d7fda231acacdf8a4d9b1e82b8acbb30151095f022046c3518405c96d4a39f9b + languageName: node + linkType: hard + +"@commitlint/to-lines@npm:^21.0.1": + version: 21.0.1 + resolution: "@commitlint/to-lines@npm:21.0.1" + checksum: 4b4c432e547e687735d853ab23c629c03926311d3b1ae21d289e54d05ba4677123ccc5e382c94d289044d24d3c789e2cf56cf98e3458475524473b887f0a1f2c + languageName: node + linkType: hard + +"@commitlint/top-level@npm:^21.0.2": + version: 21.0.2 + resolution: "@commitlint/top-level@npm:21.0.2" + dependencies: + escalade: ^3.2.0 + checksum: 06725debfecda806bbe300247771daabcd2326e094dd0c4ac2c728ea1ac7703645b8960de68975a295258267bdbb29a1dc48c7b07a9c98759f73bb58f249dd03 + languageName: node + linkType: hard + +"@commitlint/types@npm:^21.0.1": + version: 21.0.1 + resolution: "@commitlint/types@npm:21.0.1" + dependencies: + conventional-commits-parser: ^6.3.0 + picocolors: ^1.1.1 + checksum: b82574ce2bf6455f8857e5df412170c9abd9bea4d0980f939ea5b762901fbb888fb51486a897e16f210d39edaa51c5b581dafd179f4519bc95178603bf4401d8 + languageName: node + linkType: hard + "@compodoc/compodoc@npm:^1.2.1": version: 1.2.1 resolution: "@compodoc/compodoc@npm:1.2.1" @@ -3486,6 +3670,25 @@ __metadata: languageName: node linkType: hard +"@conventional-changelog/git-client@npm:^2.6.0": + version: 2.7.0 + resolution: "@conventional-changelog/git-client@npm:2.7.0" + dependencies: + "@simple-libs/child-process-utils": ^1.0.0 + "@simple-libs/stream-utils": ^1.2.0 + semver: ^7.5.2 + peerDependencies: + conventional-commits-filter: ^5.0.0 + conventional-commits-parser: ^6.4.0 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true + checksum: 557ddc544549286d6a62db660d487eff55b973246b63be188f08b5fe48b08b673a8d50724f59f9012384aa7d7dbaa2c10044052a8253398e70db7e71ff3961d4 + languageName: node + linkType: hard + "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -6720,6 +6923,22 @@ __metadata: languageName: node linkType: hard +"@simple-libs/child-process-utils@npm:^1.0.0": + version: 1.0.2 + resolution: "@simple-libs/child-process-utils@npm:1.0.2" + dependencies: + "@simple-libs/stream-utils": ^1.2.0 + checksum: 87c6db43110cad05dad892e46922b60740ce94742e1ef48190246a5fb4a0302a18a698a5b1b959b89f4d1e53767a310d0c9c9583ba48d2dbe93340fc5e0820f8 + languageName: node + linkType: hard + +"@simple-libs/stream-utils@npm:^1.2.0": + version: 1.2.0 + resolution: "@simple-libs/stream-utils@npm:1.2.0" + checksum: 80a2602f0e96515cab1f4ab054dccd0ee570b0a0b1722189d29fe2625e96a63b83c87486259268101b8b15a77a129aaca22bf480cf111e0910650af0820d26ee + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -7989,6 +8208,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.11.0": + version: 8.20.0 + resolution: "ajv@npm:8.20.0" + dependencies: + fast-deep-equal: ^3.1.3 + fast-uri: ^3.0.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + checksum: 4f18ca5fcccff8c8b9a4d6f1a6a3a70ffc888e787624ca66f2d0162e04e8f9f2d289d8a1acdb9520d18bffcee975e7a789a9f8292b5c2c577c408cd2c3308cad + languageName: node + linkType: hard + "algoliasearch@npm:5.35.0": version: 5.35.0 resolution: "algoliasearch@npm:5.35.0" @@ -9663,6 +9894,24 @@ __metadata: languageName: node linkType: hard +"conventional-changelog-angular@npm:^8.2.0": + version: 8.3.1 + resolution: "conventional-changelog-angular@npm:8.3.1" + dependencies: + compare-func: ^2.0.0 + checksum: 1c40ef7831034debf026652452903f32308f49b1453d5dce1c6501489210207df68659e73dfd0f3a3cbed4532e42667cd19f5ce7d036fb91b681bc85d2f8bbe3 + languageName: node + linkType: hard + +"conventional-changelog-conventionalcommits@npm:^9.2.0": + version: 9.3.1 + resolution: "conventional-changelog-conventionalcommits@npm:9.3.1" + dependencies: + compare-func: ^2.0.0 + checksum: 6b581bf8e1fca7e404333cc04568140825495b652e559cc83dd56e40864a1178a2864001d0354de6b75c575739b9e7f328bb99339472c855c165990952a565b8 + languageName: node + linkType: hard + "conventional-changelog-core@npm:5.0.1": version: 5.0.1 resolution: "conventional-changelog-core@npm:5.0.1" @@ -9730,6 +9979,18 @@ __metadata: languageName: node linkType: hard +"conventional-commits-parser@npm:^6.3.0": + version: 6.4.0 + resolution: "conventional-commits-parser@npm:6.4.0" + dependencies: + "@simple-libs/stream-utils": ^1.2.0 + meow: ^13.0.0 + bin: + conventional-commits-parser: dist/cli/index.js + checksum: c7e1f3075e5af116b1e9cd0e29368c7a4b3d877351d6d211797b7b0c71368b33ef98504b26d66f819697777505c46c3a0f074eb7d2f1d00bae51e532f491911f + languageName: node + linkType: hard + "conventional-recommended-bump@npm:7.0.1": version: 7.0.1 resolution: "conventional-recommended-bump@npm:7.0.1" @@ -9856,6 +10117,19 @@ __metadata: languageName: node linkType: hard +"cosmiconfig-typescript-loader@npm:^6.1.0": + version: 6.3.0 + resolution: "cosmiconfig-typescript-loader@npm:6.3.0" + dependencies: + jiti: 2.6.1 + peerDependencies: + "@types/node": "*" + cosmiconfig: ">=9" + typescript: ">=5" + checksum: b6e038abd57bdd20ff4c05d0ade85f082de1af5f4063f688fc6dab1343a995f01a6ed5597e8158e16478cd2509fbb9b7677a5d8e6d18abe7a4c0f373b6493de2 + languageName: node + linkType: hard + "cosmiconfig@npm:9.0.0, cosmiconfig@npm:^9.0.0": version: 9.0.0 resolution: "cosmiconfig@npm:9.0.0" @@ -9873,6 +10147,23 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^9.0.1": + version: 9.0.2 + resolution: "cosmiconfig@npm:9.0.2" + dependencies: + env-paths: ^2.2.1 + import-fresh: ^3.3.0 + js-yaml: ^4.1.0 + parse-json: ^5.2.0 + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 52238a94de80e870610532402f46aa2e690f86b103255557257afa9651f11182e78b1dac6e38f7eff31f1b323ab029c3af4694fdf7e6d8e51698f5533f19ac94 + languageName: node + linkType: hard + "create-jest@npm:^29.7.0": version: 29.7.0 resolution: "create-jest@npm:29.7.0" @@ -10873,6 +11164,20 @@ __metadata: languageName: node linkType: hard +"es-toolkit@npm:^1.46.0": + version: 1.47.1 + resolution: "es-toolkit@npm:1.47.1" + dependenciesMeta: + "@trivago/prettier-plugin-sort-imports@4.3.0": + unplugged: true + prettier-plugin-sort-re-exports@0.0.1: + unplugged: true + vitepress-plugin-sandpack@1.1.4: + unplugged: true + checksum: 326fa22949ac269ce84fb8ef71dc9072b9c8047ba7c64b71b53c59b92e9a8d10e0af5b05307eb07565584664d2239c418edcda26fa28a5757a6df38c5cd9d895 + languageName: node + linkType: hard + "es6-shim@npm:^0.35.8": version: 0.35.8 resolution: "es6-shim@npm:0.35.8" @@ -12385,6 +12690,18 @@ __metadata: languageName: node linkType: hard +"git-raw-commits@npm:^5.0.0": + version: 5.0.1 + resolution: "git-raw-commits@npm:5.0.1" + dependencies: + "@conventional-changelog/git-client": ^2.6.0 + meow: ^13.0.0 + bin: + git-raw-commits: src/cli.js + checksum: 403bfc10deab0c76082df9b376a76a1486c5f38a2669cb52df86e4d48e9ccb0f8800cecd45009514b2e50a704b592c9e7d7b0f05cc4ecfe9a3af6e4cb23137b7 + languageName: node + linkType: hard + "git-remote-origin-url@npm:^2.0.0": version: 2.0.0 resolution: "git-remote-origin-url@npm:2.0.0" @@ -12549,6 +12866,15 @@ __metadata: languageName: node linkType: hard +"global-directory@npm:^5.0.0": + version: 5.0.0 + resolution: "global-directory@npm:5.0.0" + dependencies: + ini: 6.0.0 + checksum: 90b61b09736a8c6fea010e87bf42cefefe534ce6d5c21c09ab9eb06edc0082dfc41edf0d31da5f7355e9a07eae9c5238d4ecc01ac425d8456cbce9bd1b292dc2 + languageName: node + linkType: hard + "global-dirs@npm:^3.0.0": version: 3.0.1 resolution: "global-dirs@npm:3.0.1" @@ -13197,6 +13523,13 @@ __metadata: languageName: node linkType: hard +"ini@npm:6.0.0, ini@npm:^6.0.0": + version: 6.0.0 + resolution: "ini@npm:6.0.0" + checksum: 82640ea788fac082fdf0a4d901654b0d4a32a62524cb9116206d2d66370fb12468af8bcdec0cafc2ceec71eb095919bf07410ce023e205383d3ae4d6c25b3626 + languageName: node + linkType: hard + "ini@npm:^1.3.2, ini@npm:^1.3.8, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" @@ -13204,13 +13537,6 @@ __metadata: languageName: node linkType: hard -"ini@npm:^6.0.0": - version: 6.0.0 - resolution: "ini@npm:6.0.0" - checksum: 82640ea788fac082fdf0a4d901654b0d4a32a62524cb9116206d2d66370fb12468af8bcdec0cafc2ceec71eb095919bf07410ce023e205383d3ae4d6c25b3626 - languageName: node - linkType: hard - "init-package-json@npm:8.2.2": version: 8.2.2 resolution: "init-package-json@npm:8.2.2" @@ -13500,6 +13826,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce + languageName: node + linkType: hard + "is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -14262,6 +14595,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:2.6.1": + version: 2.6.1 + resolution: "jiti@npm:2.6.1" + bin: + jiti: lib/jiti-cli.mjs + checksum: 9394e29c5e40d1ca8267923160d8d86706173c9ff30c901097883434b0c4866de2c060427b6a9a5843bb3e42fa3a3c8b5b2228531d3dd4f4f10c5c6af355bb86 + languageName: node + linkType: hard + "jiti@npm:^1.20.0": version: 1.21.6 resolution: "jiti@npm:1.21.6" @@ -15499,6 +15841,13 @@ __metadata: languageName: node linkType: hard +"meow@npm:^13.0.0": + version: 13.2.0 + resolution: "meow@npm:13.2.0" + checksum: 79c61dc02ad448ff5c29bbaf1ef42181f1eae9947112c0e23db93e84cbc2708ecda53e54bfc6689f1e55255b2cea26840ec76e57a5773a16ca45f4fe2163ec1c + languageName: node + linkType: hard + "meow@npm:^8.1.2": version: 8.1.2 resolution: "meow@npm:8.1.2" @@ -18719,6 +19068,8 @@ __metadata: version: 0.0.0-use.local resolution: "root@workspace:." dependencies: + "@commitlint/cli": ^21.0.2 + "@commitlint/config-conventional": ^21.0.2 "@eslint/compat": ^1.4.1 "@eslint/eslintrc": ^3.3.3 "@eslint/js": ^9.39.1 @@ -18993,6 +19344,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.2": + version: 7.8.5 + resolution: "semver@npm:7.8.5" + bin: + semver: bin/semver.js + checksum: 0c580f17e88e2b45806dc5cf3d824f719c946999d3554bf30307c2b68b3300ab3c8bfcd84d8f489b93b4cbb5362f5fc8de4d2858954f18d834253c4450fc9f6b + languageName: node + linkType: hard + "send@npm:0.19.0": version: 0.19.0 resolution: "send@npm:0.19.0" @@ -20182,6 +20542,13 @@ __metadata: languageName: node linkType: hard +"tinyexec@npm:^1.0.0": + version: 1.2.4 + resolution: "tinyexec@npm:1.2.4" + checksum: 3004b0f784c17d35a87251059dd6d81685848472a21a8c258f7b6c0433a25e37552f3955b0844f422895711fae24f44a8b1165597b8b0fe3fe8d0a25264fe9d9 + languageName: node + linkType: hard + "tinyglobby@npm:0.2.12": version: 0.2.12 resolution: "tinyglobby@npm:0.2.12"