Precommit
Description
The Precommit crawler looks recursively for every .pre-commit-config.yaml file from a root directory, and updates the rev pinned by each hook repository.
This crawler is enabled by default, so it can be used either automatically by running updatecli diff from a directory containing the files to update, or by providing a manifest.
The automatic discovery behavior can be tuned by providing a YAML manifest with a precommit crawler in top-level directive autodiscovery as explained in the "Autodiscovery" page.
Generated manifests
Each repository produces a gittag source resolving the latest tag, and a target writing the new value to the repository’s rev.
The version filter is narrowed per repository from the currently pinned revision, so a hook on v4.5.0 is filtered with >=4.5.0.
Digest pinning
Unlike most crawlers, digest defaults to false, so hooks are pinned to a tag. Set digest: true to resolve and write the commit SHA behind that tag instead, which is the form pre-commit itself recommends for untrusted repositories.
Limitations
A
repo: localentry declares hooks that live in the repository itself, so it has no upstream revision and is skipped.Only files named exactly
.pre-commit-config.yamlare scanned.
Manifest
Parameters
| Name | Type | Description | Required |
|---|---|---|---|
| digest | boolean | Digest provides parameters to specify if the generated manifest should use a digest instead of the branch or tag.
This is equivalent to using the
--freeze option of precommit | |
| ignore | array | Ignore allows to specify rule to ignore autodiscovery a specific NPM based on a rule | |
| path | string | Path specifies a .pre-commit-config.yaml path pattern, the pattern requires to match all of name, not just a substring. | |
| repos | object | Repos specifies the list of NPM packages to check | |
| only | array | Only allows to specify rule to only autodiscover manifest for a specific NPM based on a rule | |
| path | string | Path specifies a .pre-commit-config.yaml path pattern, the pattern requires to match all of name, not just a substring. | |
| repos | object | Repos specifies the list of NPM packages to check | |
| rootdir | string | RootDir defines the root directory used to recursively search for npm packages.json | |
| versionfilter | object |
kind - semver
versionfilter of kind kind - regex
versionfilter of kind example: and its type like regex, semver, or just latest. More examples can be found at https://www.updatecli.io/docs/core/versionfilter/ | |
| kind | string | specifies the version kind such as semver, regex, or latest | |
| pattern | string | specifies the version pattern according the version kind for semver, it is a semver constraint for regex, it is a regex pattern for time, it is a date format | |
| regex | string | specifies the regex pattern, used for regex/semver and regex/time. Output of the first capture group will be used. | |
| replaceall | object | replaceAll applies a regex replacement to version strings before filtering. This is useful for transforming versions (e.g., curl-8_15_0 to curl-8.15.0) before regex extraction. | |
| pattern | string | Pattern specifies the regex pattern to match for replacement | |
| replacement | string | Replacement specifies the replacement string (supports $1, $2, etc. for captured groups) | |
| strict | boolean | strict enforce strict versioning rule. Only used for semantic versioning at this time |
Example
# updatecli.d/default.yaml
name: "precommit autodiscovery"
scms:
default:
kind: git
spec:
url: https://github.com/updatecli/updatecli.git
branch: "main"
autodiscovery:
scmid: default
crawlers:
precommit:
spec:
digest: true