image: registry.gitlab.com/fdroid/ci-images-client:latest cache: paths: - .gradle/wrapper - .gradle/caches stages: - test - deploy before_script: - export GRADLE_USER_HOME=$PWD/.gradle - export ANDROID_COMPILE_SDK=`sed -n 's,.*compileSdkVersion\s*\([0-9][0-9]*\).*,\1,p' app/build.gradle` - alias sdkmanager="sdkmanager --no_https" - echo y | sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" > /dev/null .test-template: &test-template stage: test artifacts: name: "${CI_PROJECT_PATH}_${CI_JOB_STAGE}_${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHA}" paths: - logcat.txt - app/build/reports - app/build/outputs/*ml - app/build/outputs/apk expire_in: 1 week when: on_failure after_script: - echo "Download debug artifacts from https://gitlab.com/${CI_PROJECT_PATH}/-/jobs" # Run the most important first. Then we can decide whether to ignore # the style tests if the rest of the more meaningful tests pass. test_lint_pmd_checkstyle: <<: *test-template script: - export EXITVALUE=0 - ./gradlew assemble # always report on lint errors to the build log - sed -i -e 's,textReport .*,textReport true,' app/build.gradle - ./gradlew testFullDebugUnitTest - ./gradlew lint - ./gradlew pmd || export EXITVALUE=1 - ./gradlew checkstyle || export EXITVALUE=1 - ./tools/check-format-strings.py || export EXITVALUE=1 - ./tools/check-fastlane-whitespace.py || export EXITVALUE=1 - ./tools/remove-unused-and-blank-translations.py || export EXITVALUE=1 - echo "These are unused or blank translations that should be removed:" - git --no-pager diff --ignore-all-space --name-only --exit-code app/src/*/res/values*/strings.xml || export EXITVALUE=1 - exit $EXITVALUE errorprone: stage: test script: - cat config/errorprone.gradle >> app/build.gradle - ./gradlew assembleDebug # once these prove stable, the task should be switched to # connectedCheck to test all the build flavors .connected-template: &connected-template script: - ./gradlew assembleFullDebug - export AVD_SDK=`echo $CI_JOB_NAME | awk '{print $2}'` - export AVD_TAG=`echo $CI_JOB_NAME | awk '{print $3}'` - export AVD_ARCH=`echo $CI_JOB_NAME | awk '{print $4}'` - export AVD_PACKAGE="system-images;android-${AVD_SDK};${AVD_TAG};${AVD_ARCH}" - echo $AVD_PACKAGE - emulator -accel-check || true # Use bleeding edge for Q, or download proven emulator version, based on # https://aur.archlinux.org/android-emulator.git - if [[ "$AVD_SDK" == Q ]]; then set -x; echo y | sdkmanager --channel=3 "emulator" > /dev/null; set +x; else set -x; rm -rf $ANDROID_HOME/emulator; wget -q http://dl.google.com/android/repository/emulator-linux-5264690.zip; echo "48c1cda2bdf3095d9d9d5c010fbfb3d6d673e3ea emulator-linux-5264690.zip" | sha1sum -c; unzip -qq -d $ANDROID_HOME emulator-linux-5264690.zip; set +x; fi - grep Revision $ANDROID_HOME/emulator/source.properties - alias sdkmanager - echo y | sdkmanager "platforms;android-$AVD_SDK" > /dev/null - if ! avdmanager list avd | grep "Name. avd$AVD_SDK$"; then set -x; rm -rf ~/.android/avd $ANDROID_HOME/system-images; echo y | sdkmanager "$AVD_PACKAGE" > /dev/null; echo no | avdmanager create avd --name avd$AVD_SDK --tag "$AVD_TAG" --package "$AVD_PACKAGE" --sdcard 64M --device "Nexus 5"; export RAMSIZE="`sed -n 's,^MemAvailable:[^0-9]*\([0-9][0-9]*\)[^0-9]*$,\1,p' /proc/meminfo`"; if [ $RAMSIZE -le 2048 ]; then sed -i '/^hw\.ramSize\s*=.*/d' ~/.android/avd/*.avd/config.ini; echo "hw.ramSize=1024" >> ~/.android/avd/*.avd/config.ini; fi; avdmanager list avd; set +x; fi - grep -v '^License' $ANDROID_HOME/system-images/android-$AVD_SDK/$AVD_TAG/$AVD_ARCH/source.properties - adb start-server - ls -l ~/.android - emulator -version - emulator -avd avd$AVD_SDK -no-audio -no-jni -no-snapstorage -no-window -skip-adb-auth -verbose -wipe-data -debug all,-hw_control,-qemud,-sensors,-surface & - wait-for-emulator - adb devices - adb shell input keyevent 82 & - test $AVD_SDK -ge 25 || export FLAG=-Pandroid.testInstrumentationRunnerArguments.notAnnotation=android.support.test.filters.LargeTest - ./gradlew connectedFullDebugAndroidTest $FLAG || ./gradlew connectedFullDebugAndroidTest $FLAG || ./gradlew connectedFullDebugAndroidTest $FLAG || (adb -e logcat -d > logcat.txt; exit 1) connected 22 default armeabi-v7a: retry: 1 <<: *test-template <<: *connected-template .kvm-template: &kvm-template tags: - fdroid - kvm allow_failure: true only: - branches@eighthave/fdroidclient <<: *test-template <<: *connected-template connected 23 default x86: <<: *kvm-template connected 25 default x86: <<: *kvm-template connected 26 google_apis x86: <<: *kvm-template only: - branches@fdroid/fdroidclient - branches@eighthave/fdroidclient connected 27 google_apis_playstore x86: <<: *kvm-template connected 28 default x86_64: <<: *kvm-template connected Q default x86_64: <<: *kvm-template deploy_nightly: stage: deploy only: - master script: - test -z "$DEBUG_KEYSTORE" && exit 0 - sed -i 's,.*,F-Nightly,' app/src/main/res/values*/strings.xml # add this nightly repo as a enabled repo - sed -i -e '/<\/string-array>/d' -e '/<\/resources>/d' app/src/main/res/values/default_repos.xml - echo "${CI_PROJECT_PATH}-nightly" >> app/src/main/res/values/default_repos.xml - echo "${CI_PROJECT_URL}-nightly/raw/master/fdroid/repo" >> app/src/main/res/values/default_repos.xml - cat config/nightly-repo/repo.xml >> app/src/main/res/values/default_repos.xml - export DB=`sed -n 's,.*DB_VERSION *= *\([0-9][0-9]*\).*,\1,p' app/src/main/java/org/fdroid/fdroid/data/DBHelper.java` - export versionCode=`printf '%d%05d' $DB $(date '+%s'| cut -b4-8)` - sed -i "s,^\(\s*versionCode\) *[0-9].*,\1 $versionCode," app/build.gradle # build the APKs! - ./gradlew assembleDebug - fdroid nightly -v after_script: # this file changes every time but should not be cached - rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock - rm -fr $GRADLE_USER_HOME/caches/*/plugin-resolution/