Last active
November 7, 2024 20:06
-
-
Save KenVanHoeylandt/c7a928426bce83ffab400ab1fd99054a to your computer and use it in GitHub Desktop.
Gradle auto-installing pre-commit hook
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apply from: rootProject.file('gradle/install-git-hooks.gradle') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
task installGitHooks(type: Copy) { | |
from new File(rootProject.rootDir, 'pre-commit') | |
into { new File(rootProject.rootDir, '.git/hooks') } | |
} | |
build.dependsOn installGitHooks |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# From gist at https://gist.github.com/chadmaughan/5889802 | |
# stash any unstaged changes | |
git stash -q --keep-index | |
# run the tests with the gradle wrapper | |
./gradlew test | |
# store the last exit code in a variable | |
RESULT=$? | |
# unstash the unstashed changes | |
git stash pop -q | |
# return the './gradlew test' exit code | |
exit $RESULT |
I'm using the Kotlin DSL Gradle.
while I'm trying the same but whenever I make any push to the repo it doesn't trigger.
tasks.register("installGitHook", Copy::class) { from(file("$rootDir/.githooks")) into(file("$rootDir/.git/hooks")) fileMode = 0b0111101101 // -rwxr-xr-x } tasks.getByPath(":app:preBuild").dependsOn(tasks.named("installGitHook"))
My
pre-push.sh
file is insidegit-hooks
.#!/bin/sh echo "*********************************************************" echo "Running git pre-push hook. Running Static analysis... " echo "*********************************************************" ./gradlew detekt ktlintCheck --daemon status=$? if [ "$status" = 0 ] ; then echo "Static analysis found no problems." exit 0 else echo "*********************************************************" echo " ******************************************** " echo 1>&2 "Static analysis found violations it could not fix." echo "Run ./gradlew ktlintFormat to fix formatting related issues." echo " ******************************************** " echo "*********************************************************" exit 1 fi
Where and what I'm doing wrong?
I'm having the same problem. The hook will run properly once it's installed, but it doesn't get installed from preBuild.
@stackunderflows I resolves this issue by defining a executable task for Installing the same. Please find the attach snippets for the same.
// Tasks for automatically installing git-hooks and making it executable also.
tasks.register("installGitHook", Copy::class) {
from(file("$rootDir/scripts/pre-push"))
into(file("$rootDir/.git/hooks"))
fileMode = 0b0111101101 // -rwxr-xr-x
}
tasks.create(name = "gitExecutableHooks") {
doLast {
Runtime.getRuntime().exec("chmod -R +x .git/hooks/")
}
}
tasks.getByPath("gitExecutableHooks").dependsOn(tasks.named("installGitHook"))
tasks.getByPath(":app:clean").dependsOn(tasks.named("gitExecutableHooks"))
This is working like charm !!
Let me know if you still face any issues while doing this.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm using the Kotlin DSL Gradle.
while I'm trying the same but whenever I make any push to the repo it doesn't trigger.
My
pre-push.sh
file is insidegit-hooks
.Where and what I'm doing wrong?