
The emulator runs are super crashy on gitlab-ci, so just run the emulator tests for the "full" build flavor. Once these prove stable, the task should be switched to connectedCheck to test all the build flavors
108 lines
4.0 KiB
YAML
108 lines
4.0 KiB
YAML
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`
|
|
- 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/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
|
|
allow_failure: true
|
|
|
|
# once these prove stable, the task should be switched to
|
|
# connectedCheck to test all the build flavors
|
|
.connected-template: &connected-template
|
|
script:
|
|
- ./gradlew assembleDebug
|
|
- echo y | sdkmanager "platforms;android-$AVD_SDK" > /dev/null
|
|
- if ! avdmanager list avd | grep "Name. avd$AVD_SDK$"; then
|
|
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";
|
|
avdmanager list avd;
|
|
fi
|
|
- emulator64-arm -avd avd$AVD_SDK -no-audio -no-window -no-snapstorage &
|
|
- wait-for-emulator
|
|
- adb shell input keyevent 82 &
|
|
- ./gradlew connectedFullDebugAndroidTest || (adb -e logcat -d '*:E' > logcat.txt; exit 1)
|
|
|
|
connected24:
|
|
retry: 1
|
|
<<: *test-template
|
|
variables:
|
|
AVD_SDK: "24"
|
|
AVD_TAG: "default"
|
|
AVD_PACKAGE: "system-images;android-${AVD_SDK};${AVD_TAG};armeabi-v7a"
|
|
<<: *connected-template
|
|
|
|
deploy_nightly:
|
|
stage: deploy
|
|
only:
|
|
- master
|
|
script:
|
|
- test -z "$DEBUG_KEYSTORE" && exit 0
|
|
- sed -i
|
|
's,<string name="app_name">.*</string>,<string name="app_name">F-Nightly</string>,'
|
|
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 "<item>${CI_PROJECT_PATH}-nightly</item>" >> app/src/main/res/values/default_repos.xml
|
|
- echo "<item>${CI_PROJECT_URL}-nightly/raw/master/fdroid/repo</item>" >> 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/
|