Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Janos Gyerik
November 23, 2016

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

Janos Gyerik

November 23, 2016
Tweet

More Decks by Janos Gyerik

Other Decks in Technology

Transcript

  1. ANALYZE YOUR CHANGESET IN
    A BRANCH BEFORE GIT PUSH
    WITH SONARLINT + GIT HOOKS
    https://speakerdeck.com/janosgyerik/sonarlint-before-git-push

    View full-size slide

  2. Let’s talk about SonarTech…
    (aka sonar-github)
    SonarTech

    View full-size slide

  3. You think you coded a great branch…
    You think “there should be no more issues”…
    … sorry bud, you thought wrong!

    View full-size slide

  4. Delay to generate comments
    git push fixes -> more delays ->
    -> more issues -> git push fixes ->

    View full-size slide

  5. Don’t get me wrong
    This is absolutely necessary
    But would you push a branch if you
    *knew* it has 10+ issues? (-> no)

    View full-size slide

  6. Let’s talk about

    View full-size slide

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

    View full-size slide

  8. Example
    * Open SonarLint view
    * Build gets broken
    * (SonarLint view gone…)

    View full-size slide

  9. build broken

    View full-size slide

  10. Example
    * Open SonarLint view
    * Run unit tests
    * (SonarLint view gone…)

    View full-size slide

  11. run unit tests

    View full-size slide

  12. 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

    View full-size slide

  13. + =
    cli hooks

    View full-size slide

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

    View full-size slide

  15. $ 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

    View full-size slide

  16. Let’s see it in action

    View full-size slide

  17. $ 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 '[email protected]:janosgyerik/java-maven-simple.git'
    (push rejected if issues exist)

    View full-size slide

  18. $ 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 [email protected]:janosgyerik/java-maven-simple.git
    * [new branch] HEAD -> demo
    (no issues -> push OK)

    View full-size slide

  19. 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

    View full-size slide

  20. https://github.com/janosgyerik/sonarlint-git-hooks/issues
    Problems? Ideas? Feature requests?

    View full-size slide