.gitlab-ci.yml 5.92 KB
Newer Older
1
image: registry.gitlab.com/fdroid/ci-images-client:latest
Daniel Martí's avatar
Daniel Martí committed
2

3 4 5 6 7
cache:
  paths:
    - .gradle/wrapper
    - .gradle/caches

8 9 10 11
stages:
  - test
  - deploy

12 13
before_script:
  - export GRADLE_USER_HOME=$PWD/.gradle
14
  - export ANDROID_COMPILE_SDK=`sed -n 's,.*compileSdkVersion\s*\([0-9][0-9]*\).*,\1,p' app/build.gradle`
15
  - alias sdkmanager="sdkmanager --no_https"
16
  - echo y | sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" > /dev/null
17

18
.test-template: &test-template
19
  stage: test
20 21 22 23 24 25 26 27 28 29 30 31
  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"

32 33
# Run the most important first. Then we can decide whether to ignore
# the style tests if the rest of the more meaningful tests pass.
34
test_lint_pmd_checkstyle:
35
  <<: *test-template
36
  script:
37
    - export EXITVALUE=0
38
    - ./gradlew assemble
39
    # always report on lint errors to the build log
40
    - sed -i -e 's,textReport .*,textReport true,' app/build.gradle
41
    - ./gradlew testFullDebugUnitTest
42
    - ./gradlew lint
43 44
    - ./gradlew pmd || export EXITVALUE=1
    - ./gradlew checkstyle || export EXITVALUE=1
45 46
    - ./tools/check-format-strings.py || export EXITVALUE=1
    - ./tools/remove-unused-and-blank-translations.py || export EXITVALUE=1
47
    - echo "These are unused or blank translations that should be removed:"
48
    - git --no-pager diff --ignore-all-space --name-only --exit-code app/src/*/res/values*/strings.xml || export EXITVALUE=1
49
    - exit $EXITVALUE
50

51 52 53 54 55 56 57
errorprone:
  stage: test
  script:
    - cat config/errorprone.gradle >> app/build.gradle
    - ./gradlew assembleDebug
  allow_failure: true

58 59
# once these prove stable, the task should be switched to
# connectedCheck to test all the build flavors
60
.connected-template: &connected-template
61
  script:
62
    - ./gradlew assembleFullDebug
63 64 65 66 67
    - 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
68
    - emulator -accel-check || true
69 70
    - alias sdkmanager
    - echo y | sdkmanager "emulator" "platforms;android-$AVD_SDK" > /dev/null
71
    - if ! avdmanager list avd | grep "Name. avd$AVD_SDK$"; then
72
          set -x;
73 74
          rm -rf ~/.android/avd  $ANDROID_HOME/system-images;
          echo y | sdkmanager "$AVD_PACKAGE" > /dev/null;
75 76 77 78
          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` * 3 / 4 / 1024))";
          sed -i '/^hw\.ramSize\s*=.*/d' ~/.android/avd/*.avd/config.ini;
          echo "hw.ramSize=$RAMSIZE" >> ~/.android/avd/*.avd/config.ini;
79
          avdmanager list avd;
80
          set +x;
81
      fi
82 83 84 85 86 87 88 89 90 91 92
    - adb start-server
    - ls -l ~/.android
    - emulator -avd avd$AVD_SDK
        -no-audio
        -no-jni
        -no-snapstorage
        -no-window
        -skip-adb-auth
        -verbose
        -wipe-data
        &
93
    - wait-for-emulator
94
    - adb devices
95
    - adb shell input keyevent 82 &
96 97
    - test $AVD_SDK -ge 25 || export FLAG=-Pandroid.testInstrumentationRunnerArguments.notAnnotation=android.test.suitebuilder.annotation.LargeTest
    - ./gradlew connectedFullDebugAndroidTest $FLAG || (adb -e logcat -d > logcat.txt; exit 1)
98

99
connected 24 default armeabi-v7a:
100
  retry: 1
101 102
  only:
    - merge_requests
103 104 105
  <<: *test-template
  <<: *connected-template

106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
.kvm-template: &kvm-template
  tags:
    - fdroid
    - kvm
  only:
    - merge_requests
    - branches@fdroid/fdroidclient
  <<: *test-template
  <<: *connected-template

connected 17 default x86:
  <<: *kvm-template

connected 18 default x86:
  <<: *kvm-template
  only:
    - master@fdroid/fdroidclient

connected 19 default x86:
  <<: *kvm-template
  only:
    - master@fdroid/fdroidclient

connected 21 default x86:
  <<: *kvm-template
  only:
    - master@fdroid/fdroidclient

connected 22 default x86:
  <<: *kvm-template
  only:
    - master@fdroid/fdroidclient

connected 23 default x86:
  <<: *kvm-template

connected 24 google_apis x86:
  <<: *kvm-template
  only:
    - master@fdroid/fdroidclient

connected 25 default x86:
  <<: *kvm-template

connected 26 google_apis x86:
  <<: *kvm-template
  only:
    - master@fdroid/fdroidclient

connected 27 google_apis_playstore x86:
  <<: *kvm-template
  only:
    - master@fdroid/fdroidclient

connected 28 default x86_64:
  <<: *kvm-template


164 165 166 167 168
deploy_nightly:
  stage: deploy
  only:
    - master
  script:
169
    - test -z "$DEBUG_KEYSTORE" && exit 0
170 171 172 173
    - 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
174 175 176 177
    - 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
178 179 180
    - 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
181
    # build the APKs!
182 183
    - ./gradlew assembleDebug
    - fdroid nightly -v
184

185 186 187 188
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/