From 145b7e716a784c340e2ecdca5619b3ed97325b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20=C5=A0imko?= Date: Wed, 10 Jan 2024 16:23:08 +0100 Subject: [PATCH 1/2] ci(commitlint): addition of commit message linter (#74) 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. --- .commitlintrc.yaml | 21 ++++++++++++++ .github/workflows/ci.yml | 30 +++++++++++++++++-- run-tests.sh | 62 ++++++++++++++++++++++++---------------- 3 files changed, 87 insertions(+), 26 deletions(-) create mode 100644 .commitlintrc.yaml diff --git a/.commitlintrc.yaml b/.commitlintrc.yaml new file mode 100644 index 0000000..d0b3278 --- /dev/null +++ b/.commitlintrc.yaml @@ -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] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e305f21..c118ec4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,5 +1,5 @@ # This file is part of REANA. -# Copyright (C) 2021, 2022 CERN. +# Copyright (C) 2021, 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. @@ -9,6 +9,32 @@ name: CI on: [push, pull_request] jobs: + 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: @@ -18,7 +44,7 @@ jobs: - name: Runs shell script static analysis run: | sudo apt-get install shellcheck - ./run-tests.sh --check-shellscript + ./run-tests.sh --check-shellcheck lint-black: runs-on: ubuntu-20.04 diff --git a/run-tests.sh b/run-tests.sh index 76b63cd..78fc033 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -1,20 +1,34 @@ -#!/bin/bash +#!/usr/bin/env bash # # This file is part of REANA. -# Copyright (C) 2021, 2023 CERN. +# Copyright (C) 2021, 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. -# Quit on errors set -o errexit - -# Quit on unbound symbols set -o nounset -check_script () { - shellcheck run-tests.sh - shellcheck scripts/magick-wrapper.sh +check_commitlint () { + from=${2:-master} + to=${3:-HEAD} + npx commitlint --from="$from" --to="$to" + found=0 + while IFS= read -r line; do + if echo "$line" | grep -qP "\(\#[0-9]+\)$"; then + true + 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_shellcheck () { + find . -name "*.sh" -exec shellcheck {} \; } check_pydocstyle () { @@ -50,7 +64,8 @@ check_docker_build () { } check_all () { - check_script + check_commitlint + check_shellcheck check_pydocstyle check_black check_flake8 @@ -66,18 +81,17 @@ if [ $# -eq 0 ]; then exit 0 fi -for arg in "$@" -do - case $arg in - --check-shellscript) check_script;; - --check-pydocstyle) check_pydocstyle;; - --check-black) check_black;; - --check-flake8) check_flake8;; - --check-manifest) check_manifest;; - --check-sphinx) check_sphinx;; - --check-pytest) check_pytest;; - --check-dockerfile) check_dockerfile;; - --check-docker-build) check_docker_build;; - *) - esac -done +arg="$1" +case $arg in + --check-commitlint) check_commitlint "$@";; + --check-shellcheck) check_shellcheck;; + --check-pydocstyle) check_pydocstyle;; + --check-black) check_black;; + --check-flake8) check_flake8;; + --check-manifest) check_manifest;; + --check-sphinx) check_sphinx;; + --check-pytest) check_pytest;; + --check-dockerfile) check_dockerfile;; + --check-docker-build) check_docker_build;; + *) echo "[ERROR] Invalid argument '$arg'. Exiting." && exit 1;; +esac From 9b16bd052903be4a8c567b2e71f7b56a601982b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20=C5=A0imko?= Date: Wed, 10 Jan 2024 16:36:54 +0100 Subject: [PATCH 2/2] ci(release-please): initial configuration (#74) --- .github/workflows/release-please.yml | 20 ++++++++++++++++++++ .release-please-config.json | 24 ++++++++++++++++++++++++ .release-please-manifest.json | 3 +++ CHANGELOG.md | 0 LICENSE | 2 +- MANIFEST.in | 13 ++++++++----- 6 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/release-please.yml create mode 100644 .release-please-config.json create mode 100644 .release-please-manifest.json create mode 100644 CHANGELOG.md diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 0000000..253a7a6 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,20 @@ +on: + push: + branches: + - maint-0.9 + - master + +permissions: + contents: write + pull-requests: write + +name: release-please + +jobs: + release-please: + runs-on: ubuntu-latest + steps: + - uses: google-github-actions/release-please-action@v4 + with: + config-file: .release-please-config.json + target-branch: ${{ github.ref_name }} diff --git a/.release-please-config.json b/.release-please-config.json new file mode 100644 index 0000000..a418abc --- /dev/null +++ b/.release-please-config.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "include-v-in-tag": false, + "packages": { + ".": { + "changelog-sections": [ + { "type": "build", "section": "Build", "hidden": false }, + { "type": "feat", "section": "Features", "hidden": false }, + { "type": "fix", "section": "Bug fixes", "hidden": false }, + { "type": "perf", "section": "Performance improvements", "hidden": false }, + { "type": "refactor", "section": "Code refactoring", "hidden": false }, + { "type": "style", "section": "Code style", "hidden": false }, + { "type": "test", "section": "Test suite", "hidden": false }, + { "type": "ci", "section": "Continuous integration", "hidden": false }, + { "type": "docs", "section": "Documentation", "hidden": false }, + { "type": "chore", "section": "Chores", "hidden": true } + ], + "versioning": "always-bump-patch" + } + }, + "pull-request-footer": " ", + "pull-request-header": " ", + "release-type": "python" +} diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..7e08ec6 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "0.9.2" +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE b/LICENSE index ebd747d..46e3fbb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2021, 2022, 2023 CERN. +Copyright (C) 2021, 2022, 2023, 2024 CERN. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/MANIFEST.in b/MANIFEST.in index 3186788..ee2c406 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,17 +1,20 @@ # This file is part of REANA. -# Copyright (C) 2021 CERN. +# Copyright (C) 2021, 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. -include Dockerfile -include .dockerignore -include LICENSE +include *.in +include *.json +include *.md include *.rst include *.sh -include *.in include *.txt +include *.yaml +include .dockerignore include .flake8 +include Dockerfile +include LICENSE include pytest.ini exclude .readthedocs.yaml prune docs/_build