Giter Club home page Giter Club logo

google-play-vsts-extension's Introduction

Visual Studio Team Services Extension for Google Play
Provides build/release tasks that enable performing continuous delivery to the Google Play store from an automated VSTS build or release definition
Install now!

Visual Studio Team Services Extension for Google Play

Build status

This extension contains a set of deployment tasks which allow you to automate the release, promotion and rollout of app updates to the Google Play store from your CI environment. This can reduce the effort needed to keep your internal test, alpha, beta, rollout and production deployments up-to-date, since you can simply push changes to the configured source control branches, and let your automated build take care of the rest.

Prerequisites

This extension supports Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) 2017 and later.

In order to automate the release of app updates to the Google Play store, you need to have manually released at least one version through the Google Play Developer Console. Additionally, you need to create a service account that is authorized to manage your app(s) releases on your behalf and can be used to authenticate "headlessly" from your VSTS build/release definitions. If you haven't already done so, then perform the following steps to create a service account:

For a more in depth guide click this link.

  1. Login to the Google Play Developer Console and select Setup in the left-hand navigation menu (the gear icon)

  2. Select the API access setting and click the Create Service Account button underneath the Service Accounts section

  3. Follow the provided Google Developers Console hyperlink

  4. Click the Create credentials button in the displayed modal dialog, and select Service account key (with the role "Owner")

  5. Select JSON as the Key type and click the Create button

  6. Save the provided JSON file somewhere safe and memorable. You'll be using it later.

  7. Back in the Google Play Developer Console, click the Done button to close the modal

  8. Click the Grant access button in the row associated with the service account you just created.

  9. Ensure that the Role is set to Release Manager and then click the Add user button

To take advantage of the metadata updating capabilities, files need to be organized using fastlane’s supply tool format:

  1. Install the supply tool
sudo gem install supply
  1. Navigate to your root folder
cd [your_project_folder]
  1. Download metadata for an existing app to the project folder
supply init

Quick Start

Once you have created or retrieved credentials for you Google Play service account, then perform the following steps to automate releasing updates from a VSTS build or release definition:

  1. Install the Google Play extension from the VSTS Marketplace

  2. Go to your Visual Studio Team Services or TFS project, click on the Build tab, and create a new build definition (the "+" icon) that is hooked up to your project's appropriate source repo

  3. Click Add build step... and select the neccessary tasks to generate your release assets (e.g. Gulp, Cordova Build)

  4. Click Add build step... and select Google Play - Release from the Deploy category

  5. Configure the Google Play - Release task with the JSON private key file created above, the generated APK file, and the desired release track.

  6. Click the Queue Build button or push a change to your configured repo in order to run the newly defined build pipeline

  7. Your app changes will now be automatically published to the Google Play store!

Configuring Your Google Play Publisher Credentials

