{"id":13552759,"url":"https://github.com/devops-kung-fu/hookz","last_synced_at":"2025-10-13T10:31:06.113Z","repository":{"id":38120746,"uuid":"344233506","full_name":"devops-kung-fu/hookz","owner":"devops-kung-fu","description":"Manages client side git hooks resulting in the ability to create git action pipelines.","archived":false,"fork":false,"pushed_at":"2024-07-05T12:01:47.000Z","size":2220,"stargazers_count":78,"open_issues_count":6,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-02T18:41:13.615Z","etag":null,"topics":["devops","devops-tools","github","hooks","pre-commit-hooks"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devops-kung-fu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-03T18:59:10.000Z","updated_at":"2025-01-30T03:13:28.000Z","dependencies_parsed_at":"2023-02-19T07:46:05.362Z","dependency_job_id":"3a2ac62e-b927-42df-be5e-2d0f95484e7b","html_url":"https://github.com/devops-kung-fu/hookz","commit_stats":{"total_commits":196,"total_committers":3,"mean_commits":65.33333333333333,"dds":0.07653061224489799,"last_synced_commit":"087a185511fef9021daafcb3665dd11fbc8005b4"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/devops-kung-fu/hookz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devops-kung-fu%2Fhookz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devops-kung-fu%2Fhookz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devops-kung-fu%2Fhookz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devops-kung-fu%2Fhookz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devops-kung-fu","download_url":"https://codeload.github.com/devops-kung-fu/hookz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devops-kung-fu%2Fhookz/sbom","scorecard":{"id":338107,"data":{"date":"2025-08-11","repo":{"name":"github.com/devops-kung-fu/hookz","commit":"087a185511fef9021daafcb3665dd11fbc8005b4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Code-Review","score":2,"reason":"Found 6/21 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Security-Policy","score":4,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Warn: no linked content found","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/go-quality.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/release.yml:9","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go-quality.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/devops-kung-fu/hookz/go-quality.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go-quality.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/devops-kung-fu/hookz/go-quality.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/devops-kung-fu/hookz/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/devops-kung-fu/hookz/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/devops-kung-fu/hookz/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/devops-kung-fu/hookz/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/devops-kung-fu/hookz/release.yml/main?enable=pin","Warn: goCommand not pinned by hash: .github/workflows/go-quality.yml:19","Warn: goCommand not pinned by hash: .github/workflows/go-quality.yml:20","Warn: downloadThenRun not pinned by hash: .github/workflows/go-quality.yml:29","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned","Info:   0 out of   2 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Mozilla Public License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.4.4 not signed: https://api.github.com/repos/devops-kung-fu/hookz/releases/144440187","Warn: release artifact v2.4.3 not signed: https://api.github.com/repos/devops-kung-fu/hookz/releases/99435392","Warn: release artifact v2.4.2 not signed: https://api.github.com/repos/devops-kung-fu/hookz/releases/80862671","Warn: release artifact v2.4.1 not signed: https://api.github.com/repos/devops-kung-fu/hookz/releases/73382270","Warn: release artifact v2.4.0 not signed: https://api.github.com/repos/devops-kung-fu/hookz/releases/68270102","Warn: release artifact v2.4.4 does not have provenance: https://api.github.com/repos/devops-kung-fu/hookz/releases/144440187","Warn: release artifact v2.4.3 does not have provenance: https://api.github.com/repos/devops-kung-fu/hookz/releases/99435392","Warn: release artifact v2.4.2 does not have provenance: https://api.github.com/repos/devops-kung-fu/hookz/releases/80862671","Warn: release artifact v2.4.1 does not have provenance: https://api.github.com/repos/devops-kung-fu/hookz/releases/73382270","Warn: release artifact v2.4.0 does not have provenance: https://api.github.com/repos/devops-kung-fu/hookz/releases/68270102"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-2687 / GHSA-4v7x-pqxf-cx7m","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T05:12:01.621Z","repository_id":38120746,"created_at":"2025-08-18T05:12:01.622Z","updated_at":"2025-08-18T05:12:01.622Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279014647,"owners_count":26085555,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devops","devops-tools","github","hooks","pre-commit-hooks"],"created_at":"2024-08-01T12:02:09.488Z","updated_at":"2025-10-13T10:31:05.691Z","avatar_url":"https://github.com/devops-kung-fu.png","language":"Go","readme":"![](img/hookz-logo.png)\n\n# hookz\n\n![GitHub release (latest by date)](https://img.shields.io/github/v/release/devops-kung-fu/hookz) [![Go Report Card](https://goreportcard.com/badge/github.com/devops-kung-fu/hookz)](https://goreportcard.com/report/github.com/devops-kung-fu/hookz) [![codecov](https://codecov.io/gh/devops-kung-fu/hookz/branch/main/graph/badge.svg?token=P9WBOBQTOB)](https://codecov.io/gh/devops-kung-fu/hookz) [![SBOM](https://img.shields.io/badge/CyloneDX-SBoM-informational)](hookz-sbom.json)\n\nManages git hooks inside a local git repository based on a configuration.\n\n## Overview\n\nHave you ever wanted to integrate custom functionality into your code commit and push workflows without using IDE plugins, hacks, or gnarly scripts? We have, and that's why we developed ```Hookz```. ```Hookz``` allows us to do a ton of commit tasks **_before_** our code even hits our branches. As you commit and push code to a git based source repository, Hookz will trigger scripts, run tasks, or do just about anything for you.\n\nThe best thing? ```Hookz``` **doesn't care what IDE you develop with, what your back end source control system is, or what languages you program in.** Operating System? We don't care. We've compiled ```Hookz``` for every OS and architecture you'd ever want.\n\nHere's what happens when we use ```hookz``` on ```Hookz``` itself:\n\n![](img/run-hookz.png)\n\n## So what exactly are Git Hooks?\n\nGit hooks are a great way to run supplemental commands as you interact with git. For deeper information, check out what git-scm has to say about [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)\n\n## What Hookz Does\n\n```Hookz``` generates scripts from a configuration that get triggered when interacting with git locally. For example, in a pre-commit you could lint your code, test it, and then add any modifications of files into the commit before pushing it to your remote. As seen in the screenshot above, tasks come back with a status.\n\n```Hookz``` may return one of three different status codes as it executes the action pipeline:\n\n| Code | Description                                                                                                                                                                                                          |\n| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| PASS | The action has successfully completed                                                                                                                                                                                |\n| WARN | An executable defined in the ```.hookz.yaml``` file wasn't found on the local system. In this case, the action is ignored and no attempt is made to run it. Flow will continue without an exit code of PASS or FAIL. |\n| FAIL | The action has failed. Execution stops. Consider this like a build break in a CI/CD pipeline that executes on a pull request. Errors must be addressed before the code is allowed to be committed.                   |\n\n## Installation\n\n### Mac\n\nYou can use [Homebrew](https://brew.sh) to install ```Hookz``` using the following:\n\n``` bash\nbrew tap devops-kung-fu/homebrew-tap\nbrew install devops-kung-fu/homebrew-tap/hookz\n```\n\n### Linux\n\nThe best way to install ```hookz``` is via snap.\n\nTo install ```hookz```,  [download the latest release](https://github.com/devops-kung-fu/hookz/releases), extract the binary from the compressed file, make is executable, rename it to ```hookz``` and toss it in your ```/usr/local/bin``` directory for Linux, or on your path for other operating systems.\n\nIf you have a Go development environment set up, you can also simply do this:\n\n``` bash\n\ngo install github.com/devops-kung-fu/hookz@latest\n\n```\n\nIf you'd like to contribute to the development of ```Hookz``` then check out the [Development](#development) section below.\n\n## Configuration\n\nHookz uses a configuration file to generate hooks in your local git repository. This file needs to be in the root of your repository and must be named ```.hookz.yaml```\n\n### Example Configuration\n\n``` yaml\n  version: 2.4.4\n  tools:\n    - tool: github.com/devops-kung-fu/lucha@latest\n    - tool: github.com/devops-kung-fu/hinge@latest\n    - tool: github.com/devops-kung-fu/gardener@latest\n    - tool: github.com/kisielk/errcheck@latest      \n    - tool: golang.org/x/lint/golint@latest\n    - tool: github.com/fzipp/gocyclo/cmd/gocyclo@latest\n  hooks:\n    - type: pre-commit\n      actions:\n        - name: \"PlantUML Image Generator\"\n          exec: \"gardener\"\n          args: [\"generate\", \".\"]\n        - name: \"Git Pull (Ensure there are no upstream changes)\"\n          exec: git\n          args: [\"pull\"]\n        - name: \"Go Tidy\"\n          exec: go\n          args: [\"mod\", \"tidy\"]\n    - type: post-commit\n      actions:\n      - name: \"Post Echo\"\n        exec: echo\n        args: [\"-e\", \"Done\"]\n    - type: pre-push\n      actions:\n        - name: \"Add all changed files during the pre-commit stage\"\n          exec: git\n          args: [\"add\", \".\"]\n  ```\n\nHookz will read this example configuration and create a ```pre-commit``` hook and a ```post-commit``` hook based on this yaml. It will also do a ```go install``` on any source listed in the sources section of the yaml.\n\nAn action with an ```URL``` will download the binary from the defined URL and configure the hook to execute the command with the defined arguments before a commit happens.\n\nThe post-commit in this configuration will execute a command named \"```dude```\" with the arguments ```\"Hello World\"``` after a commit has occurred. Note that the _dude_ command must be on your path. If it isn't this post-commit will return a WARN message because the command isn't found.\n\n__Check out the [tacklebox](tackle/README.md) for a curated collection of actions to get you up and running quickly.__\n\n### Dynamic Architecture URLs\n\nQuite often, downloadable binaries exist for multiple platforms when downloading. In order to get the right architecture for your current platform, Hookz ```v2.3.0``` introduced dynamic architecture URL support. For example, [hinge](https://github.com/devops-kung-fu/hinge) is available for multiple architectures such as ```linux```, ```darwin``` (Mac), etc. By using the ```%%PLATFORM%%``` tag in your URL to replace an architecture, the download functionality will retrieve the right binary for your current architecture.\n\nYou can use the following to retrieve the right architecture for [hinge](https://github.com/devops-kung-fu/hinge):\n\n``` yaml\nversion: 2.4.4\nhooks:\n  - type: pre-commit\n    actions:\n        - name: Hinge\n          url: https://github.com/devops-kung-fu/hinge/releases/download/v0.1.0/hinge-0.1.0-%%PLATFORM%%-amd64\n          args: [\".\"]\n```\n\nIf you are running ```Hookz``` on a Mac, this will bring down the ```hinge-0.1.0-darwin-amd64``` binary, if on linux, the ```hinge-0.1.0-linux-amd64``` binary will be downloaded.\n\n### Optional elements\n\nYou must have at least an URL, exec, or script defined in your actions. If you select one, then you shouldn't define the others in the YAML. Don't worry if you do, we have you covered and explain what happens in the following table.\n\n| Attribute    | Notes                                                                                            |\n| ------------ | ------------------------------------------------------------------------------------------------ |\n| ```URL```    | If this exists, then exec and script are ignored. The URL must be a link to an executable binary | If you are developing in go then use the ```sources``` node in your ```.hookz.yaml``` to define sources to be installed. |\n| ```exec```   | If this exists then URL and script are ignored                                                   |\n| ```script``` | If this exists then URL, exec, and args are ignored                                              |\n| ```args```   | Optional in all cases                                                                            |\n\n### Inline scripting\n\nScripts can be embedded into the ```.hookz.yaml``` in multiline format such as follows:\n\n__NOTE:__ There needs to be a \\n at the end of a line if a multi-line statement exists in the ```script``` node, and special characters need to be escaped properly. \n\n``` yaml \n- type: pre-commit\n    actions:\n      - name: \"Go Tidy (Recursive)\"\n        script: \"\n          #!/bin/bash \\n\n          echo -e Tidying all found go.mod occurrences \\n\n          find . -name go.mod -print0 | xargs -0 -n1 dirname |  xargs -L 1 bash -c 'cd \\\"$0\\\" \u0026\u0026 pwd \u0026\u0026 go mod tidy' \\n\n          \"\n```\nIf you have args flags set, they can be referenced as $1, $2, etc. in your script in a similar manner as passing parameters in. Any scripting language is supported.\n\n### Support for multiple commands in a hook\n\nIf multiple hooks are defined in the configuration with the same type (ie: ```pre-commit```) they will be configured to run in the order they appear in the file. There is no need to group types together, they will be written to the appropriate hooks.\n\n### Hook types\n\nHook types that will execute are the same as supported by _git_. Examples are as follows:\n\n* ```applypatch-msg```\n* ```commit-msg```\n* ```fsmonitor-watchman```\n* ```post-commit```\n* ```post-update```\n* ```pre-applypatch```\n* ```pre-commit```\n* ```pre-update```\n* ```prepare-commit-msg```\n* ```pre-push```\n* ```pre-rebase```\n* ```pre-receive```\n* ```update```\n\n### Return Codes\n\nAny non-zero return code from a command executed in a hook will return a FAIL.\n\n### Security\n\n**IMPORTANT:** the ```URL``` element will download a binary, store it in your .git/hookz folder and mark it executable. It is important to ensure that **YOU KNOW THE SAFETY** of the executable that you are downloading. A more secure way is to use the ```exec``` attribute to run an application which is already locally installed, or embed a script in the ```script``` element to download and check the ```shasum``` of the file.\n\nFor additional security notes, view the [SECURITY.md](SECURITY.md)\n\n## Running Hookz\n\n![](img/hookz.png)\n\nTo generate the hooks as defined in your configuration simply execute the following command in the _root of your local repository_ where the ```.hookz.yaml``` file resides:\n\n``` bash\nhookz initialize # you can also use the init alias\n```\n\nRemoving hooks can be done by executing the following command:\n\n``` bash\nhookz remove\n```\n\nTo re-download any file defined in an URL key:\n\n``` bash\nhookz update\n```\n\n### Applying changes to the .hookz.yaml\n\nIf there is a modification to the ```.hookz.yaml``` file in your application, you'll need to apply the changes using the following:\n\n``` bash\nhookz reset\n```\n\n### Debug option\n\nThe ```initialize``` (init) and ```reset``` command optionally take a debug flag to indicate extended output should be displayed while ```hookz``` generates git hooks. \n\n``` bash\nhookz init --debug\nhookz reset --debug\n```\n\n### Verbose flag\n\nIf you want to see a log of what is happening when ```hookz``` executes, use the ```--verbose``` flag.\n\n``` bash\nhookz init --verbose\nhookz reset --verbose\n```\n\n### Verbose Output flag\n\nPassing the  ```--verbose-output``` flag when running a ```hookz init``` or ```hookz reset``` command will trigger ```Hookz``` to output extended information as ```git``` executes the hooks during the commit, push, etc. process. All output from any action will be displayed during the commit/push process when this flag is used to build the hooks. This is handy for debugging or seeing errors that may be suppressed by hookz. \n\n``` bash\nhookz init --verbose-output\nhookz reset --verbose-output\n```\n\n## Tacklebox (Curated Example Actions)\n\nWe've assembled a collection of actions that you can lift into your ```.hookz.yaml``` file to add functionality to your hooks and get up and running quickly.\n\nCheck out the collection [here](tackle/README.md).\n\n### Terraform Format and Terraform Docs\n\nAssumes `terraform` is in your `PATH` for `fmt`. \n\n```yaml\nversion: 2.4.4\nhooks:\n  - type: pre-commit\n    actions:\n      - name: Terraform Format\n        exec: terraform\n        args: [\"fmt\"]\n      - name: Terraform Docs\n        url: https://github.com/terraform-docs/terraform-docs/releases/download/v0.12.1/terraform-docs-v0.12.1-%%PLATFORM%%-amd64\n        args: [\"markdown\", \"table\", \"--output-file\", \"README.md\", \".\"]\n```\n\n`README.md` must contain the following tags where the documentation will be injected.\n\n```html\n\u003c!-- BEGIN_TF_DOCS --\u003e\n\n\u003c!-- END_TF_DOCS --\u003e\n```\n\n### NPM\n\n```yaml\nversion: 2.4.4\nhooks:\n  - type: pre-commit\n    actions:\n      - name: NPM CI\n        exec: npm\n        args: [\"ci\"]\n      - name: NPM Test\n        exec: npm\n        args: [\"test\"]\n```\n\n## Development\n\n## Overview\n\nIn order to use contribute and participate in the development of Hookz you'll need to have an updated Go environment. Before you start, please view the [Contributing](CONTRIBUTING.md) and [Code of Conduct](CODE_OF_CONDUCT.md) files in this repository.\n\n## Prerequisites\n\nThis project makes use of [DKFM](https://github.com/devops-kung-fu) tools such as [Hookz](https://github.com/devops-kung-fu/hookz) and [Hinge](https://github.com/devops-kung-fu/hinge), as well as some other open source tooling. Install these tools with the following commands:\n\n``` bash\n\ngo install github.com/devops-kung-fu/hookz@latest\ngo install github.com/devops-kung-fu/lucha@latest\ngo install github.com/devops-kung-fu/hinge@latest\ngo install github.com/kisielk/errcheck@latest\ngo install golang.org/x/lint/golint@latest\ngo install github.com/fzipp/gocyclo@latest\n\n```\n\n## Software Bill of Materials\n\n```Hookz``` uses [syft](https://github.com/anchore/syft) to generate a Software Bill of Materials every time a developer commits code to this repository. \n\nThe current CycloneDX SBoM for ```Hookz``` is available [here](sbom/hookz.cyclonedx.json) and the current SPDX SBoM for ```Hookz``` is available [here](sbom/hookz.spdx.json)\n\n## Credits\n\nA big thank-you to our friends at [Freepik](https://www.freepik.com) for the ```Hookz``` logo.","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevops-kung-fu%2Fhookz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevops-kung-fu%2Fhookz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevops-kung-fu%2Fhookz/lists"}