| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- #!/usr/bin/env python3
- #
- # 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 chosen track."""
- import argparse
- from googleapiclient.discovery import build
- import httplib2
- from oauth2client.service_account import ServiceAccountCredentials
- from oauth2client import client
- import os
- import json
- # Declare command-line flags.
- argparser = argparse.ArgumentParser(add_help=False)
- argparser.add_argument(
- "package_name", help="The package name. Example: com.android.sample"
- )
- argparser.add_argument(
- "package_track",
- help="The track to deploy to." ' Can be "alpha", "beta", "production" or "rollout"',
- )
- argparser.add_argument("release_note", help="text to add as en-US release notes")
- argparser.add_argument("apk_files", nargs="*", help="Paths to the APK files to upload.")
- google_service_account_config = json.loads(os.environ["GOOGLE_SERVICE_ACCOUNT"])
- 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_dict(
- google_service_account_config,
- 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()
- package_name = flags.package_name
- package_track = flags.package_track
- release_note = flags.release_note
- apk_files = flags.apk_files
- try:
- edit_request = service.edits().insert(body={}, packageName=package_name)
- result = edit_request.execute()
- edit_id = result["id"]
- version_codes = list()
- for filepath in apk_files:
- apk_response = (
- service.edits()
- .apks()
- .upload(editId=edit_id, packageName=package_name, media_body=filepath)
- .execute()
- )
- print(
- "Version code {version_code} has been uploaded".format(
- version_code=apk_response["versionCode"]
- )
- )
- version_codes.append(apk_response["versionCode"])
- track_response = (
- service.edits()
- .tracks()
- .update(
- editId=edit_id,
- track=package_track,
- packageName=package_name,
- body={
- "track": package_track,
- "releases": [
- {
- "versionCodes": version_codes,
- "releaseNotes": [
- {"language": "en-US", "text": release_note}
- ],
- "status": "completed",
- }
- ],
- },
- )
- .execute()
- )
- print(
- "Track {track} is set for releases {releases}".format(
- track=track_response["track"], releases=track_response["releases"]
- )
- )
- commit_request = (
- service.edits().commit(editId=edit_id, packageName=package_name).execute()
- )
- print('Edit "{id}" has been committed'.format(id=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()
|