diff --git a/.github/workflows/conventional-commits.yml b/.github/workflows/conventional-commits.yml new file mode 100644 index 0000000..65f8567 --- /dev/null +++ b/.github/workflows/conventional-commits.yml @@ -0,0 +1,22 @@ +name: Conventional Commits + +on: pull_request + +env: + # Forcing Earthly to use colours, to make reading output easier. + FORCE_COLOR: 1 + +jobs: + linting: + name: Linting + runs-on: ubuntu-latest + steps: + - name: Download Earthly v0.8.1. + run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.8.1/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'" + - name: Checkout code. + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + - name: Check Conventional Commits linting. + run: earthly --ci +check-conventional-commits-linting --from_reference "origin/${{ github.base_ref }}" diff --git a/Earthfile b/Earthfile index bd666d2..1400f40 100644 --- a/Earthfile +++ b/Earthfile @@ -25,6 +25,14 @@ check-clean-git-history: RUN ./ci/check-clean-git-history.sh --from-reference "${from_reference}" +check-conventional-commits-linting: + FROM +rust-base + RUN cargo install conventional_commits_linter --version 0.12.3 + DO +COPY_METADATA + ARG from_reference="origin/HEAD" + RUN ./ci/check-conventional-commits-linting.sh --from-reference "${from_reference}" + + golang-base: FROM golang:1.20.4 ENV GOPROXY=direct diff --git a/ci/check-conventional-commits-linting.sh b/ci/check-conventional-commits-linting.sh new file mode 100755 index 0000000..c028a35 --- /dev/null +++ b/ci/check-conventional-commits-linting.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +# ARG_OPTIONAL_SINGLE([from-reference],[],[],[origin/HEAD]) +# ARGBASH_GO() +# needed because of Argbash --> m4_ignore([ +### START OF CODE GENERATED BY Argbash v2.9.0 one line above ### +# Argbash is a bash code generator used to get arguments parsing right. +# Argbash is FREE SOFTWARE, see https://argbash.io for more info +# Generated online by https://argbash.io/generate + +die() { + local _ret="${2:-1}" + test "${_PRINT_HELP:-no}" = yes && print_help >&2 + echo "$1" >&2 + exit "${_ret}" +} + +begins_with_short_option() { + local first_option all_short_options='' + first_option="${1:0:1}" + test "$all_short_options" = "${all_short_options/$first_option/}" && return 1 || return 0 +} + +# THE DEFAULTS INITIALIZATION - OPTIONALS +_arg_from_reference="origin/HEAD" + +print_help() { + printf 'Usage: %s [--from-reference ]\n' "$0" +} + +parse_commandline() { + while test $# -gt 0; do + _key="$1" + case "$_key" in + --from-reference) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_from_reference="$2" + shift + ;; + --from-reference=*) + _arg_from_reference="${_key##--from-reference=}" + ;; + *) + _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1 + ;; + esac + shift + done +} + +parse_commandline "$@" + +# OTHER STUFF GENERATED BY Argbash + +### END OF CODE GENERATED BY Argbash (sortof) ### ]) +# [ <-- needed because of Argbash +set -o errexit +set -o xtrace + +"${CARGO_HOME}/bin/conventional_commits_linter" --from-reference "${_arg_from_reference}" --allow-angular-type-only +# ] <-- needed because of Argbash