diff --git a/scripts/upload_kiwix_lib_android_to_bintray.py b/scripts/upload_kiwix_lib_android_to_bintray.py new file mode 100755 index 0000000..02e2c34 --- /dev/null +++ b/scripts/upload_kiwix_lib_android_to_bintray.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 + +import requests +from requests.auth import HTTPBasicAuth +import os, sys +import json + +bintray_auth = (os.environ['BINTRAY_USER'], os.environ['BINTRAY_PASS']) + + +def generate_pom_file(version): + template = """ + + 4.0.0 + org.kiwix.kiwixlib + kiwixlib + {version} + aar + kiwixlib + kiwixlib + https://github.com/kiwix/kiwix-lib + + + GPLv3 + https://www.gnu.org/licenses/gpl-3.0.en.html + + + + + kiwix + kiwix + contact@kiwix.org + + + + https://github.com/kiwix/kiwix-lib.git + https://github.com/kiwix/kiwix-lib.git + https://github.com/kiwix/kiwix-lib + +""" + return template.format(version=version) + + +def create_version(version): + url = "https://api.bintray.com/packages/kiwix/kiwix/kiwixlib/versions" + payload = { + 'name': version, + 'desc': 'Release of kiwix-lib' + } + headers = { + 'Content-Type': 'application/json' + } + + r = requests.post(url, data=json.dumps(payload), headers=headers, auth=bintray_auth) + rcode = r.status_code + + if rcode == 409: + print("Bintray version %s already exists, skipping." % version) + return True + + rcode_family = rcode // 100 + if rcode_family in (2, 3): + print("Bintray Version created!") + return True + + print("ERROR : Bintray API response {}".format(code)) + return False + + +def upload_archive(version, filename, artefact): + url_template = "https://api.bintray.com/content/kiwix/kiwix/kiwixlib/{version}/org/kiwix/kiwixlib/kiwixlib/{version}/{artefact}" + parameters = { + 'publish': 1, + 'override': 1 + } + + # Upload the main artefact + url = url_template.format(version=version, artefact=artefact) + with open(filename, 'rb') as f: + r = requests.put(url, data=f, auth=bintray_auth, params=parameters) + + rcode = r.status_code + rcode_family = rcode // 100 + if rcode_family not in (2, 3): + print("ERROR: Fail to upload artefact") + return False + + # Upload the pom file + pom_artefact = os.path.splitext(artefact) + ".pom" + url = url_template.format(version=version, artefact=pom_artefact) + data = generate_pom_file(version) + r = requests.put(url, data=data, auth=bintray_auth, params=parameters) + + rcode = r.status_code + rcode_family = rcode // 100 + if rcode_family not in (2, 3): + print("ERROR: Fail to upload pom artefact") + return False + + return True + + + +if __name__ == "__main__": + try: + info_file = sys.argv[1] + except IndexError: + print("Usage {} infofile".format(sys.argv[0])) + sys.exit(-1) + + print("Use info file {}".format(info_file)) + with open(info_file) as f: + options = json.load(f) + + if not create_version(options['version']): + sys.exit("Cannot create version") + + filepath = os.path.join(os.path.dirname(sys.argv[1]), options['filename']) + if not upload_archive(options['version'], filepath, options['artefact']): + sys.exit("Cannot upload artefact") diff --git a/travis/compile_all.py b/travis/compile_all.py index ae0ee5d..2bf244f 100755 --- a/travis/compile_all.py +++ b/travis/compile_all.py @@ -8,6 +8,7 @@ from datetime import date import tarfile, zipfile import subprocess import re +import json from urllib.request import urlopen from urllib.error import URLError @@ -37,6 +38,7 @@ NIGHTLY_ZIM_ARCHIVES_DIR = EXPORT_DIR/'NIGHTLY_ZIM_ARCHIVES'/NIGHTLY_DATE RELEASE_ZIM_ARCHIVES_DIR = EXPORT_DIR/'RELEASE_ZIM_ARCHIVES' DIST_KIWIX_ARCHIVES_DIR = EXPORT_DIR/'DIST_KIWIX_ARCHIVES' DIST_ZIM_ARCHIVES_DIR = EXPORT_DIR/'DIST_ZIM_ARCHIVES' +BINTRAY_ARCHIVES_DIR = EXPORT_DIR/'BINTRAY_ARCHIVES' BIN_EXT = '.exe' if PLATFORM.startswith('win32_') else '' @@ -286,6 +288,7 @@ for p in (NIGHTLY_KIWIX_ARCHIVES_DIR, RELEASE_ZIM_ARCHIVES_DIR, DIST_KIWIX_ARCHIVES_DIR, DIST_ZIM_ARCHIVES_DIR, + BINTRAY_ARCHIVES_DIR, BASE_EXPORT_DIR, GIT_EXPORT_DIR): try: @@ -397,7 +400,9 @@ if environ['TRAVIS_EVENT_TYPE'] != 'cron' and not make_release: TARGETS = tuple() -if PLATFORM.startswith('android'): +if PLATFORM == 'android': + TARGETS = ('kiwix-lib-app',) +elif PLATFORM.startswith('android_'): TARGETS = ('libzim', 'kiwix-lib') elif PLATFORM.startswith('iOS'): TARGETS = ('libzim', 'kiwix-lib') @@ -472,12 +477,25 @@ elif PLATFORM == 'i586_static': make_archive('kiwix-tools', 'linux-i586') elif make_release and PLATFORM == 'flatpak': update_flathub_git() -elif PLATFORM.startswith('android') and 'kiwix-android' in TARGETS: - APK_NAME = "kiwix-{}".format(PLATFORM) - source_debug_dir = HOME/'BUILD_android'/'kiwix-android'/'app'/'build'/'outputs'/'apk'/'kiwix'/'debug' - source_release_dir = HOME/'BUILD_android'/'kiwix-android'/'app'/'build'/'outputs'/'apk'/'kiwix'/'release' - shutil.copy(str(source_debug_dir/'app-kiwix-debug.apk'), - str(NIGHTLY_KIWIX_ARCHIVES_DIR/"{}-debug.apk".format(APK_NAME))) - shutil.copy(str(source_release_dir/'app-kiwix-release-unsigned.apk'), - str(NIGHTLY_KIWIX_ARCHIVES_DIR/"{}-release_signed".format(APK_NAME))) +elif PLATFORM == 'android' and 'kiwix-lib-app' in TARGETS: + if make_release and release_versions.get(project) is not None: + postfix = main_project_versions[project] + extra_postfix = release_versions.get(project) + if extra_postfix: + postfix = "{}-{}".format(postfix, extra_postfix) + + arr_name = "kiwixlib-{}.aar".format(postfix) + + source_release_dir = HOME/'BUILD_android'/'kiwix-lib-app'/'kiwixLibAndroid'/'build'/'outputs'/'aar' + shutil.copy(str(source_release_dir/'kiwixLibAndroid-release.aar'), + str(BINTRAY_ARCHIVES_DIR/arr_name)) + + json_filename = '{}_bintray_info.json'.format(arr_name) + data = { + version: main_project_versions[project], + filename : arr_name, + artefact: 'kiwixlib-5.1.0.aar' + } + with open(str(BINTRAY_ARCHIVES_DIR/json_filename), 'w') as f: + json.dump(data, f) diff --git a/travis/deploy.sh b/travis/deploy.sh index 69241bc..c254436 100755 --- a/travis/deploy.sh +++ b/travis/deploy.sh @@ -69,7 +69,7 @@ then done fi - cd ${EXPORT_DIR}/GIT + (cd ${EXPORT_DIR}/GIT GIT_REPOS=$(ls -l | awk '/^d/ { print $9 }') if [[ "x$GIT_REPOS" != "x" ]] then @@ -80,5 +80,16 @@ then ) done fi + ) + + BINTRAY_ARCHIVES=$(find $BINTRAY_ARCHIVES_DIR/*_bintray_info.json -type f) + if [[ "x$BINTRAY_ARCHIVES" != "x" ]] + then + for archive_info in $BINTRAY_ARCHIVES + do + ${HOME}/kiwix-build/scripts/upload_kiwix_lib_android_to_bintray.py $archive_info + done + fi + fi