In addition to specifying your publisher credentials file directly within each build task, you can also configure your credentials globally and refer to them within each build or release definition as needed. To do this, perform the following steps:

  1. Setup a publishing manager (https://play.google.com/apps/publish/) and get the JSON key file from the Google Developer API console

  2. Go into your Visual Studio Team Services or TFS project and click on the gear icon in the lower left corner

  3. Click on the Service Connections tab

  4. Click on New service connection and select Google Play

  5. Give the new endpoint a name and enter the credentials for the publishing manager you generated in step#1. The credentials you need can be found in the JSON file and are the Email and the private key.

  6. Select this endpoint via the name you chose in #5 whenever you add either the Google Play - Release or Google Play - Promote tasks to a build or release definition

Task Reference

In addition to the custom service endpoint, this extension also contributes the following three build and release tasks:

Google Play Release

Allows you to release an update to your app on Google Play: release app bundle or apk, attach obb or mapping file, update metadata. Includes the following options:

  1. JSON Key Path (File path) or Service Endpoint - The credentials used to authenticate with Google Play. This can be acquired from the Google Developer API console and provided either directly to the task (via the JSON Auth File authentication method),

    JSON Auth File

    or configured within a service endpoint that you reference from the task (via the Service Endpoint authentication method).

    Service Endpoint

    Note that in order to use the JSON Auth File method, the JSON file you get from the developer console needs to be checked into your source repo. Please also note that from the point of security it's preferrable to store it as Secure file and download using Download Secure File task.

  2. Application ID (String, Required) - The unique package identifier (e.g. com.foo.myapp) of the bundle you want to release.

  3. Action (String, Required) - Action you want to take in the release. Available options are Only update store listing, Upload single bundle, Upload single apk, Upload multiple apk/aab files.

    Action Input Options

  4. Bundle Path (File path, Required if visible) - Path or glob pattern to the bundle file you want to publish to the specified track. Only visible if action is Upload single bundle.

    Bundle Path

  5. APK Path (File path, Required if visible) - Path or glob pattern to the APK file you want to publish to the specified track. Only visible if action is Upload single apk.

    APK Path

  6. Bundle paths, APK paths (Multiline, Optional) - Paths or glob patterns to the APK/AAB files you want to publish to the specified track. It's required that at least one APK/AAB is picked up from these inputs, otherwise the task will fail. Only visible if action is Upload multiple apk/aab files.

    APK/AAB Paths

  7. Upload OBB for APK (Boolean, Optional) - Whether or not to pick up OBB files for each of the specified APKs. Only visible if action is Upload single apk or Upload multiple apk/aab files.

    Attach OBB For APK

  8. Track (String, Required) - Release track to publish the APK to. This input is editable but provides default options: Internal test, Alpha, Beta, Production.

    Track

  9. Update Metadata (Boolean, Optional) - Allows automating metadata updates to the Google Play store by reading the contents of the Metadata Root Directory.

    Update Metadata

  10. Metadata Root Directory (String, Required if visible) - Root directory for metadata related files. Becomes available after enabling the Update Metadata option. Expects a format similar to fastlane’s supply tool which is summarized below:

$(Specified Directory)
   └ $(languageCodes)
     ├ full_description.txt
     ├ short_description.txt
     ├ title.txt
     ├ video.txt
     ├ images
     |  ├ featureGraphic.png    || featureGraphic.jpg   || featureGraphic.jpeg
     |  ├ icon.png              || icon.jpg             || icon.jpeg
     |  ├ promoGraphic.png      || promoGraphic.jpg     || promoGraphic.jpeg
     |  ├ tvBanner.png          || tvBanner.jpg         || tvBanner.jpeg
     |  ├ phoneScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  ├ sevenInchScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  ├ tenInchScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  ├ tvScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  └ wearScreenshots
     |     └ *.png || *.jpg || *.jpeg
     └ changelogs
       ├ $(versioncodes).txt
       └ default.txt
  1. Release Notes (File path) - Path to the file specifying the release notes for the release you are publishing. Only visible if Update metadata option is disabled.

    Release Notes

  2. Language Code (String, Optional) - An IETF language tag identifying the language of the release notes as specified in the BCP-47 document. Default value is en-US. Only visible if Update metadata option is disabled.

  3. Release notes contain language tags (Boolean, Optional) - Allows adding the release notes file containing language tags. Only visible if Update metadata option is disabled.

  • The releaseNotesContainLanguageTags input:

    releaseNotesContainLanguageTags

  • The Release Notes file content example:

<en-US>
    Minor updates, bug fixes, and performance improvements.
</en-US>
<fr-FR>
    Mises à jour mineures, corrections de bogues et améliorations des performances.
</fr-FR>
<it-IT>
    Aggiornamenti minori, correzioni di bug e miglioramenti delle prestazioni.
</it-IT>
  • Result if the releaseNotesContainLanguageTags input is set to false (by default):

    releaseNotesContainLanguageTags is false

  • Result if the releaseNotesContainLanguageTags input is set to true (the Language Code input will be ignored):

    releaseNotesContainLanguageTags is true

  1. Update Metadata (Boolean, Optional) - Allows automating metadata updates to the Google Play store by leveraging the contents of the Metadata Root Directory.

    Update Metadata

Advanced Options

  1. Set in-app update priority (Boolean, Optional) - Enables to set in-app update priority. Not visible if action is Only update store listing.

    Update Priority

  2. Update priority (Number, Required if visible) - How strongly to recommend an update to the user. An integer value between 0 and 5, with 0 being the default and 5 being the highest priority. Only visible if Set in-app update priority is enabled.

  3. Roll out release (Boolean, Optional) - Allows to roll out the release to a percentage of users. Not visible if action is Only update store listing.

    Rollout Fraction

  4. User fraction (Number, Required if visible) - The percentage of users to roll the specified APK out to, specified as a number between 0 and 1 (e.g. 0.5 == 50% of users).

  5. Upload deobfuscation file (Boolean, Optional) - Allows to attach your proguard mapping.txt file to your aab/apk. Only visible if action is Upload single apk or Upload single bundle.

    Mapping File

  6. Deobfuscation path (File path, Required if visible) - The path to the proguard mapping.txt file to upload. Glob patterns are supported. Only visible if Upload deobfuscation file is enabled.

  7. Upload native debug symbols (Boolean, Optional) - Allows to attach native debug symbols zip archive to your aab/apk. Only visible if action is Upload single apk or Upload single bundle.

    Mapping File

  8. Deobfuscation path (File path, Required if visible) - The path to the native debug symbols zip archive to upload. Glob patterns are supported. Only visible if Upload native debug symbols is enabled.

  9. Send changes to review (Boolean, Optional) - Select this option to send changes for review in GooglePlay Console. If changes are already sent for review automatically, you shouldn't select this option.

    Send Changes To Review

  10. Release name (String, Optional) - Allows to set meaningful release name that can be seen in your Google Play Console. It won't be visible to your users.

    Send Changes To Review

  11. Replace version codes (String, Required) - You may specify which APK version codes should be replaced in the track with this deployment. Available options are: All, List - comma separated list of version codes, Regular expression - a regular expression pattern to select a list of APK version codes to be removed from the track with this deployment, e.g. .\*12?(3|4)?5

  12. Replace Version Codes (String, Optional) - Specify version codes to replace in the selected track with the new APKs/AABs: all, the comma separated list, or a regular expression pattern. Not visible if action is Only update store listing.

    Advanced Options

  13. Version Code List (String, Required if visible) - The comma separated list of version codes to be removed from the track with this deployment. Only available if Replace Version Codes value is List.

  14. Version Code Pattern (String, Required if visible) - The regular expression pattern to select a list of version codes to be removed from the track with this deployment, e.g. .*12?(3|4)?5. Only available if Replace Version Codes value is Regular expression.

Google Play - Release V3 (deprecated in favor of Google Play - Release V4)

Allows you to release an update to your app on Google Play, and includes the following options:

  1. JSON Key Path (File path) or Service Endpoint - The credentials used to authenticate with Google Play. This can be acquired from the Google Developer API console and provided either directly to the task (via the JSON Auth File authentication method),

    JSON Auth File

    or configured within a service endpoint that you reference from the task (via the Service Endpoint authentication method).

    Service Endpoint

    Note that in order to use the JSON Auth File method, the JSON file you get from the developer console needs to be checked into your source repo. Please also note that from the point of security it's preferrable to store it as Secure file and download using Download Secure File task.

  2. APK Path (File path, Required) - Path to the APK file you want to publish to the specified track.

    APK Path

  3. Track (String, Required) - Release track to publish the APK to.

    Track

  4. Rollout Fraction (String, Required if visible) - The percentage of users to roll the specified APK out to, specified as a number between 0 and 1 (e.g. 0.5 == 50% of users).

    Rollout Fraction

  5. Release Notes (File path) - Path to the file specifying the release notes for the APK you are publishing.

    Release Notes

  6. Language Code (String, Optional) - An IETF language tag identifying the language of the release notes as specified in the BCP-47 document. Default value is en-US.

  7. Update Metadata (Boolean, Optional) - Allows automating metadata updates to the Google Play store by leveraging the contents of the Metadata Root Directory.

    Update Metadata

  8. Metadata Root Directory (String, Required if visible) - Root directory for metadata related files. Becomes available after enabling the Update Metadata option. Expects a format similar to fastlane’s supply tool which is summarized below:

$(Specified Directory)
   └ $(languageCodes)
     ├ full_description.txt
     ├ short_description.txt
     ├ title.txt
     ├ video.txt
     ├ images
     |  ├ featureGraphic.png    || featureGraphic.jpg   || featureGraphic.jpeg
     |  ├ icon.png              || icon.jpg             || icon.jpeg
     |  ├ promoGraphic.png      || promoGraphic.jpg     || promoGraphic.jpeg
     |  ├ tvBanner.png          || tvBanner.jpg         || tvBanner.jpeg
     |  ├ phoneScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  ├ sevenInchScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  ├ tenInchScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  ├ tvScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  └ wearScreenshots
     |     └ *.png || *.jpg || *.jpeg
     └ changelogs
       └ $(versioncodes).txt
  1. Update only store listing (Boolean, Optional) - By default, the task will update the specified track and selected APK file(s) will be assigned to the related track. By selecting this option you can update only store listing. Default value is false.

    Advanced Options

  2. Update APK(s) (Boolean, Optional) - By default, the task will update the specified binary APK file(s) on your app release. By unselecting this option you can update metadata keeping the APKs untouched. Default value is true.

    Update APKs

Advanced Options

  1. Additional APK Path(s) (Text box) - Paths to additional APK files you want to publish to the specified track (e.g. an x86 build) separated by new lines. This option allows the usage of wildcards and/or minimatch patterns. For example, **/*.apk to match the first APK file, in any directory.

    Advanced Options

  2. Replace version codes (String, Required) - You may specify which APK version codes should be replaced in the track with this deployment. Available options are: All, List - comma separated list of version codes, Regular expression - a regular expression pattern to select a list of APK version codes to be removed from the track with this deployment, e.g. .\*12?(3|4)?5

Google Play - Promote

Allows you to promote a previously released APK from one track to another (e.g. alpha -> beta), and includes the following options:

Promote task

  1. JSON Key Path (File path) or Service Endpoint - The credentials used to authenticate with Google Play. This can be acquired from the Google Developer API console and provided either directly to the task (via the JSON Auth File authentication method), or configured within a service endpoint that you reference from the task (via the Service Endpoint authentication method). Note that in order to use the JSON Auth File method, the JSON file you get from the developer console needs to be checked into your source repo. Please note that from the point of security it's preferrable to store it as Secure file and download using Download Secure File task.

  2. Package Name (String, Required) - The unique package identifier (e.g. com.foo.myapp) that you wish to promote.

  3. Version Code (String, Optional) - The version code of the apk (e.g. 123) that you whish to promote. If no version code is given, the latest version on the specified track will be promoted.

  4. Source Track (Required, Required) - The track you wish to promote your app from (e.g. alpha). This assumes that you previously released an update to this track, potentially using the Google Play - Release task.

  5. Destination Track (Required, Required) - The track you wish to promote your app to (e.g. production).

  6. Rollout Fraction (String, Required if visible) - The percentage of users to roll the app out to, specified as a number between 0 and 1 (e.g. 0.5 == 50% of users). If you use rollout, and want to be able to automate the process of increasing the rollout over time, refer to the Google Play - Increase Rollout task.

  7. Clean Source Track (Boolean, Optional) - Clean the source track. Default value is true.

Google Play - Increase Rollout

Allows you to increase the rollout percentage of an app that was previously released to the Rollout track, and includes the following options:

Increase task

  1. JSON Key Path (File path) or Service Endpoint - The credentials used to authenticate with Google Play. This can be acquired from the Google Developer API console and provided either directly to the task (via the JSON Auth File authentication method), or configured within a service endpoint that you reference from the task (via the Service Endpoint authentication method). Note that in order to use the JSON Auth File method, the JSON file you get from the developer console needs to be checked into your source repo. Please note that from the point of security it's preferrable to store it as Secure file and download using Download Secure File task.

  2. Package Name (String, Required) - The unique package identifier (e.g. com.foo.myapp) of the app you wish to increase the rollout percentage for.

  3. Rollout Fraction (String, Required) - The new user fraction to increase the rollout to, specified as a number between 0 and 1 (e.g. 0.5 == 50% of users)

Google Play - Status Update

Allows you to update the status of an app that was previously released to the selected track (e.g. inProgress -> halted), and includes the following options:

Status Update task

  1. JSON Key Path (File path) or Service Endpoint - The credentials used to authenticate with Google Play. This can be acquired from the Google Developer API console and provided either directly to the task (via the JSON Auth File authentication method), or configured within a service endpoint that you reference from the task (via the Service Endpoint authentication method). Note that in order to use the JSON Auth File method, the JSON file you get from the developer console needs to be checked into your source repo. Please note that from the point of security it's preferrable to store it as Secure file and download using Download Secure File task.

  2. Package Name (String, Required) - The unique package identifier (e.g. com.foo.myapp) of the app you wish to update the status for.

  3. Track (String, Required) - The track you wish to update the status of your app from (e.g. alpha). This assumes that you previously released an update to this track, potentially using the Google Play - Release task.

  4. Status (String, Required) - The status of the release you want to update to.

    Status

  5. User Fraction (String, Optional) - The new user fraction to update the rollout to, specified as a number between 0 and 1 (e.g. 0.5 == 50% of users, does not contain 0 and 1). If the input User Fraction is not specified, will maintain the current user fraction without updating (Notice: if you want to update the status to inProgress or halted, make sure current user fraction or the input User Fraction is specified).

Google Play - Release Bundle (deprecated in favor of Google Play - Release V4)

Allows you to release an app bundle to Google Play, and includes the following options:

  1. JSON Key Path (File path) or Service Endpoint - The credentials used to authenticate with Google Play. This can be acquired from the Google Developer API console and provided either directly to the task (via the JSON Auth File authentication method),

    JSON Auth File

    or configured within a service endpoint that you reference from the task (via the Service Endpoint authentication method).

    Service Endpoint

    Note that in order to use the JSON Auth File method, the JSON file you get from the developer console needs to be checked into your source repo. Please note that from the point of security it's preferrable to store it as Secure file and download using Download Secure File task.

  2. Application Id (String, Required) - The application id of the bundle you want to release, e.g. com.company.MyApp.

    Application id

  3. Bundle Path (File path, Required) - Path to the bundle (.aab) file you want to publish to the specified track. Wildcards can be used. For example, **/*.aab to match the first APK file, in any directory.

  4. Track (String, Required) - Track you want to publish the bundle to.

  5. Roll out Release (Boolean, Optional) - Roll out the release to a percentage of users.

  6. Update Metadata (Boolean, Optional) - Allows automating metadata updates to the Google Play store by leveraging the contents of the Metadata Root Directory.

  7. Release Notes (file) (File path, Required if visible) - Path to the file specifying the release notes (change log) for the APK you are publishing.

    Release Notes

  8. Language Code (String, Required if visible) - An IETF language tag identifying the language of the release notes as specified in the BCP-47 document. Default value is en-US.

  9. Deobfuscation Path (String, Optional) - The path to the proguard mapping.txt file to upload.

  10. Rollout Fraction (String, Optional) - The percentage of users the specified APK will be released to for the specified 'Track'. It can be increased later with the 'Google Play - Increase Rollout' task.

  11. Metadata Root Directory (String, Required) - Root directory for metadata related files. Becomes available after enabling the Update Metadata option. Expects a format similar to fastlane’s supply tool which is summarized below:

$(Specified Directory)
   └ $(languageCodes)
     ├ full_description.txt
     ├ short_description.txt
     ├ title.txt
     ├ video.txt
     ├ images
     |  ├ featureGraphic.png    || featureGraphic.jpg   || featureGraphic.jpeg
     |  ├ icon.png              || icon.jpg             || icon.jpeg
     |  ├ promoGraphic.png      || promoGraphic.jpg     || promoGraphic.jpeg
     |  ├ tvBanner.png          || tvBanner.jpg         || tvBanner.jpeg
     |  ├ phoneScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  ├ sevenInchScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  ├ tenInchScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  ├ tvScreenshots
     |  |  └ *.png || *.jpg || *.jpeg
     |  └ wearScreenshots
     |     └ *.png || *.jpg || *.jpeg
     └ changelogs
       └ $(versioncodes).txt
  1. Upload Deobfuscation File (mapping.txt) (Boolean, Optional) - Select this option to attach your proguard mapping.txt file to the primary APK.

Advanced Options

  1. Replace Version Codes (String, Optional) - Specify version codes to replace in the selected track with the new APKs: all, the comma separated list, or a regular expression pattern.

    Advanced Options

  2. Version Code List (String, Required if visible) - The comma separated list of APK version codes to be removed from the track with this deployment. Available options are: All, List - comma separated list of version codes, Regular expression - a regular expression pattern to select a list of APK version codes to be removed from the track with this deployment, e.g. .\*12?(3|4)?5

  3. Version Code Pattern (String, Required if visible) - The regular expression pattern to select a list of APK version codes to be removed from the track with this deployment, e.g. .*12?(3|4)?5

Contact Us

Google Play and the Google Play logo are trademarks of Google Inc.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments. Google Play and the Google Play logo are trademarks of Google Inc.

google-play-vsts-extension's People

Contributors

aleksandrlevochkin avatar alexander-smolyakov avatar alexrukhlin avatar anton-erofeev avatar barindervir avatar brcrista avatar daniilshmelev avatar davidstaheli avatar ddfreiling avatar denisrumyantsev avatar egor-bryzgalov avatar erjohnms avatar ezzhevnikita avatar ismayilov-ismayil avatar kanishkabandaru avatar kuleshovilya avatar leantk avatar lkillgore avatar lostintangent avatar madhurig avatar max-zaytsev avatar microsoft-github-policy-service[bot] avatar rub8n avatar ryuyu avatar shishirx34 avatar tomverhoeff avatar vladislav-ryzhov avatar vmapetr avatar xzhe avatar yacaovsnc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

google-play-vsts-extension's Issues

Error when trying to upload screenshot images

When trying to update the metadata in the store with screenshot images it fails to upload the screenshots because the path used in the task is incorrect.

I included some debug information from my build process to clarify the bug.
For screenshot files only the filename is included in the path variable of the upload request. All other images files have the complete path to the file specified.

2016-09-15T07:25:00.7274119Z ##[debug]Starting upload of images with language code en-GB from C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB
2016-09-15T07:25:00.7284103Z ##[debug]Attempting to get images of type featureGraphic
2016-09-15T07:25:00.7284103Z Found image for type featureGraphic at C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\featureGraphic.png
2016-09-15T07:25:00.7284103Z ##[debug]Attempting to get images of type icon
2016-09-15T07:25:00.7284103Z Found image for type icon at C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\icon.png
2016-09-15T07:25:00.7284103Z ##[debug]Attempting to get images of type promoGraphic
2016-09-15T07:25:00.7284103Z ##[debug]File C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\promoGraphic.png doesn't exist. Skipping...
2016-09-15T07:25:00.7284103Z ##[debug]File C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\promoGraphic.jpg doesn't exist. Skipping...
2016-09-15T07:25:00.7294088Z ##[debug]File C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\promoGraphic.jpeg doesn't exist. Skipping...
2016-09-15T07:25:00.7294088Z Image for promoGraphic was not found. Skipping...
2016-09-15T07:25:00.7294088Z ##[debug]Attempting to get images of type tvBanner
2016-09-15T07:25:00.7294088Z ##[debug]File C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\tvBanner.png doesn't exist. Skipping...
2016-09-15T07:25:00.7294088Z ##[debug]File C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\tvBanner.jpg doesn't exist. Skipping...
2016-09-15T07:25:00.7294088Z ##[debug]File C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\tvBanner.jpeg doesn't exist. Skipping...
2016-09-15T07:25:00.7294088Z Image for tvBanner was not found. Skipping...
2016-09-15T07:25:00.7294088Z ##[debug]Attempting to get images of type phoneScreenshots
2016-09-15T07:25:00.7294088Z ##[debug]Found something for type phoneScreenshots
2016-09-15T07:25:00.7304111Z ##[debug]Attempting to get images of type sevenInchScreenshots
2016-09-15T07:25:00.7304111Z ##[debug]Error: ENOENT: no such file or directory, stat 'C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\sevenInchScreenshots'
2016-09-15T07:25:00.7304111Z Image directory for sevenInchScreenshots was not found. Skipping...
2016-09-15T07:25:00.7304111Z ##[debug]Attempting to get images of type tenInchScreenshots
2016-09-15T07:25:00.7304111Z ##[debug]Error: ENOENT: no such file or directory, stat 'C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\tenInchScreenshots'
2016-09-15T07:25:00.7314104Z Image directory for tenInchScreenshots was not found. Skipping...
2016-09-15T07:25:00.7314104Z ##[debug]Attempting to get images of type tvScreenshots
2016-09-15T07:25:00.7314104Z ##[debug]Error: ENOENT: no such file or directory, stat 'C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\tvScreenshots'
2016-09-15T07:25:00.7314104Z Image directory for tvScreenshots was not found. Skipping...
2016-09-15T07:25:00.7314104Z ##[debug]Attempting to get images of type wearScreenshots
2016-09-15T07:25:00.7314104Z ##[debug]Error: ENOENT: no such file or directory, stat 'C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\wearScreenshots'
2016-09-15T07:25:00.7314104Z Image directory for wearScreenshots was not found. Skipping...
2016-09-15T07:25:00.7314104Z ##[debug]Finished enumerating images: {"featureGraphic":["C:\\a\\1\\s\\src\\ProjectName\\ProjectName.Droid\\StoreMetadata\\en-GB\\images\\featureGraphic.png"],"icon":["C:\\a\\1\\s\\src\\ProjectName\\ProjectName.Droid\\StoreMetadata\\en-GB\\images\\icon.png"],"promoGraphic":[],"tvBanner":[],"phoneScreenshots":["MemberFirmList.jpg","Splash.jpg"],"sevenInchScreenshots":[],"tenInchScreenshots":[],"tvScreenshots":[],"wearScreenshots":[]}
2016-09-15T07:25:00.7314104Z ##[debug]All image uploads queued
2016-09-15T07:25:00.7314104Z ##[debug]Uploading image of type featureGraphic from C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\featureGraphic.png
2016-09-15T07:25:00.7324115Z ##[debug]Making image upload request: {"language":"en-GB","imageType":"featureGraphic","uploadType":"media","media":{"body":{"_readableState":{"objectMode":false,"highWaterMark":65536,"buffer":[],"length":0,"pipes":null,"pipesCount":0,"flowing":null,"ended":false,"endEmitted":false,"reading":false,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"defaultEncoding":"utf8","ranOut":false,"awaitDrain":0,"readingMore":false,"decoder":null,"encoding":null},"readable":true,"domain":null,"_events":{},"_eventsCount":1,"path":"C:\\a\\1\\s\\src\\ProjectName\\ProjectName.Droid\\StoreMetadata\\en-GB\\images\\featureGraphic.png","fd":null,"flags":"r","mode":438,"autoClose":true},"mimeType":"image/png"}}
2016-09-15T07:25:03.1833761Z ##[debug]Uploading image of type icon from C:\a\1\s\src\ProjectName\ProjectName.Droid\StoreMetadata\en-GB\images\icon.png
2016-09-15T07:25:03.1843760Z ##[debug]Making image upload request: {"language":"en-GB","imageType":"icon","uploadType":"media","media":{"body":{"_readableState":{"objectMode":false,"highWaterMark":65536,"buffer":[],"length":0,"pipes":null,"pipesCount":0,"flowing":null,"ended":false,"endEmitted":false,"reading":false,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"defaultEncoding":"utf8","ranOut":false,"awaitDrain":0,"readingMore":false,"decoder":null,"encoding":null},"readable":true,"domain":null,"_events":{},"_eventsCount":1,"path":"C:\\a\\1\\s\\src\\ProjectName\\ProjectName.Droid\\StoreMetadata\\en-GB\\images\\icon.png","fd":null,"flags":"r","mode":438,"autoClose":true},"mimeType":"image/png"}}
2016-09-15T07:25:05.0888611Z ##[debug]Uploading image of type phoneScreenshots from MemberFirmList.jpg
2016-09-15T07:25:05.0888611Z ##[debug]Making image upload request: {"language":"en-GB","imageType":"phoneScreenshots","uploadType":"media","media":{"body":{"_readableState":{"objectMode":false,"highWaterMark":65536,"buffer":[],"length":0,"pipes":null,"pipesCount":0,"flowing":null,"ended":false,"endEmitted":false,"reading":false,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"defaultEncoding":"utf8","ranOut":false,"awaitDrain":0,"readingMore":false,"decoder":null,"encoding":null},"readable":true,"domain":null,"_events":{},"_eventsCount":1,"path":"MemberFirmList.jpg","fd":null,"flags":"r","mode":438,"autoClose":true},"mimeType":"image/jpeg"}}
2016-09-15T07:25:05.0918681Z events.js:154
2016-09-15T07:25:05.0918681Z       throw er; // Unhandled 'error' event
2016-09-15T07:25:05.0918681Z       ^
2016-09-15T07:25:05.0918681Z 
2016-09-15T07:25:05.0918681Z Error: ENOENT: no such file or directory, open 'C:\a\1\s\MemberFirmList.jpg'
2016-09-15T07:25:05.0918681Z     at Error (native)
2016-09-15T07:25:05.1168601Z ##[error]Exit code 1 returned from process: file name 'C:\LR\MMS\Services\Mms\TaskAgentProvisioner\Tools\agents\2.105.6\externals\node\bin\node.exe', arguments '"C:\a\_tasks\GooglePlayRelease_8cf7cac0-620b-11e5-b4cf-8565e60f4d27\1.2.3\GooglePlay.js"'.
2016-09-15T07:25:05.1188605Z ##[debug]Microsoft.VisualStudio.Services.Agent.ProcessExitCodeException: Exit code 1 returned from process: file name 'C:\LR\MMS\Services\Mms\TaskAgentProvisioner\Tools\agents\2.105.6\externals\node\bin\node.exe', arguments '"C:\a\_tasks\GooglePlayRelease_8cf7cac0-620b-11e5-b4cf-8565e60f4d27\1.2.3\GooglePlay.js"'.

'Google Play - Release' does not work in Release definition

"Google Play - Release" task fails with "Error: No key or keyFile set." while trying to authenticate with Google when it is added as a step in a Release definition.
If I add it as a step in the Build definition, the same one that creates the artifacts for the failing Release, it uploads the .apk to the play store successfully.

I can confirm that the generated .apk by the build agent is valid (I manually uploaded it to Google Play and it was accepted).
I can also confirm that my .json authentication file is valid, as the step in the Build definition passes.
I can also confirm that my Build definition uploads both the .apk and .json file as artifacts. (by exploring the drop folder, and also by setting my computer as agent, and looking at the files)

Any ideas?

My Release definition consists of only 1 step, (Google Play - Release), and here is the log:

2017-01-13T10:49:47.2396471Z ##[section]Starting: Release $(System.DefaultWorkingDirectory)/Deploy Laegecheck Android/drop/dk.laegecheck.mit.android.apk to alpha 
2017-01-13T10:49:55.8898333Z { [Error: No key or keyFile set.] cause: [Error: No key or keyFile set.], isOperational: true } 
2017-01-13T10:49:55.9054596Z ##[section]Finishing: Release $(System.DefaultWorkingDirectory)/Deploy Laegecheck Android/drop/dk.laegecheck.mit.android.apk to alpha

Wildcards don't work for "Additional APK Path(s)"

After we split our APK into two to target specific CPU architectures and reduce the package size I ran into following problem:

When using the additional APK path(s) option it seems that wildcards and/or relative paths don't seem to work. Instead the VSTS extension tries to load the APK in relation to it's own location on the build agent.

The config for the "main" APK: **/app-android-armv7-release.apk
The config for the additional APK path(s): **/app-android-x86-release.apk

The main APK is found and used correctly, the additional is not as you can see in the attached log.

task_log.txt

I also tried all kinds of relative paths within the source to get the extension to find the file, with and without wildcards, still no luck.
My current workaround is to use absolute local paths on the build agent to upload the file which I won't admit to if I was asked if I really did that. :)

Release task doesn't upload additional APK

When specifying additionalApks input variable, the task uploads a single APK.
There's a bug in the code that iterates through the array of APK:
for (var apk in apkFileList) {
currentEdit = currentEdit.then(function (res) {
console.log(Uploading APK file ${apkFileList[apk]}...);
return addApk(packageName, apkFileList[apk]);
});
}
The variable apk in the anonymous function is not updating between iterations. The suggested fix is to iterate over apkFileList with forEach.

Getting [Error: error:0906D06C:PEM routines:PEM_read_bio:no start line] during publishing to Beta slot.

2016-09-26T05:37:48.1828460Z ##[section]Starting: Release Andoid Panel App to Beta
2016-09-26T05:37:49.6109030Z { [Error: error:0906D06C:PEM routines:PEM_read_bio:no start line]
2016-09-26T05:37:49.6116570Z cause: [Error: error:0906D06C:PEM routines:PEM_read_bio:no start line],
2016-09-26T05:37:49.6123720Z isOperational: true }
2016-09-26T05:37:49.6944220Z ##[section]Finishing: Release Andoid Panel App to Beta

Cannot install extension

I click the "install" button on the marketplace and get the following error:

Extension operation denied by event callback. The task.json file was not found for contribution _build/Tasks/GooglePlayRelease

noPrimarilyChildDirectedStatus error, although status is set!

I have triple checked my Google developer console, to ensure that my app is set to set to NO - that my app is not primarily directed toward children (under age 13). It has been set that way for a long time (weeks/months). But when I run the VSTS release with this extension, I still get the following error.

Error: Error in edits.commitAsync(): {"cause":{"code":403,"errors":[{"domain":"androidpublisher","reason":"noPrimarilyChildDirectedStatus","message":"You are required to indicate if your app is primarily directed towards children in the pricing and distribution section of the Play Console."}]},"isOperational":true,"code":403,"errors":[{"domain":"androidpublisher","reason":"noPrimarilyChildDirectedStatus","message":"You are required to indicate if your app is primarily directed towards children in the pricing and distribution section of the Play Console."}]}

image

Error multiAPKshadowedActiveAPK

Hi,

I got this error:

Authenticated with Google Play and getting new edit
Updating track information...
##[error]Error: Error in edits.commitAsync(): {"cause":{"code":403,"errors":[{"domain":"androidpublisher","reason":"multiApkShadowedActiveApk","message":"Version 10001 of this app can not be downloaded by any devices as they will all receive APKs with higher version codes."}]},"isOperational":true,"code":403,"errors":[{"domain":"androidpublisher","reason":"multiApkShadowedActiveApk","message":"Version 10001 of this app can not be downloaded by any devices as they will all receive APKs with higher version codes."}]}

I want to publish to a beta track with new version code 10004, active version in beta is 10003.
There is no version 10001 anymore?

There was one in the past in alfa, but alfa does not exist anymore as it is replaced by beta.

Please help.

Thanks.

Google Play release task apk upload fail

Hi

I am trying to use the google play release task, i followed the instructions but am getting the following output from the task :

2017-10-07T15:04:48.5462015Z ##[section]Starting: Release $(build.binariesdirectory)/Release/privatemessaging.cdmapplications.com.apk to production
2017-10-07T15:04:48.5462015Z ==============================================================================
2017-10-07T15:04:48.5462015Z Task         : Google Play - Release
2017-10-07T15:04:48.5462015Z Description  : Release an app to the Google Play Store
2017-10-07T15:04:48.5462015Z Version      : 1.119.0
2017-10-07T15:04:48.5462015Z Author       : Microsoft Corporation
2017-10-07T15:04:48.5462015Z Help         : 
2017-10-07T15:04:48.5462015Z ==============================================================================
2017-10-07T15:04:49.3441140Z Found main APK to upload: d:/a/1/b/Release/privatemessaging.cdmapplications.com.apk (version code 1)
2017-10-07T15:04:49.7803261Z Authenticated with Google Play and getting new edit 
2017-10-07T15:04:56.0858037Z ##[error]Error: Failed to upload the APK d:/a/1/b/Release/privatemessaging.cdmapplications.com.apk.
2017-10-07T15:04:56.1046803Z ##[section]Finishing: Release $(build.binariesdirectory)/Release/privatemessaging.cdmapplications.com.apk to production

I can see it found my apk at path d:/a/1/b/Release/privatemessaging.cdmapplications.com.apk which is correct because i also upload it as an artifact of the build.
d:/a/1/b/Release/privatemessaging.cdmapplications.com.apk (version code 1)

Then authentication seems to succeed
Authenticated with Google Play and getting new edit

Then fail :
[error]Error: Failed to upload the APK d:/a/1/b/Release/privatemessaging.cdmapplications.com.apk.

This is a screenshot of my task settings :

settingsplayrelease

Screenshot of the api access entry in the play console (dutch but i highlighted the role).

releasemanagerapi

Any help is greatly appreciated.

Thanks.

Extension does not work with wildcards

on the Visual Studio Extension page it shows the apk file being defined as:

**/*.apk

If you try this in your upload it will show this in the logs:

After prefix Artifact Path Root provide by JobExtension. The Path is a rooted path, but it is not fully qualified, return the path: C:\agent_work\r1\a***.apk
[2017-06-07 11:47:07Z ERR ReleaseJobExtension] System.ArgumentException: Illegal characters in path.
Parameter name: path
at System.IO.Path.GetFullPath(String path)
at Microsoft.VisualStudio.Services.Agent.Worker.Release.ReleaseJobExtension.GetRootedPath(IExecutionContext context, String path)

and fail the upload.

This error is also not passed back to the task in VSO, you need to check the physical log file to find this error:

reported back to the VSO task is:

##[error]{"cause":{},"isOperational":true}

Which is not helpful

Logs say publish is successful, but APK does not arrive in Developer Console

Hi,

I've been trying to implement a deployment pipeline with this extension but I can't seem to get the deployment to the Play Developer console to work. The log below says that everything should be OK but the APK doesn't appear in the developer console either in Manage Releases or the Artifact Library.

I am using the Service Endpoint authentication method and I'm trying to push to the Production track (I have tried with the other tracks too but same result).

2017-08-08T14:07:17.8175876Z ==============================================================================
2017-08-08T14:07:17.8175876Z Task         : Google Play - Release
2017-08-08T14:07:17.8175876Z Description  : Release an app to the Google Play Store
2017-08-08T14:07:17.8175876Z Version      : 1.119.0
2017-08-08T14:07:17.8175876Z Author       : Microsoft Corporation
2017-08-08T14:07:17.8175876Z Help         : 
2017-08-08T14:07:17.8175876Z ==============================================================================
2017-08-08T14:07:18.8762110Z fea63291-e3d0-4f46-a734-3b22e7c39368 exists true
2017-08-08T14:07:19.8697983Z Found main APK to upload: d:/a/r1/a/xxx/drop/com.domain.app.apk (version code 507)
2017-08-08T14:07:19.8706927Z Authenticated with Google Play and getting new edit 
2017-08-08T14:07:57.1334049Z APK successfully published!
2017-08-08T14:07:57.1343854Z Track: production

If you need any further info, please let me know.

Thanks

This app does not have any APKs in any tracks.

Hi, since the update of the Task from Version 1.1.0 to 1.2.0 i became the following error:

2016-06-28T08:24:59.3676476Z Updating track information...
2016-06-28T08:24:59.3676476Z ##[debug]Updating track
2016-06-28T08:24:59.3830071Z ##[debug]Additional Parameters: {"packageName":"com.????.????","track":"beta","resource":{"track":"beta"}}
2016-06-28T08:25:00.1955861Z ##[debug]task result: Failed
2016-06-28T08:25:00.1955861Z { [Error: This app does not have any APKs in any tracks.
2016-06-28T08:25:00.1955861Z This app does not have any APKs in any tracks.]
2016-06-28T08:25:00.1955861Z cause:
2016-06-28T08:25:00.1955861Z { [Error: This app does not have any APKs in any tracks.
2016-06-28T08:25:00.1955861Z This app does not have any APKs in any tracks.] code: 403, errors: [ [Object], [Object] ] },
2016-06-28T08:25:00.1955861Z isOperational: true,
2016-06-28T08:25:00.1955861Z code: 403,
2016-06-28T08:25:00.1955861Z errors:
2016-06-28T08:25:00.1955861Z [ { domain: 'androidpublisher',
2016-06-28T08:25:00.1955861Z reason: 'noActiveApks',
2016-06-28T08:25:00.1955861Z message: 'This app does not have any APKs in any tracks.' },
2016-06-28T08:25:00.1955861Z { domain: 'androidpublisher',
2016-06-28T08:25:00.2111842Z reason: 'noActiveApks',
2016-06-28T08:25:00.2111842Z message: 'This app does not have any APKs in any tracks.' } ] }

the Additional Parameters before was:

2016-06-20T12:52:57.3830717Z Updating track information...
2016-06-20T12:52:57.3830717Z ##[debug]Updating track
2016-06-20T12:52:57.3830717Z ##[debug]Additional Parameters: {"packageName":"com.????.????","track":"beta","resource":{"track":"beta","versionCodes":[11137]}}
2016-06-20T12:53:01.2386387Z APK successfully published!

Since this is not working our automatic deployment should be done manually!

Unexpted token when running task

We have a on premise TFS 2015 Update 2. When running Google Play Release task, I always get illegal charcater error. I have found that replacing all ` (backstick character) to " resolved the problem. I belive that it crashes on our machine because our node is 0.12.2. I can (and probably should) update node to newer version, but on the other hand using backstick only to make it possible to use appostrophe in console.log doesn't seem like a good idea. I can prepare a pull request to fix it, this change should enable this task to work on vanilla TFS 2015 Update 2 and still it should also work on newer node versions.
Below is the error I kept getting:

2017-01-10T14:28:31.7850116Z Set workingFolder to default:
C:\VSOAgent1\tasks\GooglePlayRelease\1.3.0

2017-01-10T14:28:31.9725099Z C:\VSOAgent1\tasks\GooglePlayRelease\1.3.0\GooglePlay.js:24

2017-01-10T14:28:31.9725099Z tl.debug(`Couldn't stat keyfile ${serviceAccountKeyFile}. This task wi

2017-01-10T14:28:31.9881346Z ^

2017-01-10T14:28:31.9881346Z SyntaxError: Unexpected token ILLEGAL

Promoting from Alpha fails

Error is:

Error: Rollout user fraction must be greater than 0.0 and less than 1.0

I would like Rollout fraction to be 100% so I have tried the following values:

1.0 - failed
blank - failed

I'm guessing 0.99 would work, but obviously this would mean it would only go to 99% of my users

Change log is hard coded to US English language

We get an error from Google Play saying "Tried to set recent changes text for APK version 3 for language en-US. Language is not associated with the app."

I suggest making this language configurable instead of hard coding it to "en-US" in Tasks/google-play-release/GooglePlay.js line 248.

return addChangelog("en-US", changelogFile, apkVersionCode);

Error: No key or keyFile set

I'm getting the following error message. Any suggestions on how I can resolve this?

2017-01-27T23:12:40.2174208Z ==============================================================================
2017-01-27T23:12:40.2174208Z Task : Google Play - Release
2017-01-27T23:12:40.2174208Z Description : Release an app to the Google Play Store
2017-01-27T23:12:40.2174208Z Version : 1.112.0
2017-01-27T23:12:40.2174208Z Author : Microsoft Corporation
2017-01-27T23:12:40.2174208Z Help :
2017-01-27T23:12:40.2174208Z ==============================================================================
2017-01-27T23:12:41.6278473Z { [Error: No key or keyFile set.] cause: [Error: No key or keyFile set.], isOperational: true }
2017-01-27T23:12:41.6398473Z ##[error]Failed to publish APKs.

Beta release fails when Alpha is present

Hi,
We have an on-premise TFS 2015 running version 1.112.0 of the Google Play extension.

When running the "Google Play Release" task to the Beta channel the deployment fails when there is an Alpha release. This seems to happen even if the Alpha release already has been overridden/deactivated by a manual Beta deployment.

We run our build successfully, and the APK is created successfully. We have even tried to promote the Alpha to Beta before deploying the new Beta. Same issue. After a manual Beta deployment the Alpha is listed as superseded by the Beta, and deactivated. In other words a Beta deployment should be possible, but even now it seems to stop on the old Alpha.

I have seen this issue described on forums, but no fix has been presented. Other tools seems to do a specific deactivation of the Alpha before deploying the Beta, in accordance with how Google Developer Console does this. But this is not the case for us. Is this "feature" not present in this extension?

Here is the output from TFS when it fails:

2017-03-03T10:48:46.9491733Z Uploading APK file D:/Builds/31/bin/Release/no.locus.transfleetmobile.apk...
 
2017-03-03T10:48:46.9501734Z ##[debug]Uploading a new apk: D:/Builds/31/bin/Release/no.locus.transfleetmobile.apk
 
2017-03-03T10:48:46.9511735Z ##[debug]Additional Parameters: {"packageName":"no.locus.transfleetmobile","media":{"body":{"_readableState":{"objectMode":false,"highWaterMark":65536,"buffer":[],"length":0,"pipes":null,"pipesCount":0,"flowing":null,"ended":false,"endEmitted":false,"reading":false,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"defaultEncoding":"utf8","ranOut":false,"awaitDrain":0,"readingMore":false,"decoder":null,"encoding":null},"readable":true,"domain":null,"_events":{},"_eventsCount":1,"path":"D:/Builds/31/bin/Release/no.locus.transfleetmobile.apk","fd":null,"flags":"r","mode":438,"autoClose":true},"mimeType":"application/vnd.android.package-archive"}}
 
2017-03-03T10:48:58.2793062Z ##[debug]Uploaded version code 5923
2017-03-03T10:48:58.2793062Z Updating track information...
2017-03-03T10:48:58.2803063Z ##[debug]Updating track
2017-03-03T10:48:58.2823065Z ##[debug]Additional Parameters: {"packageName":"no.locus.transfleetmobile","track":"beta","resource":{"track":"beta","versionCodes":[5923]}}
2017-03-03T10:48:58.7033486Z ##[debug]Upload change logs if specified...
2017-03-03T10:48:58.7073490Z ##[debug]Commit all the edits
2017-03-03T10:49:00.6955478Z { [Error: Version 5862 of this app can not be downloaded by any devices as they will all receive APKs with higher version codes.]
2017-03-03T10:49:00.6965479Z   cause: { [Error: Version 5862 of this app can not be downloaded by any devices as they will all receive APKs with higher version codes.] code: 403, errors: [ [Object] ] },
2017-03-03T10:49:00.6975480Z   isOperational: true,
2017-03-03T10:49:00.6975480Z   code: 403,
2017-03-03T10:49:00.6985481Z   errors: 
2017-03-03T10:49:00.6995482Z    [ { domain: 'androidpublisher',
2017-03-03T10:49:00.7005483Z        reason: 'multiApkShadowedActiveApk',
2017-03-03T10:49:00.7015484Z        message: 'Version 5862 of this app can not be downloaded by any devices as they will all receive APKs with higher version codes.' } ] }
2017-03-03T10:49:00.7015484Z ##[debug]task result: Failed
2017-03-03T10:49:00.7025485Z ##[error]Failed to publish APKs. 

Note the version numbers above. The 5862 version is the OLD Alpha that has been superseded already, but it is still stopping the deployment.

Is there a fix for this?

Thanks!

Deploying to Alpha stage is failing

I am building (build gradle task) and signing (release task) an APK file, using my VSTS account, and I am now trying to publish the APK file to Google Play, using this VSTS extension.

I have setup the release definition with 2 tasks:
Signing and Aligning APK file(s)
Google Play - Release

I have setup a Service Endpoint to GooglePlay, and is using this as the authentication method as well. The ServicePoint is setup with the provided (and unmodified JSON file receive from the Google Developer Console).

The deployment step fails with this trace:

2017-12-15T12:20:10.0271913Z ##[section]Starting: Release $(System.DefaultWorkingDirectory)/7 Seas Trader-Android-CI/drop/android/build/outputs/apk/android-release-unsigned.apk to alpha
2017-12-15T12:20:10.0283496Z ==============================================================================
2017-12-15T12:20:10.0283969Z Task         : Google Play - Release
2017-12-15T12:20:10.0284391Z Description  : Release an app to the Google Play Store
2017-12-15T12:20:10.0284800Z Version      : 1.119.0
2017-12-15T12:20:10.0285179Z Author       : Microsoft Corporation
2017-12-15T12:20:10.0285568Z Help         : 
2017-12-15T12:20:10.0285983Z ==============================================================================
2017-12-15T12:20:10.4324661Z ##[debug]agent.workFolder=d:\a
2017-12-15T12:20:10.4377598Z ##[debug]loading inputs and endpoints
2017-12-15T12:20:10.4396276Z ##[debug]loading ENDPOINT_AUTH_c7fb0f04-bc98-4bbc-badb-e612da3b801e
2017-12-15T12:20:10.4412265Z ##[debug]loading ENDPOINT_AUTH_PARAMETER_c7fb0f04-bc98-4bbc-badb-e612da3b801e_PASSWORD
2017-12-15T12:20:10.4421467Z ##[debug]loading ENDPOINT_AUTH_PARAMETER_c7fb0f04-bc98-4bbc-badb-e612da3b801e_USERNAME
2017-12-15T12:20:10.4424298Z ##[debug]loading ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN
2017-12-15T12:20:10.4427047Z ##[debug]loading ENDPOINT_AUTH_SCHEME_c7fb0f04-bc98-4bbc-badb-e612da3b801e
2017-12-15T12:20:10.4433088Z ##[debug]loading ENDPOINT_AUTH_SCHEME_SYSTEMVSSCONNECTION
2017-12-15T12:20:10.4435883Z ##[debug]loading ENDPOINT_AUTH_SYSTEMVSSCONNECTION
2017-12-15T12:20:10.4439120Z ##[debug]loading INPUT_APKFILE
2017-12-15T12:20:10.4441471Z ##[debug]loading INPUT_AUTHTYPE
2017-12-15T12:20:10.4443938Z ##[debug]loading INPUT_CHANGELOGFILE
2017-12-15T12:20:10.4446284Z ##[debug]loading INPUT_LANGUAGECODE
2017-12-15T12:20:10.4457599Z ##[debug]loading INPUT_METADATAROOTPATH
2017-12-15T12:20:10.4458223Z ##[debug]loading INPUT_SERVICEACCOUNTKEY
2017-12-15T12:20:10.4458806Z ##[debug]loading INPUT_SERVICEENDPOINT
2017-12-15T12:20:10.4460191Z ##[debug]loading INPUT_SHOULDATTACHMETADATA
2017-12-15T12:20:10.4462682Z ##[debug]loading INPUT_SHOULDUPLOADAPKS
2017-12-15T12:20:10.4465260Z ##[debug]loading INPUT_TRACK
2017-12-15T12:20:10.4467723Z ##[debug]loading INPUT_VERSIONCODEFILTERTYPE
2017-12-15T12:20:10.4484899Z ##[debug]loaded 18
2017-12-15T12:20:11.3767605Z ##[debug]check path : d:\a\_tasks\GooglePlayRelease_8cf7cac0-620b-11e5-b4cf-8565e60f4d27\1.119.0\task.json
2017-12-15T12:20:11.3768930Z ##[debug]set resource file to: d:\a\_tasks\GooglePlayRelease_8cf7cac0-620b-11e5-b4cf-8565e60f4d27\1.119.0\task.json
2017-12-15T12:20:11.3778824Z ##[debug]system.culture=en-US
2017-12-15T12:20:11.3780363Z ##[debug]Prepare task inputs.
2017-12-15T12:20:11.3781178Z ##[debug]authType=ServiceEndpoint
2017-12-15T12:20:11.3782003Z ##[debug]serviceEndpoint=c7fb0f04-bc98-4bbc-badb-e612da3b801e
2017-12-15T12:20:11.3782706Z c7fb0f04-bc98-4bbc-badb-e612da3b801e exists true
2017-12-15T12:20:11.3783523Z ##[debug]c7fb0f04-bc98-4bbc-badb-e612da3b801e exists true
2017-12-15T12:20:11.3784447Z ##[debug]apkFile=d:\a\r1\a\7 Seas Trader-Android-CI\drop\android\build\outputs\apk\android-release-unsigned.apk
2017-12-15T12:20:11.3785463Z ##[debug]Main APK pattern: d:\a\r1\a\7 Seas Trader-Android-CI\drop\android\build\outputs\apk\android-release-unsigned.apk
2017-12-15T12:20:11.3823986Z ##[debug]check path : d:/a/r1/a/7 Seas Trader-Android-CI/drop/android/build/outputs/apk/android-release-unsigned.apk
2017-12-15T12:20:11.4518918Z Found main APK to upload: d:/a/r1/a/7 Seas Trader-Android-CI/drop/android/build/outputs/apk/android-release-unsigned.apk (version code 1)
2017-12-15T12:20:11.4522366Z ##[debug]    Found the main APK file: d:/a/r1/a/7 Seas Trader-Android-CI/drop/android/build/outputs/apk/android-release-unsigned.apk (version code 1).
2017-12-15T12:20:11.4523614Z ##[debug]additionalApks=null
2017-12-15T12:20:11.4526185Z ##[debug]versionCodeFilterType=all
2017-12-15T12:20:11.4528491Z ##[debug]track=alpha
2017-12-15T12:20:11.4529489Z ##[debug]userFraction=null
2017-12-15T12:20:11.4532032Z ##[debug]shouldAttachMetadata=false
2017-12-15T12:20:11.4534408Z ##[debug]shouldUploadApks=true
2017-12-15T12:20:11.4536630Z ##[debug]changelogFile=d:\a\r1\a
2017-12-15T12:20:11.4538764Z ##[debug]languageCode=en-US
2017-12-15T12:20:11.4543946Z ##[debug]Getting a package name from d:/a/r1/a/7 Seas Trader-Android-CI/drop/android/build/outputs/apk/android-release-unsigned.apk
2017-12-15T12:20:11.4835006Z ##[debug]Successfully extracted the package name dk.talgames from the APK d:/a/r1/a/7 Seas Trader-Android-CI/drop/android/build/outputs/apk/android-release-unsigned.apk
2017-12-15T12:20:11.4836368Z ##[debug]Updating Global Parameter packageName to "dk.talgames"
2017-12-15T12:20:11.4837442Z ##[debug]   ... updated.
2017-12-15T12:20:11.4839504Z ##[debug]Initializing JWT.
2017-12-15T12:20:11.4842844Z ##[debug]Initializing Google Play publisher API.
2017-12-15T12:20:11.5177685Z ##[debug]Authorize JWT.
2017-12-15T12:20:11.8455707Z ##[debug]task result: Failed
2017-12-15T12:20:11.8541360Z ##[error]Error: invalid_client
2017-12-15T12:20:11.8541862Z ##[debug]Processed: ##vso[task.issue type=error;]Error: invalid_client
2017-12-15T12:20:11.8594881Z ##[debug]Processed: ##vso[task.complete result=Failed;]Error: invalid_client
2017-12-15T12:20:11.8598788Z ##[section]Finishing: Release $(System.DefaultWorkingDirectory)/7 Seas Trader-Android-CI/drop/android/build/outputs/apk/android-release-unsigned.apk to alpha


The signing and aligning step ends successfully, even though it does not produce a new APK file without the -unsigned attribute. The only other APK file available in the drop folder is the debug version.

"TypeError: the target of promisifyAll must be an object or a function" using Increase Rollout step

I encounter an error when using the Increase Rollout task.

Step configuration:
step configuration

Error log:

2017-06-30T21:31:53.7339450Z ##[section]Starting: Increase com.roofsnap.schemingorca rollout fraction to .25 2017-06-30T21:31:53.7469450Z ============================================================================== 2017-06-30T21:31:53.7479450Z Task : Google Play - Increase Rollout 2017-06-30T21:31:53.7479450Z Description : Increase the rollout fraction of an app previously deployed to the Google Play Store 2017-06-30T21:31:53.7479450Z Version : 1.112.0 2017-06-30T21:31:53.7479450Z Author : Microsoft Corporation 2017-06-30T21:31:53.7479450Z Help : 2017-06-30T21:31:53.7479450Z ============================================================================== 2017-06-30T21:31:54.8666817Z c44c8717-c8ae-422d-b9bd-69bce0286783 exists true 2017-06-30T21:31:54.8786825Z ##[error]TypeError: the target of promisifyAll must be an object or a function 2017-06-30T21:31:54.8786825Z 2017-06-30T21:31:54.8786825Z See http://goo.gl/9ITlV0 2017-06-30T21:31:54.8786825Z 2017-06-30T21:31:54.8806819Z 2017-06-30T21:31:54.8806819Z See http://goo.gl/9ITlV0 2017-06-30T21:31:54.8806819Z 2017-06-30T21:31:54.8856827Z ##[section]Finishing: Increase com.roofsnap.schemingorca rollout fraction to .25

error:0906D06C:PEM - Release to Alpha

I am on the hosted agent queue attempting to upload to Google play.

I am getting the following when attempting to release to alpha channel:

2016-08-31T05:32:20.5448303Z { [Error: error:0906D06C:PEM routines:PEM_read_bio:no start line]

2016-08-31T05:32:20.5458310Z   cause: [Error: error:0906D06C:PEM routines:PEM_read_bio:no start line],

2016-08-31T05:32:20.5458310Z   isOperational: true }

2016-08-31T05:32:20.5468301Z ##[debug]task result: Fail

Getting 403 error when publish app to production

Hi,

im getting this error when im publishing to production:

Error: Error in edits.commitAsync(): {"cause":{"code":403,"errors":[{"domain":"androidpublisher","reason":"multiApkShadowedActiveApk","message":"Version 2017451900 of this app can not be downloaded by any devices as they will all receive APKs with higher version codes."}]},"isOperational":true,"code":403,"errors":[{"domain":"androidpublisher","reason":"multiApkShadowedActiveApk","message":"Version 2017451900 of this app can not be downloaded by any devices as they will all receive APKs with higher version codes."}]}

System.Exception: Task GooglePlayRelease failed. This caused the job to fail. Look at the logs for the task for more details. at Microsoft.TeamFoundation.DistributedTask.Worker.JobRunner.Run(IJobContext jobContext, IJobRequest job, IJobExtension jobExtension, CancellationTokenSource tokenSource)

My version number whish is going to be uploaded is higher than the uploaded version number. I checked the checkbox with Update APK.

The same step to beta does work like a charm.

Any idea? I have installed the current version.

Error on VSTS task install

Hi

I'm getting "An undefined error occurred while attempting to connect to the server. Status code 0: error." when I try and add to my VSTS.

Any ideas?

Regards

Dave

Unhelpful error message during Deploy to Alpha

Hello,

I've been trying to get this extension to work and am having some issues. I've resolved about five issues thanks to the helpful error messages.

Now however, I've come across a seemingly random error message:

2017-06-21T00:38:13.2441818Z ##[debug]Error: APK has invalid or missing signing information for some files.

I was wondering if this is a known issue and what the solution is or if it's possible to put more verbose logging in to track down the issue.

Here's the full output:

2017-06-21T01:03:42.8008920Z ##[debug]Evaluating condition for step: 'Release $(build.sourcesdirectory)//app-release.apk to alpha'
2017-06-21T01:03:42.8008920Z ##[debug]Evaluating: succeeded()
2017-06-21T01:03:42.8008920Z ##[debug]Evaluating succeeded:
2017-06-21T01:03:42.8008920Z ##[debug]=> (Boolean) True
2017-06-21T01:03:42.8008920Z ##[debug]Expanded: True
2017-06-21T01:03:42.8008920Z ##[debug]Result: True
2017-06-21T01:03:42.8008920Z ##[section]Starting: Release $(build.sourcesdirectory)/
/app-release.apk to alpha
2017-06-21T01:03:42.8018921Z ==============================================================================
2017-06-21T01:03:42.8018921Z Task : Google Play - Release
2017-06-21T01:03:42.8018921Z Description : Release an app to the Google Play Store
2017-06-21T01:03:42.8018921Z Version : 1.119.0
2017-06-21T01:03:42.8018921Z Author : Microsoft Corporation
2017-06-21T01:03:42.8018921Z Help :
2017-06-21T01:03:42.8018921Z ==============================================================================
2017-06-21T01:03:43.0328916Z ##[debug]agent.workFolder=d:\a
2017-06-21T01:03:43.0328916Z ##[debug]loading inputs and endpoints
2017-06-21T01:03:43.2268925Z ##[debug]loading ENDPOINT_AUTH_28c6fde1-1111-4338-8108-da6fd2151462
2017-06-21T01:03:43.2278923Z ##[debug]loading ENDPOINT_AUTH_PARAMETER_28c6fde1-1111-4338-8108-da6fd2151462_PASSWORD
2017-06-21T01:03:43.4188921Z ##[debug]loading ENDPOINT_AUTH_PARAMETER_28c6fde1-1111-4338-8108-da6fd2151462_USERNAME
2017-06-21T01:03:43.4198925Z ##[debug]loading ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN
2017-06-21T01:03:43.4198925Z ##[debug]loading ENDPOINT_AUTH_SCHEME_28c6fde1-1111-4338-8108-da6fd2151462
2017-06-21T01:03:43.4198925Z ##[debug]loading ENDPOINT_AUTH_SCHEME_SYSTEMVSSCONNECTION
2017-06-21T01:03:43.4198925Z ##[debug]loading ENDPOINT_AUTH_SYSTEMVSSCONNECTION
2017-06-21T01:03:43.4198925Z ##[debug]loading INPUT_APKFILE
2017-06-21T01:03:43.4198925Z ##[debug]loading INPUT_AUTHTYPE
2017-06-21T01:03:43.4198925Z ##[debug]loading INPUT_CHANGELOGFILE
2017-06-21T01:03:43.4198925Z ##[debug]loading INPUT_LANGUAGECODE
2017-06-21T01:03:43.4198925Z ##[debug]loading INPUT_METADATAROOTPATH
2017-06-21T01:03:43.4208918Z ##[debug]loading INPUT_SERVICEACCOUNTKEY
2017-06-21T01:03:43.4208918Z ##[debug]loading INPUT_SERVICEENDPOINT
2017-06-21T01:03:43.4208918Z ##[debug]loading INPUT_SHOULDATTACHMETADATA
2017-06-21T01:03:43.4208918Z ##[debug]loading INPUT_SHOULDUPLOADAPKS
2017-06-21T01:03:43.4208918Z ##[debug]loading INPUT_TRACK
2017-06-21T01:03:43.4208918Z ##[debug]loading INPUT_VERSIONCODEFILTERTYPE
2017-06-21T01:03:43.4208918Z ##[debug]loaded 18
2017-06-21T01:03:43.6228919Z ##[debug]check path : d:\a_tasks\GooglePlayRelease_8cf7cac0-620b-11e5-b4cf-8565e60f4d27\1.119.0\task.json
2017-06-21T01:03:43.6228919Z ##[debug]set resource file to: d:\a_tasks\GooglePlayRelease_8cf7cac0-620b-11e5-b4cf-8565e60f4d27\1.119.0\task.json
2017-06-21T01:03:43.7318922Z ##[debug]system.culture=en-US
2017-06-21T01:03:43.7318922Z ##[debug]Prepare task inputs.
2017-06-21T01:03:43.7318922Z ##[debug]authType=ServiceEndpoint
2017-06-21T01:03:43.7318922Z ##[debug]serviceEndpoint=28c6fde1-1111-4338-8108-da6fd2151462
2017-06-21T01:03:43.7318922Z 28c6fde1-1111-4338-8108-da6fd2151462 exists true
2017-06-21T01:03:43.7318922Z ##[debug]28c6fde1-1111-4338-8108-da6fd2151462 exists true
2017-06-21T01:03:43.7318922Z ##[debug]apkFile=d:\a\1\s*\app-release.apk
2017-06-21T01:03:43.7328923Z ##[debug]Main APK pattern: d:\a\1\s*
\app-release.apk
2017-06-21T01:03:44.3638924Z ##[debug]check path : d:/a/1/s/app/app-release.apk
2017-06-21T01:03:44.4068919Z Found main APK to upload: d:/a/1/s/app/app-release.apk (version code 1)
2017-06-21T01:03:44.4068919Z ##[debug] Found the main APK file: d:/a/1/s/app/app-release.apk (version code 1).
2017-06-21T01:03:44.4068919Z ##[debug]additionalApks=null
2017-06-21T01:03:44.4068919Z ##[debug]versionCodeFilterType=all
2017-06-21T01:03:44.4068919Z ##[debug]track=alpha
2017-06-21T01:03:44.4068919Z ##[debug]userFraction=null
2017-06-21T01:03:44.4068919Z ##[debug]shouldAttachMetadata=false
2017-06-21T01:03:44.4068919Z ##[debug]shouldUploadApks=true
2017-06-21T01:03:44.4068919Z ##[debug]changelogFile=d:\a\1\s
2017-06-21T01:03:44.4078924Z ##[debug]languageCode=en-US
2017-06-21T01:03:44.4078924Z ##[debug]Getting a package name from d:/a/1/s/app/app-release.apk
2017-06-21T01:03:44.4378922Z ##[debug]Successfully extracted the package name com.awesomeness.souschef2 from the APK d:/a/1/s/app/app-release.apk
2017-06-21T01:03:44.4388920Z ##[debug]Updating Global Parameter packageName to "com.awesomeness.souschef2"
2017-06-21T01:03:44.4388920Z ##[debug] ... updated.
2017-06-21T01:03:44.4398926Z ##[debug]Initializing JWT.
2017-06-21T01:03:44.4398926Z ##[debug]Initializing Google Play publisher API.
2017-06-21T01:03:44.4558926Z ##[debug]Authorize JWT.
2017-06-21T01:03:44.5958922Z Authenticated with Google Play and getting new edit
2017-06-21T01:03:44.5958922Z ##[debug]Creating a new edit transaction in Google Play.
2017-06-21T01:03:44.6068925Z ##[debug]Request Parameters: {"packageName":"com.awesomeness.souschef2"}
2017-06-21T01:03:44.8158936Z ##[debug]Updating Global Parameter editId to "01836179824824654883"
2017-06-21T01:03:44.8158936Z ##[debug] ... updated.
2017-06-21T01:03:44.8158936Z ##[debug]Uploading 1 APK(s).
2017-06-21T01:03:44.8158936Z ##[debug]Uploading APK d:/a/1/s/app/app-release.apk
2017-06-21T01:03:44.8168927Z ##[debug]Request Parameters: {"packageName":"com.awesomeness.souschef2","media":{"body":{"_readableState":{"objectMode":false,"highWaterMark":65536,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":null,"pipesCount":0,"flowing":null,"ended":false,"endEmitted":false,"reading":false,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"defaultEncoding":"utf8","ranOut":false,"awaitDrain":0,"readingMore":false,"decoder":null,"encoding":null},"readable":true,"domain":null,"_events":{},"_eventsCount":1,"path":"d:/a/1/s/app/app-release.apk","fd":null,"flags":"r","mode":438,"autoClose":true,"bytesRead":0},"mimeType":"application/vnd.android.package-archive"}}
2017-06-21T01:03:46.2068904Z ##[debug]Failed to upload the APK d:/a/1/s/app/app-release.apk
2017-06-21T01:03:46.2078911Z ##[debug]Error: APK has invalid or missing signing information for some files.
2017-06-21T01:03:46.2078911Z ##[debug]task result: Failed
2017-06-21T01:03:46.2128923Z ##[error]Error: Failed to upload the APK d:/a/1/s/app/app-release.apk.
2017-06-21T01:03:46.2128923Z ##[debug]Processed: ##vso[task.issue type=error;]Error: Failed to upload the APK d:/a/1/s/app/app-release.apk.
2017-06-21T01:03:46.2128923Z ##[debug]Processed: ##vso[task.complete result=Failed;]Error: Failed to upload the APK d:/a/1/s/app/app-release.apk.
2017-06-21T01:03:46.2168915Z ##[section]Finishing: Release $(build.sourcesdirectory)/**/app-release.apk to alpha

Bug in node-apk-parser module (Index out of range) (Android Studio 3.0 - Latest Gradle)

I have a ZipAligned and signed APK. When I execute the task Google Play - Release I get the following error:

...
Task         : Google Play - Release
Version      : 1.119.0
...
apkFile=S:\Agent\_work\10\s\output\release-signed\*.apk
Main APK pattern: S:\Agent\_work\10\s\output\release-signed\*.apk
check path : S:/Agent/_work/10/s/output/release-signed/app-release-signed-zipaligned.apk
task result: Failed
RangeError: Index out of range

The error occures at line 45 in GooglePlay.js:

let mainVersionCode = apkParser.readFile(apkFile).readManifestSync().versionCode;

So it seems like it orginate from the node-apk-parser module.

I have also verified the AndroidManifest.xml-file to be correct and contain all information needed (manual upload to Google Play of the same APK works).

The build agent runs Windows.

Any tip to solve this?

Allow release task to update metadata without uploading the APK(s)

Currently, you can upload APK(s) without the metadata. It would help if you could update the metadata without uploading the APK(s).
The suggestion is to add a checkbox to allow skipping APK upload. When selected, it will hide the APK and additional APK(s) inputs, and upload of APK(s) will be skipped.

Upload obb files

Is it possible to upload OBB files via this plugin? I placed the obb file in the same folder as the APK in the right format, but it did not seem to upload.

Google Play Connection

I'm having difficulties authenticating to Google Play through the service endpoint. The issue seems to be with the private key.

The instructions say to enter the Private Key like:
Enter the private key from the Google Play Developer Console in the format: -----BEGIN PRIVATE KEY-----\nYourPrivateKeyHere\n-----END PRIVATE KEY-----\n

This is what I've tried along with the results:
-----BEGIN PRIVATE KEY-----
YourPrivateKeyHere
-----END PRIVATE KEY-----
error:0906D066:PEM routines:PEM_read_bio:bad end line

-----BEGIN PRIVATE KEY-----\nYourPrivateKeyHere\n-----END PRIVATE KEY-----\n
error:0906D064:PEM routines:PEM_read_bio:bad base64 decode

-----BEGIN PRIVATE KEY-----YourPrivateKeyHere-----END PRIVATE KEY-----
error:0906D066:PEM routines:PEM_read_bio:bad end line

-----BEGIN PRIVATE KEY-----YourPrivateKeyHere-----END PRIVATE KEY-----\n
error:0906D066:PEM routines:PEM_read_bio:bad end line

Is there supposed to be something special for the YourPrivateKeyHere part? json or something?

No application was found for the given package name

When I try and deploy my project, I get this error from the Release step:

Authenticated with Google Play and getting new edit
{ [Error: No application was found for the given package name.]
cause: { [Error: No application was found for the given package name.] code: 404, errors: [ [Object] ] },
isOperational: true,
code: 404,
errors:
[ { domain: 'global',
reason: 'applicationNotFound',
message: 'No application was found for the given package name.',
locationType: 'parameter',
location: 'packageName' } ] }

I've setup the app in the Play store. How do I set the package name so it sees the link? It seems to be able to connect, but doesn't upload the files.

Feature request - Multiple APK Support

Apps that take advantage of Multiple APK Support need a way to release a new version to one APK while keeping other APKs active.
For example, if an app has 2 active APKs in Production track, one for API level 4-7, and the other for API level 8+, the extension should allow to release an updated APK to the API level 8+, while keeping the APK for API level 4-7 active.

Google Play release doesnt work with no error details

Trying to release my application to the Alpha track returns the following log:

2017-06-07T10:24:46.1082473Z ##[section]Starting: Release **/.apk to alpha
2017-06-07T10:24:46.1238716Z ==============================================================================
2017-06-07T10:24:46.1238716Z Task : Google Play - Release
2017-06-07T10:24:46.1238716Z Description : Release an app to the Google Play Store
2017-06-07T10:24:46.1238716Z Version : 1.117.6
2017-06-07T10:24:46.1238716Z Author : Microsoft Corporation
2017-06-07T10:24:46.1238716Z Help :
2017-06-07T10:24:46.1238716Z ==============================================================================
2017-06-07T10:24:47.4493124Z ##[error]{}
2017-06-07T10:24:47.4493124Z ##[error]Failed to publish APKs.
2017-06-07T10:24:47.4493124Z ##[section]Finishing: Release **/
.apk to alpha

No logging information displayed in VSO on error

If an error occurs all that is shown in VSO is

##[error]{"cause":{},"isOperational":true}

You need to look at agent log files to find out whats gone wrong. Not possible if youre using a virtual machine in VS cloud

Getting Index out of range error

After upgrading to version 3.0
I'm getting the follwing error:
##[error]RangeError: Index out of range

The generated APK is working, since I can manually upload it to the Google Play Console.

2017-10-31T12:04:32.4750827Z Task : Google Play - Release
2017-10-31T12:04:32.4750827Z Description : Release an app to the Google Play Store
2017-10-31T12:04:32.4750827Z Version : 1.119.0
2017-10-31T12:04:32.4750827Z Author : Microsoft Corporation
2017-10-31T12:04:32.4750827Z Help :
2017-10-31T12:04:32.4750827Z ==============================================================================
2017-10-31T12:04:36.7692068Z ##[error]RangeError: Index out of range

Failed to create a new edit transaction for the package. Error: null

hi
I am using Goggle Play - Release to release strait to Beta channel.
The process fails.
I am getting that the error is null........
Please help.....

Here are the full logs (system.debug=true):

Found main APK to upload: /Users/vsts/agent/2.126.0/work/1/s/platforms/android/build/outputs/apk/android-release.apk (version code 307030)
Found the main APK file: /Users/vsts/agent/2.126.0/work/1/s/platforms/android/build/outputs/apk/android-release.apk (version code 307030).
additionalApks=null
versionCodeFilterType=all
track=beta
userFraction=null
shouldAttachMetadata=false
shouldUploadApks=true
changelogFile=/Users/vsts/agent/2.126.0/work/1/s
languageCode=en-US
Getting a package name from /Users/vsts/agent/2.126.0/work/1/s/platforms/android/build/outputs/apk/android-release.apk
Updating Global Parameter packageName to "com.diamining.hybrid.Barbi"
... updated.
Initializing JWT.
Initializing Google Play publisher API.
Authorize JWT.
Authenticated with Google Play and getting new edit
Creating a new edit transaction in Google Play.
Request Parameters: {"packageName":"com.diamining.hybrid.Barbi"}
Failed to create a new edit transaction for the package com.diamining.hybrid.Barbi.
Error: null
task result: Failed
Error: Failed to create a new edit transaction for the package com.diamining.hybrid.Barbi. Failed with message: Error: null. See log for details.
Processed: ##vso[task.issue type=error;]Error: Failed to create a new edit transaction for the package com.diamining.hybrid.Barbi. Failed with message: Error: null. See log for details.
Processed: ##vso[task.complete result=Failed;]Error: Failed to create a new edit transaction for the package com.diamining.hybrid.Barbi. Failed with message: Error: null. See log for details.


Finishing: Release to beta


Failed to create a new edit transaction for the package.

Hi,

I have been trying to upload my apk to google play store and end up with this error:
##[error]Error: Failed to create a new edit transaction for the package [package name]. See log for details.

I'm guessing it could be some issue with the service account. as I quoted in the prerequisite section:

  1. Back in the Google Play Developer Console, click the Done button to close the modal
  1. Click the Grant access button in the row associated with the service account you just created.
  2. Ensure that the Role is set to Release Manager and then click the Add user button

There is any role as Release Manager in Service Account creation. I wonder if it has changed.
image

Regards,
Erlangga

APKFile path doesn't accept minimatch patterns

Hello,

Publish task doesn't work with minimatch patterns like HockeyApp task or similar.

Google Play Task:
2016-05-02T12:25:26.7287130Z Set workingFolder to default: C:\LR\MMS\Services\Mms\TaskAgentProvisioner\Tools\agents\1.98.1\tasks\google-play-release\1.0.0 2016-05-02T12:25:28.4089451Z ##[debug]authType=ServiceEndpoint ++++++++ 2016-05-02T12:25:28.4349451Z ##[debug]apkFile="C:\a\299bac696\Compass BETA Build artifact\compass-2.0-android-artifact\CompassApp-releaseKey-production-*-build*.apk" 2016-05-02T12:25:28.4359446Z ##[debug]track=alpha 2016-05-02T12:25:28.4359446Z ##[debug]userFraction= 2016-05-02T12:25:28.4369449Z ##[debug]changeLogFile=C:\a\299bac696\Compass BETA Build artifact\compass-2.0-android-release-notes-artifact\releaseNotes.txt 2016-05-02T12:25:28.4379447Z ##[debug]Candidate package: "C:\a\299bac696\Compass BETA Build artifact\compass-2.0-android-artifact\CompassApp-releaseKey-production-*-build*.apk" 2016-05-02T12:25:28.4379447Z The specified APK file isn't valid. Please check the path and try to queue another build. 2016-05-02T12:25:28.4379447Z ##[debug]name extraction from apk failed: Invalid filename 2016-05-02T12:25:28.4389448Z ##[debug]Updating Global Parameters 2016-05-02T12:25:28.4389448Z ##[debug]SETTING packageName TO null 2016-05-02T12:25:28.4439448Z ##[debug]Global Params set to {"auth":{"transporter":{},"opts":{},"credentials":{"refresh_token":"jwt-placeholder","expiry_date":1},"email":********,"keyFile":null,"key":"********","scopes":["https://www.googleapis.com/auth/androidpublisher"],"subject":null},"params":{"packageName":null}} 2016-05-02T12:25:28.4439448Z Authenticating with Google Play 2016-05-02T12:25:28.6805507Z ##[debug]Creating a new edit 2016-05-02T12:25:28.6815524Z ##[debug]Additional Parameters: {"packageName":null} 2016-05-02T12:25:28.6885524Z { [Error: Missing required parameters: packageName] 2016-05-02T12:25:28.6885524Z cause: [Error: Missing required parameters: packageName], 2016-05-02T12:25:28.6895520Z isOperational: true } 2016-05-02T12:25:28.6895520Z ##[debug]task result: Failed

HockeyApp task:
2016-05-02T12:21:05.6720859Z Set workingFolder to default: C:\LR\MMS\Services\Mms\TaskAgentProvisioner\Tools\agents\1.98.1\tasks\HockeyApp\0.9.24 ++++++ 2016-05-02T12:21:06.8399318Z ##[debug]binaryPath=C:\a\299bac696\Compass BETA Build artifact\compass-2.0-android-artifact\CompassApp-releaseKey-integration-*-build*.apk 2016-05-02T12:21:06.8399318Z ##[debug]symbolsPath=C:\a\299bac696 2016-05-02T12:21:06.8409307Z ##[debug]nativeLibraryPath=C:\a\299bac696 2016-05-02T12:21:06.8409307Z ##[debug]notesPath=C:\a\299bac696\Compass BETA Build artifact\compass-2.0-android-release-notes-artifact\releaseNotes.txt +++++++ 2016-05-02T12:21:06.8449308Z ##[debug]build.buildId=6733 2016-05-02T12:21:06.8459301Z ##[debug]BUILD_SOURCEDIRECTORY=undefined 2016-05-02T12:21:06.8459301Z ##[debug]BUILD_SOURCESDIRECTORY=undefined 2016-05-02T12:21:06.8469306Z ##[debug]SYSTEM_DefaultWorkingDirectory=C:\a\299bac696 2016-05-02T12:21:06.8469306Z ##[debug]check path : C:/a/299bac696/Compass BETA Build artifact/compass-2.0-android-artifact/CompassApp-releaseKey-integration-2.16.1.6733-build216100.apk

As you can see Hockeyapp task finds the correct file, but Google Play task fails!

[Question] How do you use Additional APK's?

I've been looking at the documentation and screenshots shown here

Advanced Options

Additional APK Path(s) (Text box) - Paths to additional APK files you want to publish to the specified track (e.g. an x86 build) separated by new lines. This option allows the usage of wildcards and/or minimatch patterns. For example, */.apk to match the first APK file, in any directory.
image

how do I specify an apk for each target architecture?

The screenshot just shows a wilcard to .apk - which architecture is that targeting?

Internal test channel is not available

There is a new "Internal test" channel available on play console. How to target to this channel?

I am aware of Alpha, Beta, Production, Rollout channels exists already. This is a new one, I guess.

Agent Fails with no specific reason

I have run the agent and it is failing but I cant tell why. The log states:

[2017-06-07 11:55:37Z INFO ProcessInvoker] Starting process:
[2017-06-07 11:55:37Z INFO ProcessInvoker] File name: 'C:\agent\externals\node\bin\node.exe'
[2017-06-07 11:55:37Z INFO ProcessInvoker] Arguments: '"C:\agent_work_tasks\GooglePlayRelease_8cf7cac0-620b-11e5-b4cf-8565e60f4d27\1.117.6\GooglePlay.js"'
[2017-06-07 11:55:37Z INFO ProcessInvoker] Working directory: 'C:\agent_work\r1\a'
[2017-06-07 11:55:37Z INFO ProcessInvoker] Require exit code zero: 'True'
[2017-06-07 11:55:37Z INFO ProcessInvoker] Encoding web name: utf-8 ; code page: '65001'
[2017-06-07 11:55:37Z INFO ProcessInvoker] Force kill process on cancellation: 'False'
[2017-06-07 11:55:37Z INFO ProcessInvoker] Process started with process id 880, waiting for process exit.
[2017-06-07 11:55:37Z INFO JobServerQueue] Try to append 1 batches web console lines, success rate: 1/1.
[2017-06-07 11:55:38Z INFO JobServerQueue] Try to upload 1 log files or attachments, success rate: 1/1.
[2017-06-07 11:55:38Z INFO JobServerQueue] Try to append 1 batches web console lines, success rate: 1/1.
[2017-06-07 11:55:39Z INFO ProcessInvoker] Finished process with exit code 0, and elapsed time 00:00:01.4219335.
[2017-06-07 11:55:39Z INFO StepsRunner] Step result: Failed

Screenshot images are getting duplicated

Hi. Images in the store are getting duplicated after two metadata updates. According to the documentation, the process should remove all existing screenshot and replace them with new images from the metadata folder.

Add support for wildcards in apk file path

Allow wildcards in the apk file path. This is critical for when you have generated version numbers in the file name.
Example: "app/build/outputs/apk/app_-release-v_.apk"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.