diff --git a/.drone.yml b/.drone.yml index 7a60a45eb..37631c3e0 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,23 +1,23 @@ pipeline: compile: - image: nextcloudci/android:android-33 + image: nextcloudci/android:android-35 commands: # build app and assemble APK - - sh -c "if [ '${FLAVOR}' != 'Lint' ]; then ./gradlew assemble${FLAVOR}; fi" + - sh -c "if [ '${FLAVOR}' != 'Analysis' ]; then ./gradlew assemble${FLAVOR}; fi" when: matrix: FLAVOR: [Generic, Gplay] - lint: - image: nextcloudci/android:android-33 + analysis: + image: nextcloudci/android:android-37 commands: - - export BRANCH=$(scripts/lint/getBranchName.sh $GIT_USERNAME $GIT_TOKEN $DRONE_PULL_REQUEST) - - scripts/lint/lint-up-wrapper.sh $GIT_USERNAME $GIT_TOKEN $BRANCH $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER + - export BRANCH=$(scripts/analysis/getBranchName.sh $GIT_USERNAME $GIT_TOKEN $DRONE_PULL_REQUEST) + - scripts/analysis/analysis-wrapper.sh $GIT_USERNAME $GIT_TOKEN $BRANCH $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER $DRONE_PULL_REQUEST secrets: [ GIT_USERNAME, GIT_TOKEN, LOG_USERNAME, LOG_PASSWORD ] when: matrix: - FLAVOR: Lint - + FLAVOR: Analysis + notify: image: drillster/drone-email host: $EMAIL_HOST @@ -37,6 +37,6 @@ matrix: FLAVOR: - Generic - Gplay - - Lint + - Analysis branches: master diff --git a/app/build.gradle b/app/build.gradle index a32c4b5b5..2f0eb61ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,9 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'findbugs' -if (getGradle().getStartParameter().getTaskRequests().toString().contains("Gplay")){ +def taskRequest = getGradle().getStartParameter().getTaskRequests().toString() +if (taskRequest.contains("Gplay") || taskRequest.contains("findbugs") || taskRequest.contains("lint")) { apply from: 'gplay.gradle' } @@ -62,6 +64,27 @@ android { htmlOutput file("$project.buildDir/reports/lint/lint.html") disable 'MissingTranslation' } + + task findbugs(type: FindBugs) { + ignoreFailures = false + effort = "max" + reportLevel = "medium" + classes = fileTree("$project.buildDir/intermediates/classes/gplay/debug/com/nextcloud") + excludeFilter = file("${project.rootDir}/findbugs-filter.xml") + source = fileTree('src/main/java') + pluginClasspath = project.configurations.findbugsPlugins + classpath = files() + include '**/*.java' + exclude '**/gen/**' + + reports { + xml.enabled = false + html.enabled = true + html { + destination = file("$project.buildDir/reports/findbugs/findbugs.html") + } + } + } } ext { @@ -174,4 +197,7 @@ dependencies { androidTestImplementation ('com.android.support.test.espresso:espresso-core:3.0.1', { exclude group: 'com.android.support', module: 'support-annotations' }) + + findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.4.4' + findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.2' } diff --git a/findbugs-filter.xml b/findbugs-filter.xml new file mode 100644 index 000000000..e5f385eee --- /dev/null +++ b/findbugs-filter.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/scripts/analysis/analysis-wrapper.sh b/scripts/analysis/analysis-wrapper.sh new file mode 100755 index 000000000..bf2b6b324 --- /dev/null +++ b/scripts/analysis/analysis-wrapper.sh @@ -0,0 +1,80 @@ +#!/bin/sh + +#1: GIT_USERNAME +#2: GIT_TOKEN +#3: BRANCH +#4: LOG_USERNAME +#5: LOG_PASSWORD +#6: DRONE_BUILD_NUMBER +#7: PULL_REQUEST_NUMBER + +echo "1: " $1 +echo "2: " $2 +echo "3: " $3 +echo "4: " $4 +echo "5: " $5 +echo "6: " $6 +echo "7: " $7 + +exit 1 + +ruby scripts/analysis/lint-up.rb $1 $2 $3 +lintValue=$? + + + +./gradlew assemble app:findbugs + +# exit codes: +# 0: count was reduced +# 1: count was increased +# 2: count stayed the same + +echo "Branch: $3" + +if [ $3 = "master" ]; then + echo "New findbugs result for master at: https://www.kaminsky.me/nc-dev/talk-findbugs/master.html" + curl -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/talk-findbugs/master.html --upload-file build/reports/findbugs/findbugs.html + + summary=$(sed -n "/

Summary<\/h1>/,/

