From f0438a67b15d4be70dd93e1a5731501106f8a94d Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 11 Oct 2017 23:48:12 +0200 Subject: [PATCH] gitlab-ci: push nightly builds to fdroid repo on gitlab If a repo is set with the gitlab-ci Secret Variable DEBUG_KEYSTORE and there is a repo named the same as this repo with -nightly appended, then this will automatically generate an fdroid repo of each build produced by gitlab-ci runs on the master branch. closes fdroidserver#256 --- .gitlab-ci.yml | 14 +++ config/nightly-repo/config.py | 18 ++++ config/nightly-repo/deploy | 86 ++++++++++++++++++ config/nightly-repo/fdroid-icon.png | Bin 0 -> 3367 bytes .../metadata/org.fdroid.fdroid.yml | 15 +++ config/nightly-repo/repo.xml | 14 +++ 6 files changed, 147 insertions(+) create mode 100644 config/nightly-repo/config.py create mode 100755 config/nightly-repo/deploy create mode 100644 config/nightly-repo/fdroid-icon.png create mode 100644 config/nightly-repo/metadata/org.fdroid.fdroid.yml create mode 100644 config/nightly-repo/repo.xml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 94e55cb8f..777c0a357 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,12 +5,17 @@ cache: - .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 | android --silent update sdk --no-ui --filter android-${ANDROID_COMPILE_SDK} test: + stage: test script: - export EXITVALUE=0 - ./tools/check-format-strings.py @@ -33,6 +38,7 @@ test: - exit $EXITVALUE connected10: + stage: test variables: AVD_SDK: "10" script: @@ -54,6 +60,7 @@ connected10: done connected24: + stage: test variables: AVD_SDK: "24" script: @@ -77,6 +84,13 @@ connected24: done - exit $EXITVALUE +deploy_nightly: + stage: deploy + only: + - master + script: + - "[ -z \"$DEBUG_KEYSTORE\" ] || ./config/nightly-repo/deploy" + after_script: # this file changes every time but should not be cached - rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock diff --git a/config/nightly-repo/config.py b/config/nightly-repo/config.py new file mode 100644 index 000000000..65eaeed10 --- /dev/null +++ b/config/nightly-repo/config.py @@ -0,0 +1,18 @@ + +repo_icon = "fdroid-icon.png" +repo_description = """ +This repo is nightly builds, it should only be used for testing! +""" + +archive_older = 10 +archive_icon = "fdroid-icon.png" +archive_description = """ +The repository of older versions of applications from the main repository. +""" + +make_current_version_link = False +accepted_formats = ('txt', 'yml') +repo_keyalias = "androiddebugkey" +keystorepass = "android" +keypass = "android" +keydname = "CN=Android Debug,O=Android,C=US" diff --git a/config/nightly-repo/deploy b/config/nightly-repo/deploy new file mode 100755 index 000000000..b6520fcfd --- /dev/null +++ b/config/nightly-repo/deploy @@ -0,0 +1,86 @@ +#!/bin/bash + +set -e +set -x + +echo "deb http://deb.debian.org/debian stretch-backports main" \ + > /etc/apt/sources.list.d/stretch-backports.list +apt-get update +apt-get install -y --no-install-recommends -t stretch-backports \ + fdroidserver openssh-client rsync python3-qrcode + +db=`sed -n 's,.*DB_VERSION *= *\([0-9][0-9]*\).*,\1,p' app/src/main/java/org/fdroid/fdroid/data/DBHelper.java` +count=`git rev-list --first-parent --count HEAD` +sed -i "s,versionCode *[0-9][0-9]*.*,versionCode `printf '%d%05d' $db $count`," app/build.gradle + +repo_git_base=${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}-nightly +repo_base=https://gitlab.com/${repo_git_base} +repo_url=${repo_base}/raw/master/fdroid/repo +archive_url=${repo_base}/raw/master/fdroid/archive +mkdir -p $HOME/.android +keystore=$HOME/.android/debug.keystore +echo "repo_name = '$repo_git_base'" >> config/nightly-repo/config.py +echo "repo_url = '$repo_url'" >> config/nightly-repo/config.py +echo "archive_name = '$repo_git_base archive'" >> config/nightly-repo/config.py +echo "archive_url = '$archive_url'" >> config/nightly-repo/config.py +echo "servergitmirrors = 'git@gitlab.com:$repo_git_base'" >> config/nightly-repo/config.py +echo "keystore = '$keystore'" >> config/nightly-repo/config.py +chmod 0600 config/nightly-repo/config.py + +sed -i -e '/<\/string-array>/d' -e '/<\/resources>/d' \ + app/src/main/res/values/default_repos.xml +echo "$repo_git_base" >> app/src/main/res/values/default_repos.xml +echo "$repo_url" >> app/src/main/res/values/default_repos.xml +cat config/nightly-repo/repo.xml >> app/src/main/res/values/default_repos.xml +echo "" >> app/src/main/res/values/default_repos.xml + +set +x # do not show contents of secret variables! +echo $DEBUG_KEYSTORE | base64 --decode --ignore-garbage > $keystore +set -x + +./gradlew assembleDebug -PdisablePreDex + +mkdir config/nightly-repo/repo/ +mv app/build/outputs/apk/app-debug.apk config/nightly-repo/repo/ +cd config/nightly-repo + +pw=android +alias=androiddebugkey +keytool -v -importkeystore \ + -srckeystore $keystore -srcalias $alias -srcstorepass $pw -srckeypass $pw \ + -destkeystore keystore.p12 -destalias $alias -deststorepass $pw -destkeypass $pw -deststoretype PKCS12 + +ssh_private_key=$HOME/.ssh/id_rsa +mkdir -p $(dirname $ssh_private_key) +openssl pkcs12 -in keystore.p12 -out key.pem -passin pass:$pw -passout pass:$pw +openssl rsa -in key.pem -out ${ssh_private_key} -passin pass:$pw +chmod 600 ${ssh_private_key} +ssh-keygen -y -f ${ssh_private_key} > ${ssh_private_key}.pub +echo "SSH public deploy key:" +cat ${ssh_private_key}.pub +eval $(ssh-agent -s) +ssh-add ${ssh_private_key} + +if git clone $repo_base git-mirror; then + cd git-mirror + git remote rm origin + qr $repo_url > qr.png + echo "# $repo_git_base" > README.md + echo "[![$repo_url](qr.png)]($repo_url)" >> README.md + printf "\n\nLast updated: " >> README.md + date >> README.md + git add README.md + git config user.email "$CI_PROJECT_NAMESPACE@$CI_PROJECT_NAME" + git config user.name "$CI_PROJECT_NAMESPACE $CI_PROJECT_NAME" + git commit README.md -m README + cd .. +fi +if [ -d git-mirror/fdroid/repo ]; then + rsync -axv git-mirror/fdroid/repo/ repo/ +fi + +fdroid update --rename-apks + +ssh-add -l +echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config +fdroid server update --verbose diff --git a/config/nightly-repo/fdroid-icon.png b/config/nightly-repo/fdroid-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0c0d41738f054eaa77bba0ef0785e87227aa2692 GIT binary patch literal 3367 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 literal 0 HcmV?d00001 diff --git a/config/nightly-repo/metadata/org.fdroid.fdroid.yml b/config/nightly-repo/metadata/org.fdroid.fdroid.yml new file mode 100644 index 000000000..3b037784e --- /dev/null +++ b/config/nightly-repo/metadata/org.fdroid.fdroid.yml @@ -0,0 +1,15 @@ +Categories: System +License: GPL-3.0+ +WebSite: https://f-droid.org +SourceCode: https://gitlab.com/fdroid/fdroidclient +IssueTracker: https://gitlab.com/fdroid/fdroidclient/issues +Changelog: https://gitlab.com/fdroid/fdroidclient/raw/HEAD/CHANGELOG.md +Donate: https://f-droid.org/about +FlattrID: 343053 +Bitcoin: 15u8aAPK4jJ5N8wpWJ5gutAyyeHtKX5i18 + +AutoName: F-Droid Nightly +Summary: Nightly test build of F-Droid + +RepoType: srclib +Repo: fdroidclient diff --git a/config/nightly-repo/repo.xml b/config/nightly-repo/repo.xml new file mode 100644 index 000000000..30bfa0ebb --- /dev/null +++ b/config/nightly-repo/repo.xml @@ -0,0 +1,14 @@ + + This repo is nightly builds of F-Droid, it should only be used for testing! + + 13 + + 1 + + 5 + + ignore + + + 308201e53082014ea0030201020204503d3768300d06092a864886f70d01010505003037310b30090603550406130255533110300e060355040a1307416e64726f6964311630140603550403130d416e64726f6964204465627567301e170d3132303832383231323630305a170d3432303832313231323630305a3037310b30090603550406130255533110300e060355040a1307416e64726f6964311630140603550403130d416e64726f696420446562756730819f300d06092a864886f70d010101050003818d0030818902818100b5ba553eacbc4de5b45af812d9695140dafbc0a8a9c13ac9a7e24b2665371ce5072e5dfef60f705d58fdb2d0e2190264e42d83a6fd80cfd54690e9e3c3735fa8dce684ee99ac879b1b11e1c8a9cbb9dc6b23064b025f9db7dc87d48ee4bc038affd80d854c0ed5d88d93d6e8127e62344727e23886b97f5d10e2265c9c9b5bd10203010001300d06092a864886f70d0101050500038181006dae218bdbff79801b1935448c663319843a7b2eb5f5c8837f010e58da25ba4d23bc6650b53c93f9c42b379299f4659b4cc3c505aa1a7c08c8a1a58fffe78d29df2cf69b27c34a0ab5f44cf7e323e34f8252d9f6e4d67171ce38bab64623910811dae6b12203385b32d962dbd51e8a6b0dcab3fa4d1f4020cee69a5f3c6ddf69 +