Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/replicadse/hoox
Git hooks done right.
https://github.com/replicadse/hoox
Last synced: 5 days ago
JSON representation
Git hooks done right.
- Host: GitHub
- URL: https://github.com/replicadse/hoox
- Owner: replicadse
- License: mit
- Created: 2024-07-25T03:16:59.000Z (4 months ago)
- Default Branch: master
- Last Pushed: 2024-10-02T10:01:38.000Z (about 1 month ago)
- Last Synced: 2024-10-06T04:21:36.847Z (about 1 month ago)
- Language: Rust
- Homepage:
- Size: 737 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: docs/README.md
- License: LICENSE
Awesome Lists containing this project
README
# hoox
![](hoox.png)
`hoox` is an application / library that allows users to manage git hooks as part of the repository.
## Workflow
### CLI install
The Git hooks will contain calls to the `hoox` cli, therefore making it necessary that the `hoox` CLI is installed in order to execute the Git hooks. If it is not installed, the hooks will fail and prevent the operation (by default).
### Repo initialization
In order to initialize a repo you can either:
- Add hoox to the dev-dependencies of the crate you're working with (if you're working on a rust project)
```bash
cargo add hoox --dev
```
This command installs hoox in the git repository during the build process (using a custom `build.rs`) even when it's not in the root `Cargo.toml`. It moves up the directory path, starting from the `OUT_DIR` env variable during build (usually the `target` folder), to find the first folder containing a `.git` subfolder.
- OR install hoox manually into the Git folder with
```bash
hoox init
```
This method works the same way as the method mentioned above although it does not use the `OUT_DIR` env variable that is present during build but it uses the current working directory of the shell (`cwd`).### Run hooks manually
To run hooks manually, use:
```bash
hoox run $HOOK_NAME
```If the hook `$HOOK_NAME` was _not_ specified in the `.hoox.toml` file, this command will fail. In order to make the command succeed and ignore the missing hook definition, pass the `--ignore-missing` parameter.
## Example
```yaml
version: "0.0.0"
verbosity: all.cargo: &cargo !inline |-
set -e
set -u
cargo +nightly fmt --all -- --check
cargo test --allhooks:
"pre-commit":
# use YAML anchor
- command: *cargo
# use inline command
- command: !inline 'cargo doc --no-deps'
verbosity: stderr
severity: warn
# reference a script file (path is relative to Git repo root)
- command: !file "./hello_world.sh"
# reference a script file with custom program
- command: !file "./hello_world.py"
program: ["python3", "-c"]
verbosity: stderr
severity: error"pre-push":
# re-use YAML anchor
- command: *cargo"prepare-commit-msg":
# write to $COMMIT_MSG_FILE ($1) which is going to be the template commit message for this commit
# which is subsequently opened in the $EDITOR program.
# $0 = path to "hoox.yaml" file in any hook
- command: !inline |-
COMMIT_MSG_FILE=$1
echo "Work in progress" > $COMMIT_MSG_FILE
```### Available hooks
- `applypatch-msg`
- `commit-msg`
- `post-applypatch`
- `post-checkout`
- `post-commit`
- `post-merge`
- `post-receive`
- `post-rewrite`
- `post-update`
- `pre-applypatch`
- `pre-auto-gc`
- `pre-commit`
- `pre-push`
- `pre-rebase`
- `pre-receive`
- `prepare-commit-msg`
- `push-to-checkout`
- `sendemail-validate`
- `update`