Warnings<\/h1>/p" build/reports/findbugs/findbugs.html | head -n-1 | sed s'/<\/a>//'g | sed s'///'g | sed s'/Summary/FindBugs (master)/' | tr "\"" "\'" | tr -d "\r\n") + curl -u $4:$5 -X PUT -d "$summary" https://nextcloud.kaminsky.me/remote.php/webdav/talk-findbugs/findbugs.html + + if [ $lintValue -ne 1 ]; then + echo "New lint result for master at: https://www.kaminsky.me/nc-dev/talk-lint/master.html" + curl -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/talk-droneLogs/master.html --upload-file build/reports/lint/lint.html + exit 0 + fi +else + if [ -e $6 ]; then + 6="master-"$(date +%F) + fi + echo "New lint results at https://www.kaminsky.me/nc-dev/talk-lint/$6.html" + curl 2>/dev/null -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/talk-droneLogs/$6.html --upload-file build/reports/lint/lint.html + + echo "New findbugs results at https://www.kaminsky.me/nc-dev/talk-findbugs/$6.html" + curl 2>/dev/null -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/talk-findbugs/$6.html --upload-file build/reports/findbugs/findbugs.html + + # delete all old comments + oldComments=$(curl 2>/dev/null -u $1:$2 -X GET https://api.github.com/repos/nextcloud/talk-android/issues/$7/comments | jq '.[] | (.id |tostring) + "|" + (.user.login | test("nextcloud-android-bot") | tostring) ' | grep true | tr -d "\"" | cut -f1 -d"|") + + echo $oldComments | while read comment ; do + curl 2>/dev/null -u $1:$2 -X DELETE https://api.github.com/repos/nextcloud/talk-android/issues/comments/$comment + done + + # add comment with results + lintResultNew=$(grep "Lint Report.* [0-9]* warnings" build/reports/lint/lint.html | cut -f2 -d':' |cut -f1 -d'<') + lintErrorNew=$(echo $lintResultNew | grep "[0-9]* error" -o | cut -f1 -d" ") + lintWarningNew=$(echo $lintResultNew | grep "[0-9]* warning" -o | cut -f1 -d" ") + lintErrorOld=$(grep "[0-9]* error" scripts/analysis/lint-results.txt -o | cut -f1 -d" ") + lintWarningOld=$(grep "[0-9]* warning" scripts/analysis/lint-results.txt -o | cut -f1 -d" ") + lintResult="

Lint

TypeMasterPR
Warnings"$lintWarningOld""$lintWarningNew"
Errors"$lintErrorOld""$lintErrorNew"
" + findbugsResultNew=$(sed -n "/

Summary<\/h1>/,/

Warnings<\/h1>/p" build/reports/findbugs/findbugs.html |head -n-1 | sed s'/<\/a>//'g | sed s'///'g | sed s"#Summary#FindBugs (new)#" | tr "\"" "\'" | tr -d "\n") + findbugsResultOld=$(curl 2>/dev/null https://nextcloud.kaminsky.me/index.php/s/YCD729NgcMAYkJT/download | tr "\"" "\'" | tr -d "\r\n" | sed s'#FindBugs#FindBugs#'| tr "\"" "\'" | tr -d "\n") + curl -u $1:$2 -X POST https://api.github.com/repos/nextcloud/talk-android/issues/$7/comments -d "{ \"body\" : \"$lintResult $findbugsResultNew $findbugsResultOld \" }" + + if [ $lintValue -eq 2 ]; then + exit 0 + else + exit $lintValue + fi +fi diff --git a/scripts/lint/getBranchName.sh b/scripts/analysis/getBranchName.sh similarity index 100% rename from scripts/lint/getBranchName.sh rename to scripts/analysis/getBranchName.sh diff --git a/scripts/analysis/lint-results.txt b/scripts/analysis/lint-results.txt new file mode 100644 index 000000000..9a13c695d --- /dev/null +++ b/scripts/analysis/lint-results.txt @@ -0,0 +1,2 @@ +DO NOT TOUCH; GENERATED BY DRONE + Lint Report: 91 warnings diff --git a/scripts/lint/lint-up.rb b/scripts/analysis/lint-up.rb similarity index 98% rename from scripts/lint/lint-up.rb rename to scripts/analysis/lint-up.rb index 1d02185be..ad8c8b81c 100644 --- a/scripts/lint/lint-up.rb +++ b/scripts/analysis/lint-up.rb @@ -21,7 +21,7 @@ TRAVIS_GIT_USERNAME = String.new("Drone CI server") LINT_REPORT_FILE = String.new("app/build/reports/lint/lint.html") # File name and relative path of previous results of this script. -PREVIOUS_LINT_RESULTS_FILE=String.new("scripts/lint/lint-results.txt") +PREVIOUS_LINT_RESULTS_FILE=String.new("scripts/analysis/lint-results.txt") # Flag to evaluate warnings. true = check warnings; false = ignore warnings CHECK_WARNINGS = true @@ -56,7 +56,7 @@ end # run Lint puts "running Lint..." -system './gradlew clean assembleGplay lint' +system './gradlew clean assemble lint' # confirm that Lint ran w/out error result = $?.to_i diff --git a/scripts/lint/lint-results.txt b/scripts/lint/lint-results.txt deleted file mode 100644 index 24702d5bc..000000000 --- a/scripts/lint/lint-results.txt +++ /dev/null @@ -1,2 +0,0 @@ -DO NOT TOUCH; GENERATED BY DRONE - Lint Report: 88 warnings diff --git a/scripts/lint/lint-up-wrapper.sh b/scripts/lint/lint-up-wrapper.sh deleted file mode 100755 index b4efc0687..000000000 --- a/scripts/lint/lint-up-wrapper.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh - -#1: GIT_USERNAME -#2: GIT_TOKEN -#3: BRANCH -#4: LOG_USERNAME -#5: LOG_PASSWORD -#6: DRONE_BUILD_NUMBER - -ruby scripts/lint/lint-up.rb $1 $2 $3 -returnValue=$? - -# exit codes: -# 0: count was reduced -# 1: count was increased -# 2: count stayed the same - -echo "Branch: $3" - -if [ $3 = "master" -a $returnValue -ne 1 ]; then - echo "New master at: https://nextcloud.kaminsky.me/index.php/s/fyxdQjc7LCiy57C" - curl -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/talk-droneLogs/master.html --upload-file app/build/reports/lint/lint.html - exit 0 -else - if [ -e $6 ]; then - 6="master-"$(date +%F) - fi - echo "New results at https://nextcloud.kaminsky.me/index.php/s/fyxdQjc7LCiy57C ->" $6.html - curl -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/talk-droneLogs/$6.html --upload-file app/build/reports/lint/lint.html - - if [ $returnValue -eq 2 ]; then - exit 0 - else - exit $returnValue - fi -fi