diff --git a/.travis.yml b/.travis.yml index 9712d897ef10253da8fa1f9f000a980ca79ab079..b24795f8967cf7cf4cb0079438550cad88e09fd6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,6 +51,10 @@ jobs: sudo: required after_success: skip - stage: "Google Play Upload" + name: "Google Play Upload" + dist: trusty + language: android + sudo: false before_install: skip install: skip before_script: skip @@ -215,10 +219,8 @@ script: fi after_success: + # This is only used to upload android builds to Google Play - cd ${TRAVIS_BUILD_DIR} - - # master development builds to beta track - - GOOGLE_PLAY_PKG=org.mavlink.qgroundcontrolbeta - if [ "${TRAVIS_TAG}" ]; then GOOGLE_PLAY_PKG=org.mavlink.qgroundcontrol; elif [ "${TRAVIS_BRANCH}" = "master" ]; then @@ -227,10 +229,12 @@ after_success: GOOGLE_PLAY_PKG=none; fi - if [[ "${SPEC}" = "android-clang" && "${TRAVIS_PULL_REQUEST}" = "false" && "${GOOGLE_PLAY_PKG}" != "none" ]]; then + wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/builds/${TRAVIS_BRANCH}/QGroundControl32.apk && + wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/builds/${TRAVIS_BRANCH}/QGroundControl64.apk && pip install --user --upgrade oauth2client && pip install --user google-api-python-client pyopenssl ndg-httpsclient pyasn1 && openssl aes-256-cbc -K $encrypted_25db6eb7c3fd_key -iv $encrypted_25db6eb7c3fd_iv -in android/Google_Play_Android_Developer-4432a3c4f5d1.json.enc -out android/Google_Play_Android_Developer-4432a3c4f5d1.json -d && - ./tools/google_play_upload.py production ${GOOGLE_PLAY_PKG} ${SHADOW_BUILD_DIR}/release/package/QGroundControl${BITNESS}.apk; + ./deploy/GooglePlayUpload.py ${GOOGLE_PLAY_PKG}; fi before_deploy: diff --git a/deploy/GooglePlayUpload.py b/deploy/GooglePlayUpload.py new file mode 100755 index 0000000000000000000000000000000000000000..74bc2d23fac9bf1bcc5948c0fd45f7e0e4e44942 --- /dev/null +++ b/deploy/GooglePlayUpload.py @@ -0,0 +1,91 @@ +#!/usr/bin/python +# +# Copyright 2014 Marta Rodriguez. +# +# Licensed under the Apache License, Version 2.0 (the 'License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Uploads an apk to the google play store.""" + +import argparse + +from apiclient.discovery import build +import httplib2 +from oauth2client import client +from oauth2client.service_account import ServiceAccountCredentials + +JSON_KEY='android/Google_Play_Android_Developer-4432a3c4f5d1.json' + +# Declare command-line flags. +argparser = argparse.ArgumentParser(add_help=False) +argparser.add_argument('package_name', + help='The package name. Example: com.android.sample') + +def main(): + # Create an httplib2.Http object to handle our HTTP requests and authorize it + # with the Credentials. Note that the first parameter, service_account_name, + # is the Email address created for the Service account. It must be the email + # address associated with the key that was created. + credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEY, scopes=['https://www.googleapis.com/auth/androidpublisher']) + + http = httplib2.Http() + http = credentials.authorize(http) + + service = build('androidpublisher', 'v3', http=http) + + # Process flags and read their values. + flags = argparser.parse_args() + + release_track = 'production' + package_name = flags.package_name + + try: + print 'Uploading package %s to track %s' % (package_name, release_track) + edit_request = service.edits().insert(body={}, packageName=package_name) + result = edit_request.execute() + edit_id = result['id'] + + apk_response_32 = service.edits().apks().upload( + editId=edit_id, + packageName=package_name, + media_body='QGroundControl32.apk').execute() + print 'Version code %d has been uploaded' % apk_response_32['versionCode'] + + apk_response_64 = service.edits().apks().upload( + editId=edit_id, + packageName=package_name, + media_body='QGroundControl64.apk').execute() + print 'Version code %d has been uploaded' % apk_response_64['versionCode'] + + track_response = service.edits().tracks().update( + editId=edit_id, + track=release_track, + packageName=package_name, + body={u'releases': [{ + u'versionCodes': [str(apk_response_32['versionCode']), str(apk_response_64['versionCode'])], + u'status': u'completed', + }]}).execute() + + print 'Track %s is set with releases: %s' % ( + track_response['track'], str(track_response['releases'])) + + commit_request = service.edits().commit( + editId=edit_id, packageName=package_name).execute() + + print 'Edit "%s" has been committed' % (commit_request['id']) + + except client.AccessTokenRefreshError: + print ('The credentials have been revoked or expired, please re-run the ' + 'application to re-authorize') + +if __name__ == '__main__': + main()