Implementáció és kényszerítés
1. Bevezetés¶
Egy szabvány csak annyit ér, amennyit be is tartatnak belőle. A modern szoftverfejlesztési folyamatokban az emberi fegyelemre való támaszkodást felváltotta az automatizált kényszerítés.
1.1. Pre-commit hookok: Commitlint¶
A fejlesztési ciklus legolcsóbb pontja a hibák javítására a fejlesztő saját gépe. A Commitlint felelős az üzenet szövegének validálásáért.
A folyamat technikai lépései:
Telepítés: A projektfüggőségek közé felvételre kerül a@commitlint/cliés@commitlint/config-conventionalaz alábbi parancs kiadásával:npm install --save-dev @commitlint/cli @commitlint/config-conventionalHasználat:Terminál:npx commitlint --from HEAD~1 --to HEAD --verboseGitLab CI/CD:npx commitlint --from ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --to ${CI_COMMIT_SHA}
.gitlab-ci.yml:stages: - lint lint:commit: image: commitlint/commitlint:20.3.1 stage: lint variables: GIT_DEPTH: 0 before_script: - apk add --no-cache git - npm install --save-dev @commitlint/cli @commitlint/config-conventional script: - npx commitlint --from ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --to ${CI_COMMIT_SHA} rules: - if: $CI_MERGE_REQUEST_ID # csak MR esetén fut - if: $CI_PIPELINE_SOURCE == "push" stages: ["lint", "build", "test"] lint:commit: image: name: commitlint/commitlint:20.3.1 entrypoint: [""] stage: lint script: - commitlint --from ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --to ${CI_COMMIT_SHA} rules: - if: $CI_MERGE_REQUEST_ID # csak MR esetén fut - if: $CI_PIPELINE_SOURCE == "push"
Ez a mechanizmus biztosítja, hogy a szabálytalan üzeneteket a Git elutasítsa még azelőtt, hogy azok bekerülnének a lokális történetbe.
1.2. CI/CD Pipeline integráció: A végső védvonal¶
Mivel a lokális hookokat a --no-verify kapcsolóval ki lehet kerülni, a szerveroldali ellenőrzés elengedhetetlen. A GitHub Actions vagy GitLab CI folyamatokba épített linterek (pl. wagoid/commitlint-github-action) átvizsgálják az összes beérkező commitot a Pull Requestekben. Ha akár egyetlen üzenet is hibás, a pipeline "pirosra vált", és megakadályozza a kód egyesítését (merge) a fő ágba.
1.3. Automatizáció a végén: Semantic Release¶
A szabványos commitok valódi ereje a kiadási folyamat automatizálásában rejlik. A Semantic Release eszköz elemzi a commitokat a legutóbbi verzió óta, és a típusok alapján automatikusan elvégzi a következő feladatokat:
- Meghatározza a következő verziószámot (PATCH, MINOR vagy MAJOR).
- Legenerálja vagy frissíti a CHANGELOG.md fájlt, kategóriákba rendezve a változásokat.
- Létrehozza a GitHub/GitLab kiadást, feltölti a binárisokat és közzéteszi a csomagot a megfelelő regisztrátorokban (pl. npm, PyPI).