2

I just updated my gradle from version 2.2 to latest one 2.8. I didn't have any issue with findbugs on version 2.2.

I'm working on an Android project that contains two modules. In order to use find bugs in both modules I have following configuration on main build.gradle file of root directory.

configure(allprojects) {
    apply plugin: 'findbugs'

    task findbugs(type: FindBugs) {
        ignoreFailures = false
        effort = "max"

        classes = fileTree('build/intermediates/classes/')
        source = fileTree('src/main/java')
        classpath = files()

        excludeFilter = file("exclude.xml")

        reportLevel = "high"
        reports {
            xml.enabled = false
            html.enabled = true
        }
    }
}

When I run ./gradlew findbugs on my local machine everything is fine and build is successful however when I push my PR to Github and Trivis tries to build then I get error:

:findbugs UP-TO-DATE
:passenger-app:findbugs
:passenger-sdk:findbugs FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':passenger-sdk:findbugs'.
> FindBugs rule violations were found. See the report at: file:///home/travis/build/project-name/passenger-android/passenger-sdk/build/reports/findbugs/findbugs.html

I'm really confused why I have no problem on my local machine while Travis shows error! I tried to print out the contents findbugs.html on Travis but I got permission denied :(

I'm using java 1.8 while Travis is using 1.7. Does problem relates to this? Thanks


Update:

In order to print the contents of findbugs.html on Trivis I created a print_findbugs.sh and this is its contents.

#!/usr/bin/env bash

echo '**********************'
echo '*** Print Findbugs ***'
echo '**********************'
echo file:///home/travis/build/company/passenger-android/passenger-sdk/build/reports/findbugs/findbugs.html

Then I set sudo true in my .travis.yml file. What I have in this file.

sudo: true
language: android
android:
  components:
    - build-tools-23.0.1
    - android-23
    - extra-android-support
    - extra-google-google_play_services
    - extra-google-m2repository
    - extra-android-m2repository

env:
  global:
// some settings are there


before_cache:
  # Delete the gradle lock file which forces creation of a new build cache
  - rm ~/.gradle/caches/modules-2/modules-2.lock

cache:
  directories:
  - ~/.gradle

before_script:
  # Overwrite the keystore if it is a pull request
  - ./before_script.sh

script:
  # Override Travis default script to not run connectedCheck until this bug is fixed:
  # https://code.google.com/p/android/issues/detail?id=59592
  - ./gradlew clean build findbugs -PdisablePreDex
  - ./print_findbugs.sh

before_deploy:
  # Clean up the output folder
  # Link up the new builds into individual html files
  - ./before_deploy.sh

after_deploy:
  # Upload to...

and finally my travis prints:

:findbugs UP-TO-DATE
:passenger-app:findbugs
:passenger-sdk:findbugs
FindBugs rule violations were found. See the report at: file:///home/travis/build/company/passenger-android/passenger-sdk/build/reports/findbugs/findbugs.html
BUILD SUCCESSFUL
Total time: 8 mins 9.966 secs
The command "./gradlew clean build findbugs -PdisablePreDex" exited with 0.
 $ ./print_findbugs.sh
/home/travis/build.sh: line 41: ./print_findbugs.sh: Permission denied
The command "./print_findbugs.sh" exited with 126.
before_cache
$ rm ~/.gradle/caches/modules-2/modules-2.lock
cache.2
Done. Your build exited with 1.
Hesam
  • 52,260
  • 74
  • 224
  • 365
  • I don't know the reason but I can try to assist you to print the report. Permission denied? Expand this please sharing the command you used. Do you use sudo: false? Could you share your travis.yml? – albodelu Oct 26 '15 at 22:11

3 Answers3

2

I don't use it and I need more information about the permission denied.

Html reports

