image: registry.gitlab.com/fdroid/ci-images-client

variables:
  GIT_SUBMODULE_STRATEGY: recursive

before_script:
  - export GRADLE_USER_HOME=`pwd`/.gradle

# Basic android and gradle stuff
# Check linting
lintDebug:
  interruptible: true
  stage: build
  script:
    - apt-get update || apt-get update
    - apt-get install -y openjdk-11-jdk-headless
    - update-alternatives --auto java
    - ./gradlew checkLicenses
    - ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint --write-verification-metadata sha256
    - git diff --quiet gradle/verification-metadata.xml || (echo 'Verification of dependencies failed!' && exit 1)
  artifacts:
    when: on_failure
    paths:
      - gradle/verification-metadata.xml


# Make Project
assembleDebug:
  interruptible: true
  stage: build
  tags:
    - server_artectrex
  script:
    - apt-get update || apt-get update
    - apt-get install -y openjdk-11-jdk-headless
    - update-alternatives --auto java
    - ./gradlew assembleDebug
  artifacts:
    paths:
      - app/build/outputs/

# Run all tests, if any fails, interrupt the pipeline (fail it)
debugTests:
  interruptible: true
  stage: test
  script:
    - apt-get update || apt-get update
    - apt-get install -y openjdk-11-jdk-headless
    - update-alternatives --auto java
    - ./gradlew -Pci --console=plain :app:testDebug -x lint

.connected-template: &connected-template
  allow_failure: true
  stage: test
  script:
    - start-emulator
    - wait-for-emulator
    - adb devices
    - adb shell input keyevent 82 &
    # Switch to right java version for building the app
    - apt-get update || apt-get update
    - apt-get install -y openjdk-11-jdk-headless
    - update-alternatives --auto java
    - ./gradlew connectedStagingAndroidTest --info || (adb -e logcat -d > logcat.txt; exit 1)
  artifacts:
    paths:
      - logcat.txt

connected 27 default x86_64:
  <<: *connected-template

fdroid build:
  stage: build
  image: registry.gitlab.com/fdroid/ci-images-client:latest
  tags:
    - server_artectrex
  artifacts:
    paths:
      - signed/
    when: always
  only:
    - tags
  cache:
    key: "$CI_JOB_NAME"
    paths:
      - .gradle
      - .android
  script:
    # Put the correct versionName and versionCode in the .fdroid.yml
    - sed -e "s/\${versionName}/$(grep "versionName " app/build.gradle | awk '{print $2}' | tr -d \")$(grep "versionCode" app/build.gradle -m 1 | awk '{print $2}')/" -e "s/\${versionCode}/$(grep "versionCode" app/build.gradle -m 1 | awk '{print $2}')/" .fdroid.yml.template > .fdroid.yml
    - rm .fdroid.yml.template
    - test -d build || mkdir build
    - test -d fdroidserver || mkdir fdroidserver
    - git ls-remote https://gitlab.com/fdroid/fdroidserver.git master
    - curl --silent https://gitlab.com/fdroid/fdroidserver/-/archive/master/fdroidserver-master.tar.gz
      | tar -xz --directory=fdroidserver --strip-components=1
    - export PATH="`pwd`/fdroidserver:$PATH"
    - export PYTHONPATH="$CI_PROJECT_DIR/fdroidserver:$CI_PROJECT_DIR/fdroidserver/examples"
    - export PYTHONUNBUFFERED=true

    - bash fdroidserver/buildserver/setup-env-vars $ANDROID_HOME
    - adduser --disabled-password --gecos "" vagrant
    - ln -s $CI_PROJECT_DIR/fdroidserver /home/vagrant/fdroidserver
    - mkdir -p /vagrant/cache
    - wget -q https://services.gradle.org/distributions/gradle-5.6.2-bin.zip --output-document=/vagrant/cache/gradle-5.6.2-bin.zip
    # Check sha256 of the gradle build
    - echo '32fce6628848f799b0ad3205ae8db67d0d828c10ffe62b748a7c0d9f4a5d9ee0 /vagrant/cache/gradle-5.6.2-bin.zip' | sha256sum -c
    - bash fdroidserver/buildserver/provision-gradle
    - bash fdroidserver/buildserver/provision-apt-get-install https://deb.debian.org/debian
    - source /etc/profile.d/bsenv.sh
    - apt-get dist-upgrade

    # install fdroidserver from git, with deps from Debian, until fdroidserver
    # is stable enough to include all the things needed here
    - apt-get install -t stretch-backports
      fdroidserver
      python3-asn1crypto
      python3-ruamel.yaml
      yamllint
    - apt-get purge fdroidserver
    - export GRADLE_USER_HOME=$PWD/.gradle
    # each fdroid build --on-server run expects sudo, then uninstalls it
    - set -x
    - apt-get install sudo
    - fdroid fetchsrclibs --verbose
    # this builds the latest version of the app from its source dir, using the build recipe in .fdroid.yml
    - fdroid build --verbose --on-server --no-tarball
    # create a keystore if we don’t have one
    - ls .android || mkdir .android
    - ls .android/debug.keystore || keytool -genkey -v -keystore .android/debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname 'C=US, O=Android, CN=Android Debug'
    # sign the apk
    - cp -R unsigned signed
    - jarsigner -verbose -keystore .android/debug.keystore -storepass android -keypass android signed/*.apk androiddebugkey
