Un hook de pre-commit para verificar que los mensajes de commit sigan el formato de
Conventional Commits.
Funciona con Python >= 3.8.
Asegúrate de que pre-commit esté instalado.
Crea un archivo de configuración en blanco en la raíz de tu repositorio, si es necesario:
touch .pre-commit-config.yamlAgrega/actualiza default_install_hook_types y agrega una nueva entrada de repositorio en tu archivo de configuración:
default_install_hook_types: - pre-commit - commit-msg repos: # - repo: ... - repo: https://github.com/compilerla/conventional-pre-commit rev: <git sha o tag> hooks: - id: conventional-pre-commit stages: [commit-msg] args: []
Instala el script de pre-commit:
pre-commit install --install-hooksHaz un commit (normal) ❌:
$ git commit -m "add a new feature" [INFO] Initializing environment for .... Conventional Commit......................................................Failed - hook id: conventional-pre-commit - duration: 0.07s - exit code: 1 [Mensaje de commit incorrecto] >> add a new feature Tu mensaje de commit no sigue el formato de Conventional Commits https://dev.azure.com/ACTSIS/DEVOPS/_wiki/wikis/DEVOPS.wiki/106/Buenas-pr%C3%A1cticas-Git/
Y con el argumento --verbose:
$ git commit -m "add a new feature" [INFO] Initializing environment for .... Conventional Commit......................................................Failed - hook id: conventional-pre-commit - duration: 0.07s - exit code: 1 [Mensaje de commit incorrecto] >> add a new feature Tu mensaje de commit no sigue el formato de Conventional Commits https://dev.azure.com/ACTSIS/DEVOPS/_wiki/wikis/DEVOPS.wiki/106/Buenas-pr%C3%A1cticas-Git/ Los mensajes de commit convencionales siguen un patrón como: type(scope): asunto cuerpo extendido Por favor corrige los siguientes errores: - Valor esperado para type de: build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test Ejecuta: git commit --edit --file=.git/COMMIT_EDITMSG para editar el mensaje de commit y reintentar el commit.
Haz un commit (convencional) ✔️:
$ git commit -m "feat:92564 add a new feature" [INFO] Initializing environment for .... Conventional Commit......................................................Passed - hook id: conventional-pre-commit - duration: 0.05s
conventional-pre-commit también se puede instalar y usar desde la línea de comandos:
pip install conventional-pre-commit
Luego ejecuta el script de línea de comandos:
conventional-pre-commit [types] input
-
[types]es una lista opcional de tipos de Conventional Commit permitidos (por ejemplo,feat fix chore) -
inputes un archivo que contiene el mensaje de commit a verificar:
conventional-pre-commit feat fix chore ci test .git/COMMIT_MSGO desde un programa en Python:
from conventional_pre_commit.format import is_conventional # imprime True print(is_conventional("feat:92564 this is a conventional commit")) # imprime False print(is_conventional("nope: this is not a conventional commit")) # imprime True print(is_conventional("custom: this is a conventional commit", types=["custom"]))
conventional-pre-commit soporta varios argumentos para configurar su comportamiento:
$ conventional-pre-commit -h
usage: conventional-pre-commit [-h] [--no-color] [--force-scope] [--scopes SCOPES] [--strict] [--verbose] [types ...] input
Verifica si un mensaje de commit de git sigue el formato de Conventional Commits.
argumentos posicionales:
types Lista opcional de tipos a soportar.
input Un archivo que contiene un mensaje de commit de git.
opciones:
-h, --help muestra este mensaje de ayuda y sale
--no-color Desactiva los colores en la salida.
--force-scope Obliga a que el commit tenga un scope definido.
--scopes SCOPES Lista de scopes soportados. Los scopes deben estar separados por comas sin espacios (por ejemplo: api,cliente).
--strict Obliga a que el commit siga estrictamente el formato de Conventional Commits. No permite commits con fixup! ni merge.
--verbose Imprime mensajes de error más detallados.Proporciona argumentos en la línea de comandos, o a través de la propiedad hooks.args de pre-commit:
repos: - repo: https://github.com/compilerla/conventional-pre-commit rev: <git sha o tag> hooks: - id: conventional-pre-commit stages: [commit-msg] args: [--strict, --force-scope, feat, fix, chore, test, custom]
NOTE: cuando se usa como un hook de pre-commit, input se proporciona automáticamente (con el mensaje del commit actual).
conventional-pre-commit viene con una configuración de VS Code devcontainer
para proporcionar un entorno de desarrollo consistente.
Con la extensión Remote - Containers habilitada, abre la carpeta que contiene este repositorio dentro de Visual Studio Code.Code.
Deberías recibir un aviso en la ventana de Visual Studio Code; haz clic en Reopen in Container para ejecutar el entorno de desarrollo dentro del devcontainer.
Si no recibes un aviso, o cuando sientas que necesitas comenzar desde un entorno nuevo:
Ctrl/Cmd+Shift+Ppara abrir el paleta de comandos en Visual Studio Code- Escribe
Remote-Containerspara filtrar los comandos - Selecciona
Rebuild and Reopen in Containerpara reconstruir completamente el devcontainer - Selecciona
Reopen in Containerpara reabrir la última construcción del devcontainer
El versionado generalmente sigue Semantic Versioning.
Los releases a PyPI y GitHub se activan al empujar una etiqueta.
- Asegúrate de que todos los cambios para el release estén presentes en la rama
main - Etiqueta con la nueva versión:
git tag vX.Y.Zpara un release,git tag vX.Y.Z-preNpara un pre-release - Empuja la nueva etiqueta de versión:
git push origin vX.Y.Z
Inspired by matthorgan's pre-commit-conventional-commits.