diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 3240de9..bd0742f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -21,6 +21,8 @@ jobs: - uses: oven-sh/setup-bun@v2 with: { bun-version: "1.3.14" } - run: bun install --frozen-lockfile + - run: bun run lint + - run: bun run fmt:check - run: bun run typecheck - run: bun run test - name: Cache GTFS feed # fallback so a data.pid.cz outage can't block a deploy diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml index 2ca801a..a7882e0 100644 --- a/.github/workflows/pr-preview.yml +++ b/.github/workflows/pr-preview.yml @@ -24,6 +24,8 @@ jobs: - uses: oven-sh/setup-bun@v2 with: { bun-version: "1.3.14" } - run: bun install --frozen-lockfile + - run: bun run lint + - run: bun run fmt:check - run: bun run typecheck - run: bun run test - name: Cache GTFS feed # fallback so a data.pid.cz outage can't block a preview diff --git a/bun.lock b/bun.lock index 22d1c61..b2e0480 100644 --- a/bun.lock +++ b/bun.lock @@ -19,6 +19,7 @@ "@types/bun": "^1.3.14", "@types/node": "^24.0.0", "@types/ws": "^8.5.0", + "lefthook": "^2.1.9", "oxfmt": "^0.55.0", "oxlint": "^1.70.0", "typescript": "^6.0.3", @@ -1186,6 +1187,28 @@ "kubernetes-types": ["kubernetes-types@1.30.0", "", {}, "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q=="], + "lefthook": ["lefthook@2.1.9", "", { "optionalDependencies": { "lefthook-darwin-arm64": "2.1.9", "lefthook-darwin-x64": "2.1.9", "lefthook-freebsd-arm64": "2.1.9", "lefthook-freebsd-x64": "2.1.9", "lefthook-linux-arm64": "2.1.9", "lefthook-linux-x64": "2.1.9", "lefthook-openbsd-arm64": "2.1.9", "lefthook-openbsd-x64": "2.1.9", "lefthook-windows-arm64": "2.1.9", "lefthook-windows-x64": "2.1.9" }, "bin": { "lefthook": "bin/index.js" } }, "sha512-bwDaIOViTktE8kJLf9jP0p+H2/RDTlFFlc43Am2YgUsX22hI6Sq4RbzsrecwzY5y+MHTipOH7WsmWSEniePHWQ=="], + + "lefthook-darwin-arm64": ["lefthook-darwin-arm64@2.1.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-119HryNcvr4nqn0wUIrNPgpMEPn9yMQzEcW/lezRsnb56PCJriJB92+MCySPVcWDxJnZef7o0T3jdnPNiSH7Qg=="], + + "lefthook-darwin-x64": ["lefthook-darwin-x64@2.1.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-dwo5Tke2XcQCM56DGHgFKBfRbJIL6xs2wZ0zG1TUVZgl4t4mQUt6LiZ4V/ZQfYHTZF9qywvXoIlR5N35qOaiVQ=="], + + "lefthook-freebsd-arm64": ["lefthook-freebsd-arm64@2.1.9", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-+09PVap6nl6xsaHch5JLtq7WvIR++U1Q2MzA2ai0M4uB/VP3AqrvKqHw6+9hjyKnIH+HHL83uqi77EAY+LaxLA=="], + + "lefthook-freebsd-x64": ["lefthook-freebsd-x64@2.1.9", "", { "os": "freebsd", "cpu": "x64" }, "sha512-8XresjKIYpkE9ARgCtBEZgJZxAU3T4MIqzj4zNy15XRT59I1Us+QdqXTNm+pkZ41Yd2X/nxs2Pkvbq3NWWlIGw=="], + + "lefthook-linux-arm64": ["lefthook-linux-arm64@2.1.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-1oNIQfwrPe6rgU2KcDM3aF6+hpZDCKx1TmawQKpXUY5gVsbZ7MqX0Sk/1lnnWxqPm+kQQ5f6J2dpFWd+4xH8jg=="], + + "lefthook-linux-x64": ["lefthook-linux-x64@2.1.9", "", { "os": "linux", "cpu": "x64" }, "sha512-fT+7Q+BJyGp+CslFQkNXmdFRgyVXsPHPi9NAsDX0a6QOyNnoORByAsvx6zeAKuF5rL3BBgNfho1/v2RuGxGy9w=="], + + "lefthook-openbsd-arm64": ["lefthook-openbsd-arm64@2.1.9", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-4bVuafBk3dddVNo0+3hMbjcJs4mqYAstxpPMmX2ufkudSTYFNIhWoqwuGVQV/SS/xdcOKJAldW4qayAzed2ysw=="], + + "lefthook-openbsd-x64": ["lefthook-openbsd-x64@2.1.9", "", { "os": "openbsd", "cpu": "x64" }, "sha512-PmPoMmLP/wQQWcQ9u2YH86bTZ3UCfBsxuEmVTEyPU2U8R1qSTp5r/Gs3G8cN5Mxo91XB9oBERtF1n+xD3W6aVA=="], + + "lefthook-windows-arm64": ["lefthook-windows-arm64@2.1.9", "", { "os": "win32", "cpu": "arm64" }, "sha512-KphfkBKmwBnmolyrdhIl3lrBaOyTcCgXBT2AB/9OHnEXhOLvv5uTCUkrD4YRAxXPtFKq6UvnapIeoL3GZq0bdA=="], + + "lefthook-windows-x64": ["lefthook-windows-x64@2.1.9", "", { "os": "win32", "cpu": "x64" }, "sha512-2qlUtkJHZ3MyUxgV5XTEmcrIoNZA07iwaquoswAcqv/1MeBFXlD+O+koFRfrzWng2O5WYEbpJnd8tvaYnV8fTA=="], + "leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], "libsodium": ["libsodium@0.8.4", "", {}, "sha512-lMcYaRi0zcs7tarATsQUYC7rstliIXZuoq0c6zXSgNtSNtdvBgkSegjWhpMJAXzKX3SUSwIp7+zEsob+j3LuRw=="], diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 0000000..6604f60 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,10 @@ +# Git hooks managed by Lefthook (https://lefthook.dev). +# Installed automatically on `bun install` via the `prepare` script. +# Mirrors the CI static checks; bypass a run with `git commit --no-verify`. +pre-commit: + parallel: true + jobs: + - name: lint + run: bun run lint + - name: format + run: bun run fmt:check diff --git a/package.json b/package.json index f5e4e54..35c4e19 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "dev": "alchemy dev", "deploy": "alchemy deploy", "destroy": "alchemy destroy", - "prepare": "effect-language-service patch" + "prepare": "effect-language-service patch && (lefthook install || true)" }, "dependencies": { "@app/contract": "workspace:*", @@ -34,6 +34,7 @@ "@types/bun": "^1.3.14", "@types/node": "^24.0.0", "@types/ws": "^8.5.0", + "lefthook": "^2.1.9", "oxfmt": "^0.55.0", "oxlint": "^1.70.0", "typescript": "^6.0.3",