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: local entry declares hooks that live in the repository itself, so it has no upstream revision and is skipped.

  • Only files named exactly .pre-commit-config.yaml are scanned.

Manifest

Parameters

NameTypeDescriptionRequired
digestbooleanDigest 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
ignorearrayIgnore allows to specify rule to ignore autodiscovery a specific NPM based on a rule
    pathstringPath specifies a .pre-commit-config.yaml path pattern, the pattern requires to match all of name, not just a substring.
    reposobjectRepos specifies the list of NPM packages to check
onlyarrayOnly allows to specify rule to only autodiscover manifest for a specific NPM based on a rule
    pathstringPath specifies a .pre-commit-config.yaml path pattern, the pattern requires to match all of name, not just a substring.
    reposobjectRepos specifies the list of NPM packages to check
rootdirstringRootDir defines the root directory used to recursively search for npm packages.json
versionfilterobject

versionfilter provides parameters to specify the version pattern used when generating manifest.

kind - semver versionfilter of kind semver uses semantic versioning as version filtering pattern accepts one of: prerelease - Updatecli tries to identify the latest prerelease whatever it means patch - Updatecli only handles patch version update minor - Updatecli handles patch AND minor version update minoronly - Updatecli handles minor version only major - Updatecli handles patch, minor, AND major version update majoronly - Updatecli only handles major version update a version constraint such as >= 1.0.0

kind - regex versionfilter of kind regex uses regular expression as version filtering pattern accepts a valid regular expression

example:

  versionfilter:
    kind: semver
    pattern: minor

and its type like regex, semver, or just latest.

More examples can be found at https://www.updatecli.io/docs/core/versionfilter/

    kindstringspecifies the version kind such as semver, regex, or latest
    patternstringspecifies 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
    regexstringspecifies the regex pattern, used for regex/semver and regex/time. Output of the first capture group will be used.
    replaceallobjectreplaceAll 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.
        patternstringPattern specifies the regex pattern to match for replacement
        replacementstringReplacement specifies the replacement string (supports $1, $2, etc. for captured groups)
    strictbooleanstrict enforce strict versioning rule. Only used for semantic versioning at this time
⚠ This table is generated from the Updatecli codebase and may contain inaccurate data. Feel free to report them on github.com/updatecli/updatecli

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