diff --git a/README.md b/README.md index 8da1a4075..7841f2be8 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,19 @@ Uitslagensoftware gebouwd door Team Urn. -Copyright © 2024 Kiesraad. Licensed under the EUPL-1.2 or later. \ No newline at end of file +Copyright © 2024 Kiesraad. Licensed under the EUPL-1.2 or later. + +## Project structure + +Backend: `backend/` +Frontend: `frontend/` + +See `README.md` in each directory for more information. + +## Git pre-commit hook using Lefthook + +This project uses [Lefthook] to manage the Git pre-commit hook. Lefthook will +be installed automatically when `npm install` is run in the `frontend` +directory. + +[Lefthook]: https://github.com/evilmartians/lefthook diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 12598b1ba..03c9f916e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,6 +36,7 @@ "eslint-plugin-react-refresh": "^0.4.6", "identity-obj-proxy": "^3.0.0", "jsdom": "^24.0.0", + "lefthook": "^1.6.10", "lint-staged": "^15.2.2", "msw": "^2.2.13", "postcss": "^8.4.38", @@ -7615,6 +7616,130 @@ "node": ">=0.10" } }, + "node_modules/lefthook": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-1.6.10.tgz", + "integrity": "sha512-HeVjsDCrHLe9htQHbLuQJu2YdLK6Tl5bh36fOpmXqckEXTI0BDR0Y5JYc7G5Inj4YXQsc51a9dUDZMeniSnSag==", + "dev": true, + "hasInstallScript": true, + "bin": { + "lefthook": "bin/index.js" + }, + "optionalDependencies": { + "lefthook-darwin-arm64": "1.6.10", + "lefthook-darwin-x64": "1.6.10", + "lefthook-freebsd-arm64": "1.6.10", + "lefthook-freebsd-x64": "1.6.10", + "lefthook-linux-arm64": "1.6.10", + "lefthook-linux-x64": "1.6.10", + "lefthook-windows-arm64": "1.6.10", + "lefthook-windows-x64": "1.6.10" + } + }, + "node_modules/lefthook-darwin-arm64": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.6.10.tgz", + "integrity": "sha512-Hh11OkoKG7FEOByS1dcgNV7ETq45VmwBbw0VPTiBznyfOG4k+pi0fIdc1qbmbxvYqNE0r420QR/Q3bimaa4Kxg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/lefthook-darwin-x64": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-1.6.10.tgz", + "integrity": "sha512-FiOB0t5OBcQ8OnG/LSdfUYj736SJdlLjWuOZ4wTlJ7EUrHditieap6VNAxwMmFVyQN0X2ZwKWytwY35y+Hflhw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/lefthook-freebsd-arm64": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.6.10.tgz", + "integrity": "sha512-IxGgS3RrNwk3Kr83o5SQhGxqppQi7fu2t//nsp6ocgnJeStrTtXZJOrel2VohzrFxpzQdJVXBGgUGLXtY8t8qw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/lefthook-freebsd-x64": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.6.10.tgz", + "integrity": "sha512-sFSe+dGLa4iBblWAhAGTP9moarcbFtFAH6aaCeyqSX51O6p9VPdGjqNtcE8aGbGAk4lO6v1ScRjk5ogMSinJwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/lefthook-linux-arm64": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-1.6.10.tgz", + "integrity": "sha512-fXnKiNdRIW+FRvc1keVrvWX5EqIhVFfPjcy+PbsKdxiWRXgjtidi6LPmQ8eosH0DC9PxZ0mpdCMf40FHEZLbQA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/lefthook-linux-x64": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.6.10.tgz", + "integrity": "sha512-bm6l2GOFnmYreZxmHb47QeOiFAItttOOxvCEX1okIRD7JbUC+lGC9evW5GJv/ltjZBoTDYEtQAUa+BpHTGuY2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/lefthook-windows-arm64": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-1.6.10.tgz", + "integrity": "sha512-pFxT8KbOMzGxj6cz4glHYwQSNC7XCuy9RDqIO0AxPlpATsCpapkF4ngDxBT1iFv2VhdeweMa7RXUDsMAGQA4Qw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/lefthook-windows-x64": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-1.6.10.tgz", + "integrity": "sha512-fcDnUSTv95AdLvm0NIrn3jBWXuRq8SlbDDjkkB5OHLiSmjz4eOr6wyD7xceDp33zZgZmWFzHebJngxxcIaUuHw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 7ec9514ca..85c74c43f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -49,6 +49,7 @@ "eslint-plugin-react-refresh": "^0.4.6", "identity-obj-proxy": "^3.0.0", "jsdom": "^24.0.0", + "lefthook": "^1.6.10", "lint-staged": "^15.2.2", "msw": "^2.2.13", "postcss": "^8.4.38", diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 000000000..6ae0dbe53 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,18 @@ +assert_lefthook_installed: true + +pre-commit: + parallel: true + commands: + backend-formatter: + root: "backend/" + glob: "*.rs" + run: cargo fmt + backend-linter: + root: "backend/" + glob: "*.rs" + run: cargo clippy --fix + stage_fixed: true + frontend-linter: + root: "frontend/" + glob: "*.{ts,tsx}" + run: npm run lint