Skip to content

Latest commit

 

History

History
98 lines (75 loc) · 3.33 KB

File metadata and controls

98 lines (75 loc) · 3.33 KB
title date authors tags
Packit's pre-commit hooks
2023-05-16 04:00:00 -0700
jpopelka
workflow

pre-commit is a wonderful tool that saves you a lot of time by automatically checking your changes before you commit and/or push them out.

For example, in our packit repo we run various hooks upon each commit:

Our pre-commit hooks

We also have a few hooks which we've created and which you might find useful as well.

check-rebase

We in Packit love linear git history. This hook checks whether your branch is up-to-date with the upstream, and we use it to know when it's time to rebase changes before we push them.

To try, add this to your .pre-commit-config.yaml

- repo: https://github.com/packit/pre-commit-hooks
  rev: v1.2.0
  hooks:
    - id: check-rebase
      args: [upstream_url]

validate-config

Packit uses a YAML configuration file in an upstream repository. We have a packit config validate command to check it, but it's easy to forget (to run it) and notice a typo after you committed and pushed the changes and waited for some time for Packit to tell you that in a PR.

It's much faster to catch the problem before committing and/or pushing the changes.

validate-config-in-container

This hook runs (only if there's been a change in the .packit.yaml) packit in a container (from our image), mounts your sources inside and runs the packit config validate.

- repo: https://github.com/packit/pre-commit-hooks
  rev: v1.2.0
  hooks:
    - id: validate-config-in-container

It requires docker/podman, which can be a problem for example in a CI.

validate-config

Another option is a hook which runs the packit binary directly installed on the machine. If there's no packit, the hook passes to not break for example your CI where packit is most likely not installed.

- repo: https://github.com/packit/pre-commit-hooks
  rev: v1.2.0
  hooks:
    - id: validate-config
But why the hook doesn't install packit itself?

Right, typically, when you run a pre-commit hook for the first time, it installs everything it needs. Like in case of Python, pre-commit pip installs all the dependencies.

The problem in our case is that packit has a lot of dependencies and some of them (if missing) are compiled from source when you try to pip install packit. That needs gcc and additional devel packages to be installed on the machine prior to running the hook for the first time. That would make the hook usage very user unfriendly, leaving aside that sometimes (in a CI) you don't have access to the machine to install them prior to running the hooks.