name: lint-commits on: pull_request: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number }} cancel-in-progress: true jobs: checkCommits: name: check commits runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 with: fetch-depth: 0 - name: Get list of commits run: | read PR_BASE PR_TIP < <(curl -L \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ -H "X-GitHub-Api-Version: 2022-11-28" \ ${{ github.event.pull_request.url }} | \ tee /dev/stderr | \ jq -r '"\(.base.sha) \(.head.sha)"' | \ tee /dev/stderr) echo "PR_TIP=${PR_TIP}" >> "${GITHUB_ENV}" echo "PR_BASE=${PR_BASE}" >> "${GITHUB_ENV}" - name: Check commit prefixes run: | if [[ -z "${PR_TIP}" || -z "${PR_BASE}" ]]; then echo "::error title=invalid base and head:: Failed to retrieve base and head for Pull Request" # Fail workflow false fi START_MARKER='sync: Update libbpf submodule' END_MARKER='sync: Pull latest bpftool changes from kernel' declare -a PREFIXES=( "ci" "mirror" ) misformed=0 syncing=0 while read commit ; do valid=1 sha="${commit%% *}" object="${commit#* }" case "${object}" in "${START_MARKER}") syncing=1 ;; "${END_MARKER}") syncing=0 ;; *) if [[ "${syncing}" == 0 ]]; then valid=0 for prefix in "${PREFIXES[@]}"; do if [[ "${object}" =~ ^"${prefix}: " ]]; then valid=1 break fi done fi ;; esac if [[ "${valid}" = 1 ]]; then echo "::notice title=valid prefix::${sha} (\"${object}\") has a valid prefix" else echo "::error title=invalid prefix::${sha} (\"${object}\") does not have a valid prefix" misformed=$((misformed+1)) fi done < <(git log --format='%h %s' --reverse ${{ env.PR_BASE }}..${{ env.PR_TIP }}) echo "::notice ::Found ${misformed} invalid commit object(s)" if [[ "${misformed}" != 0 ]]; then echo "Please ensure all commits not part of kernel sync are prefixed with one of:" echo " ${PREFIXES[@]/%/:}" # Fail workflow false fi