From 5b1e77a51a03a666873c61f28c921c2daa7dd331 Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sun, 25 Nov 2018 14:27:17 +0100 Subject: [PATCH] Build and upload Apks on tags Use a nextcloud server to upload apks. See .gitlab-ci.yml for the protected variables to set in Gitlab. --- .gitlab-ci.yml | 61 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 942510385..370277db6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,19 +7,72 @@ before_script: stages: - build-and-test - - test + - tag + +.no-upload: &no-upload + stage: build-and-test + retry: 2 assembleDebug: - stage: build-and-test + <<: *no-upload + cache: + key: "${CI_COMMIT_TAG}" + paths: + - app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk + - app/build/outputs/apk/playstore/debug/app-playstore-debug.apk + policy: push script: - ./gradlew assembleDebug lintDebug: - stage: build-and-test + <<: *no-upload script: - ./gradlew -Pci --console=plain :app:lintFdroidDebug -PbuildDir=lint + except: + - tags debugTests: - stage: build-and-test + <<: *no-upload script: - ./gradlew -Pci --console=plain :app:testFdroidDebugUnitTest + except: + - tags + +## PROTECTED VARIABLES TO SET IN GITLAB: +# - GITLAB_API_TOKEN: token you create on Gitlab +# - NC_REMOTE_DIR: like https://YOUR_NEXTCLOUD/remote.php/dav/files/YOUR_USER/mastalab (no trailing slash) +# - NC_SHARE_URL: share the folder in Nextcloud with public link and put your public link here (no trailing slash) +# - NC_USER: nextcloud user +# - NC_PASSWORD: nextcloud password +## Protect all tags in Gitlab repo settings (do a wildcard, ie '*') +# For now, it uses the assembleDebug builds, you'll need to create a job in build-and-test to create the apks, with only: - tags and add except: - tags to assembleDebug (like in debugTests) +# In it, put something like this to get your signature key file: +# - curl -s --output signature.jsk -u "${NC_USER}:${NC_PASSWORD}" "https://YOUR_NEXTCLOUD/remote.php/dav/files/YOUR_USER/signature.jsk" +putApkOnTags: + image: hatsoftwares/curl-jq:latest + stage: tag + retry: 2 + cache: + key: "${CI_COMMIT_TAG}" + paths: + - app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk + - app/build/outputs/apk/playstore/debug/app-playstore-debug.apk + policy: pull + script: + - export PROJECT_API_URL="https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}" + - export DESCRIPTION_URL="${PROJECT_API_URL}/repository/tags/${CI_COMMIT_TAG}" + - export RELEASE_URL="${DESCRIPTION_URL}/release" + - export NC_UPLOAD_URL="${NC_REMOTE_DIR}/${CI_COMMIT_TAG}" + - export NC_DOWNLOAD_URL="${NC_SHARE_URL}/download?path=%2F${CI_COMMIT_TAG}%2F&files=" + - 'export HEADER="Private-Token: ${GITLAB_API_TOKEN}"' + - export fdroidUrl="${NC_DOWNLOAD_URL}app-fdroid-debug.apk" + - export playstoreUrl="${NC_DOWNLOAD_URL}app-playstore-debug.apk" + - 'curl -s -u "${NC_USER}:${NC_PASSWORD}" -X MKCOL "${NC_UPLOAD_URL}"' + - 'curl -s -u "${NC_USER}:${NC_PASSWORD}" -T app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk "${NC_UPLOAD_URL}/app-fdroid-debug.apk"' + - 'curl -s -u "${NC_USER}:${NC_PASSWORD}" -T app/build/outputs/apk/playstore/debug/app-playstore-debug.apk "${NC_UPLOAD_URL}/app-playstore-debug.apk"' + - export description=$(curl -s --header "${HEADER}" "${DESCRIPTION_URL}" | jq .release.description | sed -e 's@"@@g') + - if [[ $description == 'null' ]]; then export METHOD="POST"; echo -e "[Get the fdroid apk](${fdroidUrl})\n\n[Get the play store apk](${playstoreUrl})" > /tmp/text; fi + - if [[ $description != 'null' ]]; then export METHOD="PUT"; echo -e "${description}\n\n[Get the fdroid apk](${fdroidUrl})\n\n[Get the play store apk](${playstoreUrl})" > /tmp/text; fi + - curl -s --request $METHOD --data-urlencode "description@/tmp/text" --header "${HEADER}" "${RELEASE_URL}" + only: + - tags