blob: c75b61940a6650d294ee4d1f63874fcfaa22ff2e [file]
"""Recipe for running pre-commit tests.
pre-commit is a framework written in python that allows each
repository to define its own set of checks that will be run
before code is committed. It uses a git hook and a config file
at the root of the repository.
This recipe looks for the config file and runs pre-commit.
"""
import logging
import os
from slave import base_recipe
from slave.step import precommit_step
from slave.step import py_env_setup_step
CONFIG_FILE_DEFAULT = ".pre-commit-config.yaml"
CONFIG_FILE_BETA = ".pre-commit-config.beta.yaml"
def GetValidBuildNames():
return ["precommit", "precommit-beta"]
def CreateRecipe(build_name: str, **kwargs):
"""Defines how this recipe gets built."""
if build_name.endswith("-beta"):
config_file = CONFIG_FILE_BETA
show_output = False
else:
config_file = CONFIG_FILE_DEFAULT
show_output = True
return PreCommitRecipe(
config_file=config_file,
show_output=show_output,
**kwargs)
class PreCommitRecipe(base_recipe.BaseRecipe):
"""Recipe to execute pre-commit hooks."""
def __init__(self, config_file, show_output, **kwargs):
base_recipe.BaseRecipe.__init__(self, **kwargs)
self._config_file = config_file
self._repo_root_directory = kwargs["eureka_root"]
self._show_output = show_output
def get_steps(self):
return [
py_env_setup_step.PyEnvSetupStep(
py3=True,
requirements_project="continuous-tests",
requirements_path="configs/pre-commit/requirements.txt",
**self._step_kwargs),
precommit_step.PreCommitStep(
config_file=self._config_file,
repo_root_directory=self._repo_root_directory,
show_output=self._show_output,
**self._step_kwargs),
]