In the past, I printed html reports using Travis-ci, point 5 here. I downloaded lynx using apt-get (it's not possible now using container-infrastructure and sudo: false) and converted and printed the reports.

before_script:   
  # - echo 'LOGCAT'   
  # Check logcat debug output: http://developer.android.com/tools/help/logcat.html
  # Check debugging log: http://developer.android.com/tools/debugging/debugging-log.html
  # Comment the lines belows to debug output and redirect it to a file. Custom tags for your app.
  - adb -e logcat *:W | tee logcat.log > /dev/null 2>&1 &

after_failure:
  # - echo 'FAILURE'
  # Check apt configuration: http://docs.travis-ci.com/user/ci-environment/#apt-configuration
  # Comment out the lines below to show log about tests with app name customized on exports section.
  - sudo apt-get install -qq lynx
  - export MOD_NAME=yourappmodulename
  - export LOG_DIR=${TRAVIS_BUILD_DIR}/${MOD_NAME}/build/outputs/reports/androidTests/connected/
  - lynx --dump ${LOG_DIR}com.android.builder.testing.ConnectedDevice.html > myConnectedDevice.log
  - lynx --dump ${LOG_DIR}com.android.builder.testing.html > myTesting.log
  - for file in *.log; do echo "$file"; echo "====================="; cat "$file"; done || true

Xml reports

Can be used in both, legacy and container based infrastructure.

I read you can enable xml reports like this:

    reports {
        xml.enabled = true
        html.enabled = true
    }

You can easily print xml reports on Travis-ci using cat like here:

  - cat ${TRAVIS_BUILD_DIR}/ui/espresso/*/app/build/outputs/androidTest-results/connected/* # logs

Adding * will include all the subfolders at this point.

You need to first find locally the folder for the xml reports, in my case is not the same folder than html, and add to your travis.yml file something like this:

after_failure:
  - cat /home/travis/build/*/passenger-android/passenger-sdk/build/reports/findbugs/*

This doesn't solve your issue but perhaps helps to find reason.

Update:

I suggest you to try to use cat and the xml version without the script first.

A good explanation about the permission issue here and how to solve it making the file executable:

before_script:
 - chmod +x yourscript

Update 2:

A better approach to fix the permission denied issue explained here.

Use this and commit the changes:

git update-index --chmod=+x yourscript
Community
  • 1
  • 1
albodelu
  • 7,931
  • 7
  • 41
  • 84
  • You are them man @Ardock. `cat` really helped me to at-least see something. Thanks for sharing your knowledge... – Hesam Oct 27 '15 at 00:27
  • You are welcome, try to enable and use the xml version and share the report, perhaps anyone knows the reason then :) – albodelu Oct 27 '15 at 00:36
  • Seems they are normal problems that Findbugs shows normally such as that variable must be `final` and etc. So, the question is why my local Findbugs passes the tests while Findbugs on travis fails. hmmm – Hesam Oct 27 '15 at 00:46
  • I don't know, I don't use findbugs, I see you can tune it (ignore failures and the report level) and the unique difference that i find is that you are not predexing on the buid server and you predex locally. – albodelu Oct 27 '15 at 00:51
  • Try one time without -PdisablePreDex on travis-ci https://code.google.com/p/android/issues/detail?id=186246 or try to run it on the command line like you run it on travis, not using android studio: ./gradlew clean build findbugs -PdisablePreDex – albodelu Oct 27 '15 at 01:09
0

Finally I was able to get everything passed.

I first used following command rather than simple $ ./gradlew findbugs.

./gradlew clean aGD findbugs -PdisablePreDex

aGD is abbreviation of my task something like assembleDebug.

I could see a lot of complains by gradle. Probably Travis was showing this (afterDebug) but since it prints html page in console is not human readable. So I added filters into Findbug's exclude file (ref) in order to pass Findbugs check.

I was successful! Once I pushed my code, Travis failed again.

But since I printed out Findbug's output on Travis and there was only an issue I could find it in my code and Fix it. After that Travis didn't failed and passed my PR.

So the problem is still exist unfortunately. I can get Findbugs passed on my local project while Travis sometimes finds more issues. I'm suspicious that Travis is able to load recent versions of Findbugs but mine isn't able, due to cache things. But yes, this is my assumption!

halfer
  • 19,824
  • 17
  • 99
  • 186
Hesam
  • 52,260
  • 74
  • 224
  • 365
  • 1
    I'm glad that you solved your issue, and if you need the script in the future I confirm chmod +x works like here https://travis-ci.org/ardock/android-topeka/builds/89435822 – albodelu Nov 05 '15 at 13:34
0

In my case, ignoreFailures was true, but nevertheless the findbugs task was failing after upgrading gradle because build.gradle was depending on findbugs:annotations:3.0.0 instead of findbugs:findbugs-annotations:3.0.1. (Note: annotations vs. findbugs-annotations, which is a new artifact.

Joe Bowbeer
  • 3,574
  • 3
  • 36
  • 47