microsoft / appcenter

Central repository for App Center open source resources and planning.
https://appcenter.ms
Creative Commons Attribution 4.0 International
1.01k stars 223 forks source link

Google Play internal test track support #125

Open marcoburato opened 5 years ago

marcoburato commented 5 years ago

Describe the solution you'd like Currently it's only possible to distribute an Android app to the Alpha, Beta and Production tracks in Google Play Store. There is no choice for the recent "Internal test track". It should be possible to submit the build to this new track as well.

shidil commented 5 years ago

This will be a great help for my project an many. Is there a chance for this to be considered in the roadmap?

Oddj0b commented 5 years ago

Let's hope more users are requesting this feature, so we can add it to App Center.

MattWard-Ideagen commented 5 years ago

Agree, we could really use this feature as I don't want to be uploading internal test track builds manually and we want to automatically deploy on merges into our testing branch and have the build available ASAP on a range of test devices, not hours or days as implied from Google response when queried where our build was.

"It looks like your closed test is still processing, please note this can take some time and if it takes more than 48 hours, please let us know.

Please be aware an Internal Test should process much quicker and be available in a few minutes.

I hope this helps! If you have any further questions, please let me know. I'm happy to help."

evorotnikov commented 5 years ago

This will be especially great since you can't really group builds together within same application in AppCenter so internal test track could be used for RC builds and AppCenter distribution overall for testing by QA team. Definitely vote for this one.

jeremyfelder commented 5 years ago

It looks like publishing to a test track is included in v3 of the Google Play API: https://android-developers.googleblog.com/2019/03/changes-to-google-play-developer-api.html https://developers.google.com/android-publisher/tracks

Any update on if this will be implemented in the near future on AppCenter?

contactpraveen2001 commented 4 years ago

It will a great help. As it will solve the manually push the build to Qa.

lklepner commented 4 years ago

Bitrise added this functionality back in March.. https://discuss.bitrise.io/t/support-internal-tests-with-google-play-deploy-step/4525/4

droidluv commented 4 years ago

I hope they add the internal test track too, it's quite annoying to manually build only for the internal test track

msifniotis-bbc commented 4 years ago

Any updates on if/whether this feature will be added? Internal testing track is very useful!

lklepner commented 4 years ago

@patniko @Oddj0b Can one of you guys give us an update on the status or potential timing of this feature request?

phatmann commented 4 years ago

Ugh the alpha track is sooooo annoying! Quite a large delay waiting for builds to be available for testers. Please please please enable the internal track! I helped write a PR for Fastlane using the Play Store API. Really easy to do.

JigarM commented 4 years ago

Any updates? when this feature will be supported?

marcoburato commented 4 years ago

@patniko @Oddj0b Come on guys, it's been 1 year and many people want this done. Not just the ones that searched and voted this ticket, this affects anyone distributing test versions using the Google Play store. Why is this ticket assigned to @Oddj0b if it's not being worked on?

phatmann commented 4 years ago

What is equally frustrating is that it is probably about 15 minutes of programming work to do.

airman00 commented 4 years ago

I got around it by making my own appcenter-post-build.sh script that uploads to Google Play

Important notes:

  1. You can define your environment variables in your script or in App Center and pass it in as a Secret.
  2. Your .apk may be in a different file location
  3. Your .apk may have a different name, mine was app-release.apk
  4. You need to make your own service_account.json and put it in your Source directory https://developers.google.com/android-publisher/getting_started#setting_up_api_access_clients

appcenter-post-build.sh

echo "Define Environment Variables"
APPLICATION_VERSION_NAME=3.14
ANDROID_IDENTIFIER=com.yourappname

echo "Sanity check to make sure the .apk is here"
APK_DIRECTORY=$APPCENTER_SOURCE_DIRECTORY/android/app/build/outputs/apk/release/
ls $APK_DIRECTORY

echo "Installing required Python packages"
pip install httplib2 google-api-python-client oauth2client

echo "Uploading APK to Internal Track of Google Play"
python $APPCENTER_SOURCE_DIRECTORY/uploadApk.py -p $ANDROID_IDENTIFIER -a $APK_DIRECTORY/app-release.apk -s $APPCENTER_SOURCE_DIRECTORY/service_account.json  -n ${APPLICATION_VERSION_NAME} -v ${APPCENTER_BUILD_ID}  -t internal
echo "Completed uploading APK to Android - $ANDROID_IDENTIFIER"

Put this uploadApk.py file in your Source directory uploadApk.py

#!/usr/bin/env 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 alpha track."""

import sys
#required on OSX to prevent the default 'six' library from interfering with the needed newer package, 
#as of the 1.4.1 google-api library
sys.path.insert(1, '/Library/Python/2.7/site-packages')

import argparse
import httplib2
import json

