From f884d5b308fe8ef54837dd974c895e0b40ac640f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Thu, 5 Dec 2024 14:59:35 +0100 Subject: [PATCH] chore(ci): enforce conventional commits syntax in PR titles (#2911) * chore(ci): enforce conventional commits syntax in PR titles * chore: more explicit config and docs about the conventions --- .github/workflows/conventions.yml | 49 +++++++++++++++++++++++++++++++ docs/contributing.md | 5 ++++ 2 files changed, 54 insertions(+) create mode 100644 .github/workflows/conventions.yml diff --git a/.github/workflows/conventions.yml b/.github/workflows/conventions.yml new file mode 100644 index 0000000000..9821e904c8 --- /dev/null +++ b/.github/workflows/conventions.yml @@ -0,0 +1,49 @@ +name: "Enforce conventions" + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + - reopened + +permissions: + pull-requests: read + +jobs: + lint-pr: + name: Validate PR title follows Conventional Commits + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@0723387faaf9b38adef4775cd42cfd5155ed6017 # v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + # We may not need a scope on every commit (i.e. repo-level change). + # + # feat(redis): support for clustering + # chore(redis): update tests + # fix(redis): trim connection string + # ^ ^ ^ + # | | |__ Subject + # | |_______ Scope + # |____________ Type + requireScope: false + # Scope should be lowercase. + disallowScopes: | + [A-Z]+ + # ensures the subject doesn't start with an uppercase character. + subjectPattern: ^(?![A-Z]).+$ + subjectPatternError: | + The subject "{subject}" found in the pull request title "{title}" + didn't match the configured pattern. Please ensure that the subject + doesn't start with an uppercase character. + types: | + break + fix + feat + bug + docs + chore + deps diff --git a/docs/contributing.md b/docs/contributing.md index 13364b6c83..617b724b11 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -29,6 +29,11 @@ Please just be sure to: * follow the style, naming and structure conventions of the rest of the project. * make commits atomic and easy to merge. * use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) for the PR title. This will help us to understand the nature of the changes, and to generate the changelog after all the commits in the PR are squashed. + +!!!important + There is a GitHub Actions workflow that will check if your PR title follows the conventional commits convention. If not, it contributes a failed check to your PR. + To know more about the conventions, please refer to the [workflow file](https://github.com/testcontainers/testcontainers-go/blob/main/.github/workflows/conventions.yml). + * use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) for your commit messages, as it improves the readability of the commit history, and the review process. * unless necessary, please try to **avoid pushing --force** to the published branch you submitted a PR from, as it makes it harder to review the changes from a given previous state. * apply format running `make lint-all`. It will run `golangci-lint` for the core and modules with the configuration set in the root directory of the project. Please be aware that the lint stage on CI could fail if this is not done.