Analyze your changeset in a branch before git push using SonarLint + Git hooks

32ef4e3e388cbadc756a008cade3ee6a?s=47 Janos Gyerik
November 23, 2016

Analyze your changeset in a branch before git push using SonarLint + Git hooks

32ef4e3e388cbadc756a008cade3ee6a?s=128

Janos Gyerik

November 23, 2016
Tweet

Transcript

  1. ANALYZE YOUR CHANGESET IN A BRANCH BEFORE GIT PUSH WITH

    SONARLINT + GIT HOOKS https://speakerdeck.com/janosgyerik/sonarlint-before-git-push
  2. Let’s talk about SonarTech… (aka sonar-github) SonarTech

  3. SonarTech

  4. SonarTech

  5. SonarTech

  6. SonarTech

  7. None
  8. You think you coded a great branch… You think “there

    should be no more issues”… … sorry bud, you thought wrong!
  9. Delay to generate comments git push fixes -> more delays

    -> -> more issues -> git push fixes ->
  10. Don’t get me wrong This is absolutely necessary But would

    you push a branch if you *knew* it has 10+ issues? (-> no)
  11. Let’s talk about

  12. SonarLint helps, but you have to look… …it’s harder than

    it sounds
  13. Example * Open SonarLint view * Build gets broken *

    (SonarLint view gone…)
  14. build broken

  15. Example * Open SonarLint view * Run unit tests *

    (SonarLint view gone…)
  16. run unit tests

  17. SonarLint can help, but you have to look! Sooner or

    later you cannot help and lose sight of the SonarLint view, and SonarLint just cannot force you to look, not all the time, that’s just the way it is
  18. + = cli hooks

  19. $ sonarlint --src path/to/file1 --tests path/to/file2

  20. $ ls -1 .git/hooks/ applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit.sample pre-push.sample

    pre-rebase.sample prepare-commit-msg.sample update.sample
  21. Let’s see it in action

  22. $ git push origin HEAD info: source files to analyze:

    info: src/main/java/example/HelloWorld.java info: src/main/java/example/Two.java info: analyzing... ------------- SonarLint Report ------------- 3 issues (2 files analyzed) 2 major 1 info ------------------------------------------- INFO: SonarLint HTML Report generated: /Users/janos/dev/git/github/java-maven-simple/.sonarlint/ sonarlint-report.html fatal: hook abort: some analyses have failed error: failed to push some refs to 'git@github.com:janosgyerik/java-maven-simple.git' (push rejected if issues exist)
  23. $ git push origin HEAD info: source files to analyze:

    info: src/main/java/example/HelloWorld.java info: src/main/java/example/Two.java info: analyzing... ------------- SonarLint Report ------------- No issues to display (2 files analyzed) ------------------------------------------- INFO: SonarLint HTML Report generated: /Users/janos/dev/git/github/java-maven-simple/.sonarlint/sonarlint- report.html Counting objects: 42, done. Delta compression using up to 8 threads. Compressing objects: 100% (24/24), done. Writing objects: 100% (42/42), 2.84 KiB | 0 bytes/s, done. Total 42 (delta 11), reused 0 (delta 0) remote: Resolving deltas: 100% (11/11), completed with 2 local objects. To git@github.com:janosgyerik/java-maven-simple.git * [new branch] HEAD -> demo (no issues -> push OK)
  24. git clone https://github.com/janosgyerik/sonarlint-git-hooks cd sonarlint-git-hooks ./get-and-setup-sonarlint.sh hooks=$PWD cd /path/to/your/project $hooks/install.sh

    cd /path/to/another/project $hooks/install.sh
  25. https://github.com/janosgyerik/sonarlint-git-hooks/issues Problems? Ideas? Feature requests?