from oauth2client.service_account import ServiceAccountCredentials
from oauth2client.client import AccessTokenRefreshError
from googleapiclient.discovery import build

def upload(package, service, apk, track, versionCode, obbFilePath, versionName):

  # 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(
      service, ['https://www.googleapis.com/auth/androidpublisher'])

  http_auth = credentials.authorize(http=httplib2.Http())
  service = build('androidpublisher', 'v3', http=http_auth)

  try:
    edit_request = service.edits().insert(body={}, packageName=package)
    result = edit_request.execute()
    edit_id = result['id']

    apk_response = service.edits().apks().upload(
        editId=edit_id,
        packageName=package,
        media_body=apk).execute()

    obb_response = service.edits().expansionfiles().upload(
            apkVersionCode=versionCode,
            editId=edit_id,
            expansionFileType="main",
            packageName=package,
            media_body=obbFilePath,
            media_mime_type='application/octet-stream').execute()

    print apk_response
    print 'Version code %d has been successfully uploaded' % apk_response['versionCode']

    track_response = service.edits().tracks().update(
        editId=edit_id,
        track=track,
        packageName=package,
        body={u'releases': [{
            u'name': versionName,
            u'versionCodes': [ apk_response['versionCode'] ],
            u'releaseNotes': [
                {u'language': u'en-US', u'text': 'Bug fixes and improvements'},
            ],
            u'status': u'completed',
        }]}).execute()

    print 'Track response= "%s"' % (
        track_response)

    commit_request = service.edits().commit(
        editId=edit_id, packageName=package).execute()

    print 'Edit commit request= "%s"' % (commit_request)

  except AccessTokenRefreshError, e:
    print ('The credentials have been revoked or expired, please re-run the '
           'application to re-authorize')
    raise e

def main():
  parser = argparse.ArgumentParser()
  parser.add_argument('-p', '--package', required=True, help='The package name. Example: com.android.sample')
  parser.add_argument('-s', '--service', required=True, help='The service account json file.')
  parser.add_argument('-a', '--apk', required=True, help='The path to the APK file to upload.')
  parser.add_argument('-t', '--track', choices=['alpha', 'beta', 'production','rollout','internal'], default='alpha')
  parser.add_argument('-v', '--version', required=True, help='The versionCode number (integer)')
  parser.add_argument('-e', '--extension', required=True, help='The path to the OBB file to upload.')
  parser.add_argument('-n', '--name', required=True, help='The versionCode name')

  args = parser.parse_args()

  upload(args.package, args.service, args.apk, args.track, args.version, args.extension, args.name)

if __name__ == "__main__":
  main()

P.S. If you need to upload a .obb expansion file, just add argument -e $APPCENTER_SOURCE_DIRECTORY/output/main.${APPCENTER_BUILD_ID}.${ANDROID_IDENTIFIER}.obb

Jacko1394 commented 4 years ago

I want this too now, After struggling to understand Google Play Console's open / closed beta and alpha test channels, now that I've started using the internal test I find out this, appcenter doesn't distribute there yet. 😢

johnnylambada commented 4 years ago

On the almost anniversary of this request, I have found an imperfect work around: 1) Use AppCenter to make an alpha build 2) In the Google Play Console: a) release management b) app releases c) Internal Test Track -> Manage d) Create Release button e) Add From Library f) You'll find your alpha release in there

You can just create an internal track release from the alpha channel build. It's not a perfect solution and requires some manual work, but at least you don't have to bypass your CI system with a hand-built release.

jamesjlang commented 4 years ago

We really could use the ability to distribute to an internal test track. Alpha and Beta are pretty useless for internal testing due to the delay.

msifniotis-bbc commented 4 years ago

Google Play review times are now est 7-14 days and Alpha/Beta build uploads reset the waiting times. https://techcrunch.com/2020/03/17/android-app-reviews-may-slow-to-over-a-week-due-to-covid-19-impacts-google-warns-developers

Could we please please ask again to add internal testing to the distribution channels?

Mikilll94 commented 4 years ago

Any update on this? When App Center will support internal test track?

smn-snkl commented 4 years ago

Why is this not implemented yet? Can anyone explain it to me?

I think you'd also make the Play Console review team very happy. They get a lot of useless review requests from all the teams like us that also use the process described by @johnnylambada.

tdekoning commented 4 years ago

@ahdbilal We are on the point to move away from app center if this will not be resolved, our automatic deploy resets the review queue, thus no update is coming through any more.

MattWard-Ideagen commented 4 years ago

@ahdbilal We are on the point to move away from app center if this will not be resolved, our automatic deploy resets the review queue, thus no update is coming through any more.

We reached the same conclusion that AppCenter priorities don't align with ours or anyone wanting continuous deployment to test, and we now use DevOps for the build and deployment and store then publish the artifact back to AppCenter.

