Skip to content

Commit

Permalink
ci(commitlint): addition of commit message linter (#695)
Browse files Browse the repository at this point in the history
Adds commitlint to check the commit message style against agreed
conventional commits configuration.

Changes script argument values to always use linter names (e.g.
shellcheck).

Changes argument handling to allow only one checking action that can now
accept further optional arguments.
  • Loading branch information
tiborsimko committed Jan 11, 2024
1 parent 5b0d80c commit 1876da1
Show file tree
Hide file tree
Showing 3 changed files with 187 additions and 126 deletions.
21 changes: 21 additions & 0 deletions .commitlintrc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
rules:
body-case: [2, always, sentence-case]
body-full-stop: [2, always]
body-leading-blank: [2, always]
body-max-line-length: [2, always, 72]
footer-leading-blank: [2, always]
footer-max-line-length: [2, always, 72]
header-max-length: [2, always, 72]
scope-case: [2, always, lower-case]
subject-case:
- 2
- never
- [pascal-case, sentence-case, start-case, upper-case]
subject-empty: [2, never]
subject-full-stop: [2, never, "."]
type-case: [2, always, lower-case]
type-empty: [2, never]
type-enum:
- 2
- always
- [build, chore, ci, docs, feat, fix, perf, refactor, style, test]
232 changes: 129 additions & 103 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# This file is part of REANA.
# Copyright (C) 2020, 2021, 2022, 2023 CERN.
# Copyright (C) 2020, 2021, 2022, 2023, 2024 CERN.
#
# REANA is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.
Expand All @@ -9,48 +9,74 @@ name: CI
on: [push, pull_request]

jobs:
lint-shellcheck:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3

- name: Runs shell script static analysis
run: |
sudo apt-get install shellcheck
./run-tests.sh --check-shellscript
lint-black:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.8'

- name: Install Python dependencies
run: pip install black

- name: Check Python code formatting
run: ./run-tests.sh --check-black

lint-flake8:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.8'

- name: Check compliance with pep8, pyflakes and circular complexity
run: |
pip install --upgrade pip
pip install flake8
./run-tests.sh --check-flake8
lint-commitlint:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Setup Node
uses: actions/setup-node@v4

- name: Install commitlint
run: |
npm install conventional-changelog-conventionalcommits
npm install commitlint@latest
- name: Check commit message compliance of the recently pushed commit
if: github.event_name == 'push'
run: |
./run-tests.sh --check-commitlint HEAD~1 HEAD
- name: Check commit message compliance of the pull request
if: github.event_name == 'pull_request'
run: |
./run-tests.sh --check-commitlint ${{ github.event.pull_request.head.sha }}~${{ github.event.pull_request.commits }} ${{ github.event.pull_request.head.sha }}
lint-shellcheck:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3

- name: Runs shell script static analysis
run: |
sudo apt-get install shellcheck
./run-tests.sh --check-shellcheck
lint-black:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.8'

- name: Install Python dependencies
run: pip install black

- name: Check Python code formatting
run: ./run-tests.sh --check-black

lint-flake8:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.8'

- name: Check compliance with pep8, pyflakes and circular complexity
run: |
pip install --upgrade pip
pip install flake8
./run-tests.sh --check-flake8
lint-pydocstyle:
runs-on: ubuntu-20.04
Expand Down Expand Up @@ -85,40 +111,40 @@ jobs:
run: ./run-tests.sh --check-manifest

docs-cli-commands:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.8'

- name: Install Python dependencies
run: |
pip install --upgrade pip setuptools py
pip install -e .[all]
- name: Install Python dependencies
run: |
pip install --upgrade pip setuptools py
pip install -e .[all]
- name: Verify reana client commands list
run: ./run-tests.sh --check-cli-cmds
- name: Verify reana client commands list
run: ./run-tests.sh --check-cli-cmds

docs-cli-api:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.8'

- name: Install Python dependencies
run: |
pip install --upgrade pip setuptools py
pip install -e .[all]
- name: Install Python dependencies
run: |
pip install --upgrade pip setuptools py
pip install -e .[all]
- name: Verify reana client api docs
run: ./run-tests.sh --check-cli-api
- name: Verify reana client api docs
run: ./run-tests.sh --check-cli-api

docs-sphinx:
runs-on: ubuntu-20.04
Expand All @@ -139,51 +165,51 @@ jobs:
run: ./run-tests.sh --check-sphinx

python-tests:
runs-on: ubuntu-20.04
strategy:
matrix:
include:
- testenv: lowest
python: '3.6'
runs-on: ubuntu-20.04
strategy:
matrix:
include:
- testenv: lowest
python: '3.6'

- testenv: release
python: '3.6'
- testenv: release
python: '3.6'

- testenv: lowest
python: '3.7'
- testenv: lowest
python: '3.7'

- testenv: release
python: '3.7'
- testenv: release
python: '3.7'

- testenv: lowest
python: '3.8'
- testenv: lowest
python: '3.8'

- testenv: release
python: '3.8'
- testenv: release
python: '3.8'

- testenv: lowest
python: '3.9'
- testenv: lowest
python: '3.9'

- testenv: release
python: '3.9'
- testenv: release
python: '3.9'

- testenv: lowest
python: '3.10'
- testenv: lowest
python: '3.10'

- testenv: release
python: '3.10'
- testenv: release
python: '3.10'

- testenv: lowest
python: '3.11'
- testenv: lowest
python: '3.11'

- testenv: release
python: '3.11'
- testenv: release
python: '3.11'

- testenv: lowest
python: '3.12'
- testenv: lowest
python: '3.12'

- testenv: release
python: '3.12'
- testenv: release
python: '3.12'
steps:
- uses: actions/checkout@v3

Expand All @@ -198,10 +224,10 @@ jobs:
pip install wheel
pip install requirements-builder
if [[ ${{ matrix.testenv }} == lowest ]]; then
requirements-builder -e all --level=min --req requirements-dev.txt setup.py > .lowest-requirements.txt
requirements-builder -e all --level=min --req requirements-dev.txt setup.py > .lowest-requirements.txt
fi
if [[ ${{ matrix.testenv }} == release ]]; then
requirements-builder -e all --level=pypi --req requirements-dev.txt setup.py > .release-requirements.txt
requirements-builder -e all --level=pypi --req requirements-dev.txt setup.py > .release-requirements.txt
fi
- name: Install Python dependencies
Expand Down
60 changes: 37 additions & 23 deletions run-tests.sh
Original file line number Diff line number Diff line change
@@ -1,22 +1,36 @@
#!/bin/bash
#!/usr/bin/env bash
#
# This file is part of REANA.
# Copyright (C) 2017, 2018, 2019, 2020, 2022 CERN.
# Copyright (C) 2017, 2018, 2019, 2020, 2022, 2024 CERN.
#
# REANA is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.

# Quit on errors
set -o errexit

# Quit on unbound symbols
set -o nounset


check_script () {
check_shellcheck () {
shellcheck run-tests.sh
}

check_commitlint () {
from=${2:-master}
to=${3:-HEAD}
npx commitlint --from="$from" --to="$to" --verbose
found=0
while IFS= read -r line; do
if echo "$line" | grep -qP "\(\#[0-9]+\)$"; then
echo "✔ PR number present in $line"
else
echo "✖ PR number missing in $line"
found=1
fi
done < <(git log "$from..$to" --format="%s")
if [ $found -gt 0 ]; then
exit 1
fi
}

check_black () {
black --check .
}
Expand Down Expand Up @@ -57,7 +71,8 @@ check_pytest () {
}

check_all() {
check_script
check_commitlint
check_shellcheck
check_black
check_flake8
check_pydocstyle
Expand All @@ -73,18 +88,17 @@ if [ $# -eq 0 ]; then
exit 0
fi

for arg in "$@"
do
case $arg in
--check-shellscript) check_script;;
--check-black) check_black;;
--check-flake8) check_flake8;;
--check-pydocstyle) check_pydocstyle;;
--check-manifest) check_manifest;;
--check-cli-cmds) check_cli_cmds;;
--check-cli-api) check_cli_api;;
--check-sphinx) check_sphinx;;
--check-pytest) check_pytest;;
*)
esac
done
arg="$1"
case $arg in
--check-commitlint) check_commitlint "$@";;
--check-shellcheck) check_shellcheck;;
--check-black) check_black;;
--check-flake8) check_flake8;;
--check-pydocstyle) check_pydocstyle;;
--check-manifest) check_manifest;;
--check-cli-cmds) check_cli_cmds;;
--check-cli-api) check_cli_api;;
--check-sphinx) check_sphinx;;
--check-pytest) check_pytest;;
*) echo "[ERROR] Invalid argument '$arg'. Exiting." && exit 1;;
esac

0 comments on commit 1876da1

Please sign in to comment.