Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v9.1.0 #1467

Merged
merged 5 commits into from
Jul 17, 2024
Merged

v9.1.0 #1467

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ jobs:
test:
strategy:
matrix:
node-version: [18, 20]
node-version: [18, 20, 22]
os: [ubuntu-latest, macOS-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm --version
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/npm_publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: 20
- run: ./test.sh
Expand All @@ -27,7 +27,7 @@ jobs:
id-token: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: 20
registry-url: 'https://registry.npmjs.org'
Expand Down
6 changes: 3 additions & 3 deletions bin.mjs → bin.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env node
import f, { writeFileSync as w } from 'fs'
import i from './index.mjs'
import i from './index.js'

let p, a, n, s, o, d

Expand All @@ -15,11 +15,11 @@ if (a == 'init') {
w(n, JSON.stringify(o, 0, /\t/.test(s) ? '\t' : 2) + '\n')
p.stdout.write(i())
try { f.mkdirSync('.husky') } catch {}
w('.husky/pre-commit', p.env.npm_config_user_agent.split('/')[0] + ' test\n')
w('.husky/pre-commit', p.env.npm_config_user_agent?.split('/')[0] ?? 'npm' + ' test\n')
p.exit()
}

d = c => console.error(`${c} command is deprecated`)
d = c => console.error(`${c} command is DEPRECATED`)
if (['add', 'set', 'uninstall'].includes(a)) { d(a); p.exit(1) }
if (a == 'install') d(a)

Expand Down
19 changes: 6 additions & 13 deletions docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ export default defineConfig({
// outline: [2, 3],
socialLinks: [
{ icon: 'github', link: 'https://github.com/typicode/husky' },
{ icon: 'twitter', link: 'https://x.com/typicode' }
],
carbonAds: {
code: 'CWYDP53L',
placement: 'typicodegithubio',
},
// carbonAds: {
// code: 'CWYDP53L',
// placement: 'typicodegithubio',
// },
sidebar: [
{ text: 'Introduction', link: '/' },
{ text: 'Get Started', link: '/get-started' },
Expand All @@ -25,15 +26,7 @@ export default defineConfig({
{ text: 'Migrate from v4', link: '/migrate-from-v4' },
],
nav: [
{
text: 'v9.0.1',
items: [
{
text: 'Changelog',
link: 'https://github.com/typicode/husky/releases/tag/v9.0.1'
}
]
}
{ text: 'Sponsor', link: 'https://github.com/sponsors/typicode' }
]
},
locales: {
Expand Down
19 changes: 18 additions & 1 deletion docs/get-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,22 @@ git commit -m "Keep calm and commit"
# test script will run every time you commit
```

_For manual setup and more information, see the [How To](how-to) section._
## A few words...

### Scripting

While most of the time, you'll just run a few `npm run` or `npx` commands in your hooks, you can also script them using POSIX shell for custom workflows.

For example, here's how you can lint your staged files on each commit with only two lines of shell code and no external dependency:

```shell
# .husky/pre-commit
prettier $(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g') --write --ignore-unknown
git update-index --again
```

_This is a basic but workinkg example, check [lint-staged](https://github.com/lint-staged/lint-staged) if you need more._

### Disabling hooks

Husky doesn't force Git hooks. It can be globally disabled (`HUSKY=0`) or be opt-in if wanted. See the [How To](how-to) section for manual setup and more information.
3 changes: 2 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ And more:
- Adheres to Git's native hook organization
- Aligns with [npm](https://docs.npmjs.com/cli/v10/using-npm/scripts#best-practices) best practices using `prepare` script
- Opt-in/opt-out options
- Can be globally disabled
- User-friendly error messages

## Sponsors
Expand Down Expand Up @@ -60,7 +61,7 @@ Support this project by becoming a sponsor [here](https://github.com/sponsors/ty

## Used by

Husky is used in [**over 1.3M projects**](https://github.com/typicode/husky/network/dependents?package_id=UGFja2FnZS0xODQzNTgwNg%3D%3D) on GitHub, including:
Husky is used in [**over 1.5M projects**](https://github.com/typicode/husky/network/dependents?package_id=UGFja2FnZS0xODQzNTgwNg%3D%3D) on GitHub, including:

- [vercel/next.js](https://github.com/vercel/next.js)
- [vercel/hyper](https://github.com/vercel/hyper)
Expand Down
13 changes: 3 additions & 10 deletions docs/migrate-from-v4.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,7 @@ If you were calling locally installed binaries, **you need to run them via your
```

```shell [.husky/pre-commit (v9)]
# ...
npx --no jest
# or
yarn jest
jest
```

:::
Expand All @@ -56,10 +53,7 @@ yarn jest
```

```shell [.husky/commit-msg (v9)]
# ...
npx --no -- commitlint --edit $1
# or
yarn commitlint --edit $1
commitlint --edit $1
```

:::
Expand All @@ -68,5 +62,4 @@ Other environment variables changes:

- `HUSKY_SKIP_HOOKS` is replaced by `HUSKY`.
- `HUSKY_SKIP_INSTALL` is replaced by `HUSKY`.
- `HUSKY_GIT_PARAMS` is removed. Instead Git parameters should be used directly in scripts (e.g. `$1`).
- `PATH` for locally installed tools is not automatically set anymore. You'll need to use your package manager to run them.
- `HUSKY_GIT_PARAMS` is removed. Instead Git parameters should be used directly in scripts (e.g. `$1`).
462 changes: 250 additions & 212 deletions docs/sponsorkit/sponsors.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 19 additions & 12 deletions husky
Original file line number Diff line number Diff line change
@@ -1,20 +1,27 @@
#!/usr/bin/env sh
# shellcheck disable=SC1090
[ "$HUSKY" = "2" ] && set -x
h="${0##*/}"
s="${0%/*/*}/$h"
n=$(basename "$0")
s=$(dirname "$(dirname "$0")")/$n

[ ! -f "$s" ] && exit 0

for f in "${XDG_CONFIG_HOME:-$HOME/.config}/husky/init.sh" "$HOME/.huskyrc"; do
# shellcheck disable=SC1090
[ -f "$f" ] && . "$f"
done
if [ -f "$HOME/.huskyrc" ]; then
echo "husky - '~/.huskyrc' is DEPRECATED, please move your code to ~/.config/husky/init.sh"
fi
i="${XDG_CONFIG_HOME:-$HOME/.config}/husky/init.sh"
[ -f "$i" ] && . "$i"

[ "${HUSKY-}" = "0" ] && exit 0

sh -e "$s" "$@"
c=$?

[ $c != 0 ] && echo "husky - $h script failed (code $c)"
[ $c = 127 ] && echo "husky - command not found in PATH=$PATH"
exit $c
c=0
h() {
[ $c = 0 ] && return
[ $c != 0 ] && echo "husky - $n script failed (code $c)"
[ $c = 127 ] && echo "husky - command not found in PATH=$PATH"
exit 1
}
trap 'c=$?; h' EXIT
set -e
PATH=node_modules/.bin:$PATH
. "$s"
File renamed without changes.
2 changes: 1 addition & 1 deletion index.mjs → index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ export default (d = '.husky') => {
w(_('.gitignore'), '*')
f.copyFileSync(new URL('husky', import.meta.url), _('h'))
l.forEach(h => w(_(h), `#!/usr/bin/env sh\n. "\${0%/*}/h"`, { mode: 0o755 }))
w(_('husky.sh'), '')
w(_('husky.sh'), 'echo "husky - `#!/usr/bin/env sh` and `. "$(dirname -- "$0")/_/husky.sh"` lines in hooks are DEPRECATED and won\'t be supported in v10. You can remove these two lines for even simpler scripts"')
return ''
}
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "husky",
"version": "9.0.11",
"type": "module",
"description": "Modern native Git hooks",
"keywords": [
"git",
Expand All @@ -15,9 +16,9 @@
"license": "MIT",
"author": "typicode",
"bin": {
"husky": "bin.mjs"
"husky": "bin.js"
},
"exports": "./index.mjs",
"exports": "./index.js",
"engines": {
"node": ">=18"
}
Expand Down
6 changes: 0 additions & 6 deletions tea.yaml

This file was deleted.

9 changes: 5 additions & 4 deletions test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ sh test/3_from-sub-dir.sh
sh test/4_not-git-dir.sh
sh test/5_git_command_not_found.sh
sh test/6_command_not_found.sh
sh test/7_set_u.sh
sh test/8_husky_0.sh
sh test/9_init.sh
sh test/10_time.sh
sh test/7_node_modules_path.sh
sh test/8_set_u.sh
sh test/9_husky_0.sh
sh test/10_init.sh
sh test/11_time.sh
File renamed without changes.
2 changes: 1 addition & 1 deletion test/10_time.sh → test/11_time.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ install
npx --no-install husky

git add package.json
echo "echo pre-commit" >.husky/pre-commit
echo "echo pre-commit" > .husky/pre-commit
time git commit -m foo
11 changes: 11 additions & 0 deletions test/7_node_modules_path.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh
. test/functions.sh
setup
install

npx --no-install husky

# Test pre-commit
git add package.json
echo 'echo "$PATH" | grep -q "node_modules/.bin"' > .husky/pre-commit
expect 0 "git commit -m foo"
File renamed without changes.
File renamed without changes.