lklepner commented 4 years ago

The way AppCenter has handled this seemingly simple feature request undermines my confidence in AppCenter overall.

phatmann commented 4 years ago

It is clear that App Center is on maintenance. They have not fixed a single issue or feature request in almost 2 years and announced they won't be doing so until mid 2021. We are going to look for other solutions. Could be Bitrise, Nevercode, CircleCI (shudder!), or GitHub Actions.

iori57 commented 4 years ago

I got around it by making my own appcenter-post-build.sh script that uploads to Google Play

Thanks @airman00! Your post build script way works like a charm :) Just have to slightly modify the python script to remove the OBB stuff as I am not using OBB and it is not optional in the python script, it gives error that -e must be set.

plaa commented 3 years ago

@phatmann Do you have a source for the claim that no new features / bugs will be implemented until mid 2021? We're also wondering whether it's time to move elsewhere.

Edit: Apparently it's in their Roadmap 2020:

Just like any software engineering team, as we focused on building and scaling App Center, we accumulated technical debt that can no longer be sustained. Therefore, as we look to what is next, the App Center team will prioritize improving reliability and performance for the service through mid-2021. This means new feature work will be significantly reduced.

I agree that waiting this long for basic features is likely to kill the project 🙁 Did you find some other service you'd recommend?

phatmann commented 3 years ago

I was using CircleCI before this so I went back to it. Not ideal, but they had improved the Mac service in the meantime so it worked out for me. And I still had all the config files 😄

worm69 commented 3 years ago

maybe in 2021

MNorgren commented 3 years ago

Please Microsoft - at least provide us an update...

gabriel-tentaculo commented 3 years ago

Voted

coffeemug commented 3 years ago

One more vote for the app center team that this is a pretty important feature.

Thunderbird7 commented 3 years ago

~1 year ago ... nothing change. Good job MS!

beeradmoore commented 3 years ago

For those wondering what AppCenter is on this, I pinged them via support and just got this response.

Hello Brad, thank you for contacting App Center support. I understand the feature gap here and I've seem this gap has been blocking a lot of our customers. However, currently App Center is under maintenance mode till mid this year and we are working on service reliability, bug fixing and performance improvement. Please see our roadmap here: https://github.com/Microsoft/appcenter#planningWith this being said, I am sorry to say that there's no short term plan for this feature at this moment. Please let me know if you have any further questions.

akaegi commented 3 years ago

Thanks @airman00 for your uploadApk script. This solution seems a viable workaround for me until MS has done its homework...

I adapted these a little for my needs:

Feel free use them in your setups as well:

Hope someone can make some use of it!

https://gist.github.com/akaegi/23c5f5cb129fda2c38b62d1dd98dedeb

anshu-daytoday commented 3 years ago

Voted

dineshtrivedi commented 3 years ago

+1

kostiantyn-solianyk commented 3 years ago

So?

ghost commented 3 years ago

This issue has been automatically marked as stale because it has not had any activity for 60 days. It will be closed if no further activity occurs within 15 days of this comment.

beeradmoore commented 3 years ago

ping

worm69 commented 3 years ago

Up

kostiantyn-solianyk commented 3 years ago

ping

nibblesnbits commented 3 years ago

+1

pavshr commented 3 years ago

Any updates?

kostiantyn-solianyk commented 2 years ago

UP

droidluv commented 2 years ago

I salute the brave warriors here keeping this thread alive, in the meantime, I picked up nodejs and became the lead BE engineer on one of my company project's, got married, had a beautiful baby girl, and lol even the pandemic started after my last comment before this one, so yeah the world has moved on, except for the progress on the issue in this thread.

worm69 commented 2 years ago

I salute the brave warriors here keeping this thread alive, in the meantime, I picked up nodejs and became the lead BE engineer on one of my company project's, got married, had a beautiful baby girl, and lol even the pandemic started after my last comment before this one, so yeah the world has moved on, except for the progress on the issue in this thread.

Epic comment you win🤣😂😵

saranonearth commented 2 years ago

I salute the brave warriors here keeping this thread alive, in the meantime, I picked up nodejs and became the lead BE engineer on one of my company project's, got married, had a beautiful baby girl, and lol even the pandemic started after my last comment before this one, so yeah the world has moved on, except for the progress on the issue in this thread.

Lol 🤣

kostiantyn-solianyk commented 2 years ago

Taking into account all the comments here, and the needs of the current feature request, it could be awesome to get some updates/comments from the AppCenter team. Almost 3 years this feature request has been opened and looks like it's one of the most discussed.

CC: @Oddj0b

akamenev commented 2 years ago

Thank you all for your input! Unfortunately, we are still working on the performance and availability of a service as stated in our rodmap and we do not introduce any new features for now. There is no ETA for this feature at the moment, I will keep this feature request open for future planning.