Kihagyás

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:

  1. Telepítés: A projektfüggőségek közé felvételre kerül a @commitlint/cli és @commitlint/config-conventional az alábbi parancs kiadásával: npm install --save-dev @commitlint/cli @commitlint/config-conventional
  2. Használat:
    • Terminál: npx commitlint --from HEAD~1 --to HEAD --verbose
    • GitLab CI/CD: npx commitlint --from ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --to ${CI_COMMIT_SHA}
  3. .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).