phpro / grumphp

A PHP code-quality tool
MIT License
4.11k stars 429 forks source link

Auto prepending commit message with JIRA ticket number #1082

Closed delboy1978uk closed 1 year ago

delboy1978uk commented 1 year ago
Q A
Version 1.13
Bug? No
New feature? No
Question? Yes
Documentation? No
Related tickets N/A

I see that we can check commit messages for a JIRA number, and fail if it is not there. :-)

We currently have a prepare message hook which gets the ticket number and alters the commit message so that line 1 contains ABC-1234 :. However, if we quit vim or nano, the commit still goes through since text was already automatically added and so the file had changed and saved. So I thought to then alter the commit message hook, but i see that GrumPHP is controlling that one.

So my question is, is there a way I can create a custom GrumPHP task which will check the commit message and fail if the first line has nothing but the ticket number that was auto-added?

To reproduce, here is my prepare commit message hook, which alters if a branch name is like feature/ABC-1234/some-feature but does nothing if for instance on master

#!/bin/sh
COMMIT_MSG_FILE=$1
branch=$(git branch --show-current)
issue=$(sed -e 's/.*\/\([A-Z]\{3\}-[0-9]\{4\}\)\/.*/\1/' <<< $branch)

if [[ $issue =~ [A-Z]{3}-[0-9]{4} ]]; then
    originalText=$(cat "$COMMIT_MSG_FILE")
    echo "$issue : " > "$COMMIT_MSG_FILE"
    echo "$originalText" >> "$COMMIT_MSG_FILE"
fi
veewee commented 1 year ago

hmm interesting... Wouldn't it be easier to check with regex that something needs to go after that? Like: /ABC-[0-9]+ : (.+)/?

delboy1978uk commented 1 year ago

@veewee thanks for the speedy reply! yes that was my idea, as far as i understand however, the prepare-commit-msg hook above runs before the editor opens and we enter our commit message, the check would have to happen after we save and exit the editor, and so I guess that would be the commit-msg hook, but that's when I noticed that GrumPHP is using that hook. So I'm looking for a way to do that check with GrumPHP if possible

veewee commented 1 year ago

I'm a bit confused by this:

The (grumphp) commit-msg hook triggers the git_commit_message task, meaning you can validate the outcome AFTER saving the file in there.

So by changing the regex /ABC-[0-9]+ : (.+)/ it won't let your commit pass if you don't enter a message after the jira issue number as you expect right? (given the fact it requires a non empty (.+). You could change this to (.{5,}) to specify a minimum or you could force it to contain non-space characters.

delboy1978uk commented 1 year ago

Aha! That's exactly what I needed, I didn't know abut that task! So I can keep my prepend hook and do the commit check from using GrumPHP now. Fantastic! Thanks for your help @veewee