From 9c5b1b126a632dcb5778e2a64042901489623046 Mon Sep 17 00:00:00 2001 From: Eli <88557639+lishaduck@users.noreply.github.com> Date: Sat, 1 Aug 2026 14:22:38 -0500 Subject: [PATCH] chore: migrate to nano-staged and remove husky Amp-Thread-ID: https://ampcode.com/threads/T-019fedc6-c6f8-72d8-957a-c50d71886127 --- .gitconfig | 3 +++ .husky/.gitignore | 1 - .husky/pre-commit | 1 - .prettierignore | 1 - knip.ts | 3 +++ lint-staged.config.ts | 4 --- nano-staged.json | 4 +++ package.json | 5 ++-- pnpm-lock.yaml | 49 +++++++++-------------------------- pnpm-workspace.yaml | 3 +-- scripts/use-tracked-config.ts | 14 ++++++++++ 11 files changed, 39 insertions(+), 49 deletions(-) create mode 100644 .gitconfig delete mode 100644 .husky/.gitignore delete mode 100755 .husky/pre-commit delete mode 100644 lint-staged.config.ts create mode 100644 nano-staged.json create mode 100644 scripts/use-tracked-config.ts diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 0000000000..2512bed7db --- /dev/null +++ b/.gitconfig @@ -0,0 +1,3 @@ +[hook "nano-staged"] +event = pre-commit +command = pnpm exec nano-staged diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec138..0000000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index c27d8893a9..0000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -lint-staged diff --git a/.prettierignore b/.prettierignore index c3512dec9b..144bb86993 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,3 @@ -/.husky packages/*/.astro packages/*/dist packages/*/lib diff --git a/knip.ts b/knip.ts index a55bb3d8ac..cd7ff50340 100644 --- a/knip.ts +++ b/knip.ts @@ -10,6 +10,9 @@ export default { ignoreDependencies: [ // The changesets CLI isn't directly referenced anywhere, but we need it to create new changesets. "@changesets/cli", + + // Invoked by the Git hook configured in .gitconfig. + "nano-staged", ], project: ["*.config.{js,ts}", "scripts/**/*.ts"], }, diff --git a/lint-staged.config.ts b/lint-staged.config.ts deleted file mode 100644 index 07603a5a55..0000000000 --- a/lint-staged.config.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default { - "*": "prettier --ignore-unknown --write", - ".changeset/*.md": "node scripts/validate-changesets.ts", -}; diff --git a/nano-staged.json b/nano-staged.json new file mode 100644 index 0000000000..bec02ff0ce --- /dev/null +++ b/nano-staged.json @@ -0,0 +1,4 @@ +{ + "*": "prettier --ignore-unknown --write", + ".changeset/*.md": "node scripts/validate-changesets.ts" +} diff --git a/package.json b/package.json index d26ac1ce01..dcdb30e8bd 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "lint": "eslint . --max-warnings 0", "lint:knip": "knip", "lint:knip:prod": "knip --strict", - "prepare": "husky", + "prepare": "node scripts/use-tracked-config.ts", "release": "pnpm build && pnpm -r publish", "start:site": "pnpm --filter=site prebuild && pnpm --filter=site start", "test": "vitest" @@ -55,10 +55,9 @@ "eslint-plugin-regexp": "catalog:dev", "eslint-plugin-yml": "catalog:dev", "flint": "workspace:^", - "husky": "catalog:dev", "jiti": "catalog:dev", "knip": "catalog:dev", - "lint-staged": "catalog:dev", + "nano-staged": "catalog:dev", "prettier": "catalog:dev", "prettier-plugin-astro": "catalog:dev", "prettier-plugin-curly": "catalog:dev", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0146778734..9be5f74d63 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -275,18 +275,15 @@ catalogs: execa: specifier: 9.6.1 version: 9.6.1 - husky: - specifier: 9.1.7 - version: 9.1.7 jiti: specifier: 2.7.0 version: 2.7.0 knip: specifier: 6.32.0 version: 6.32.0 - lint-staged: - specifier: 17.3.0 - version: 17.3.0 + nano-staged: + specifier: 1.0.2 + version: 1.0.2 prettier: specifier: 3.8.1 version: 3.8.1 @@ -495,18 +492,15 @@ importers: flint: specifier: workspace:^ version: link:packages/flint - husky: - specifier: catalog:dev - version: 9.1.7 jiti: specifier: catalog:dev version: 2.7.0 knip: specifier: catalog:dev version: 6.32.0 - lint-staged: + nano-staged: specifier: catalog:dev - version: 17.3.0 + version: 1.0.2 prettier: specifier: catalog:dev version: 3.8.1 @@ -5515,11 +5509,6 @@ packages: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - i18next@26.3.1: resolution: {integrity: sha512-txQqd5EULsqEh9OJqRH15aCaOuy/nLJyhw5EHCSKLKJE1aBbb3Zve2+uQIxgWhPm1QqUQoWyQBm2kfmmIrzkcQ==} peerDependencies: @@ -5962,11 +5951,6 @@ packages: linkify-it@5.0.2: resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} - lint-staged@17.3.0: - resolution: {integrity: sha512-woZS3vNe3UKqBaLPvbLOtKRY4tLANpWQhom12MGWqC8Mh1lCOO+WgSwmX2amjJAqTY9BkXYW87fCUH5H9Ph6xw==} - engines: {node: '>=22.22.1'} - hasBin: true - locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} @@ -6255,6 +6239,11 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + nano-staged@1.0.2: + resolution: {integrity: sha512-Fytar3zHLY99nlMfqPPbraxZodqQAHPpdPRyYaplL+lB9DCR6pUrafxbG+Btz4+7fO5Rm/+DO4ZeDO/nLSUMhw==} + engines: {node: ^22 || >= 24} + hasBin: true + nanoid@3.3.15: resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -7098,10 +7087,6 @@ packages: stream-replace-string@2.0.0: resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} @@ -12000,8 +11985,6 @@ snapshots: human-signals@8.0.1: {} - husky@9.1.7: {} - i18next@26.3.1(typescript@6.0.3): optionalDependencies: typescript: 6.0.3 @@ -12387,14 +12370,6 @@ snapshots: dependencies: uc.micro: 2.1.0 - lint-staged@17.3.0: - dependencies: - picomatch: 4.0.5 - string-argv: 0.3.2 - tinyexec: 1.2.4 - optionalDependencies: - yaml: 2.9.0 - locate-character@3.0.0: {} locate-path@5.0.0: @@ -13004,6 +12979,8 @@ snapshots: muggle-string@0.4.1: {} + nano-staged@1.0.2: {} + nanoid@3.3.15: {} natural-compare@1.4.0: {} @@ -14064,8 +14041,6 @@ snapshots: stream-replace-string@2.0.0: {} - string-argv@0.3.2: {} - string-width@7.2.0: dependencies: emoji-regex: 10.6.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e8c67d07c9..3bf274499b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -32,10 +32,9 @@ catalogs: eslint-plugin-regexp: 3.1.0 eslint-plugin-yml: 3.4.0 execa: 9.6.1 - husky: 9.1.7 jiti: 2.7.0 knip: 6.32.0 - lint-staged: 17.3.0 + nano-staged: 1.0.2 prettier: 3.8.1 prettier-plugin-astro: 0.14.1 prettier-plugin-curly: 0.4.1 diff --git a/scripts/use-tracked-config.ts b/scripts/use-tracked-config.ts new file mode 100644 index 0000000000..6d5754deab --- /dev/null +++ b/scripts/use-tracked-config.ts @@ -0,0 +1,14 @@ +import { execFile } from "node:child_process"; +import path from "node:path"; +import { promisify } from "node:util"; + +const execFileAsync = promisify(execFile); + +await execFileAsync("git", [ + "-C", + path.resolve(import.meta.dirname, ".."), + "config", + "--local", + "include.path", + "../.gitconfig", +]);