{"id":20187470,"url":"https://github.com/bitrise-steplib/steps-google-play-deploy","last_synced_at":"2025-04-06T03:10:28.877Z","repository":{"id":46239416,"uuid":"46971928","full_name":"bitrise-steplib/steps-google-play-deploy","owner":"bitrise-steplib","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-22T16:43:23.000Z","size":21088,"stargazers_count":54,"open_issues_count":6,"forks_count":38,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-03-30T02:07:42.358Z","etag":null,"topics":["bitrise","bitrise-step","ci","hacktoberfest","production-code"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bitrise-steplib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-27T09:37:44.000Z","updated_at":"2024-09-26T08:18:52.000Z","dependencies_parsed_at":"2024-12-16T04:06:12.606Z","dependency_job_id":"699cbe19-4d99-4d2f-b7df-133eaae79cef","html_url":"https://github.com/bitrise-steplib/steps-google-play-deploy","commit_stats":{"total_commits":119,"total_committers":27,"mean_commits":4.407407407407407,"dds":0.7815126050420168,"last_synced_commit":"26aa360af996eab443a0e34d1849a6ea0c31502a"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitrise-steplib%2Fsteps-google-play-deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitrise-steplib%2Fsteps-google-play-deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitrise-steplib%2Fsteps-google-play-deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitrise-steplib%2Fsteps-google-play-deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bitrise-steplib","download_url":"https://codeload.github.com/bitrise-steplib/steps-google-play-deploy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247427006,"owners_count":20937201,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitrise","bitrise-step","ci","hacktoberfest","production-code"],"created_at":"2024-11-14T03:24:07.660Z","updated_at":"2025-04-06T03:10:28.859Z","avatar_url":"https://github.com/bitrise-steplib.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Google Play Deploy\n\n[![Step changelog](https://shields.io/github/v/release/bitrise-io/steps-google-play-deploy?include_prereleases\u0026label=changelog\u0026color=blueviolet)](https://github.com/bitrise-io/steps-google-play-deploy/releases)\n\nUpload your Android app to Google Play.\n\n\u003cdetails\u003e\n\u003csummary\u003eDescription\u003c/summary\u003e\n\nThe Step uploads your Android app to Google Play. It works with both APK and AAB files.\n\nPlease note that in order to successfully use this Step, you must [upload your first APK or AAB file manually](https://support.google.com/googleplay/android-developer/answer/9859152?hl=en\u0026visit_id=637407764704794872-3953166533\u0026rd=1), using Google's own web interface!\nOnce you uploaded one APK or AAB of your app to Google Play manually, you can use our Step for all subsequent versions.\n\n### Configuring the Step\n\nThe Step uses Google's API so before attempting to use the Step, you need to [Set up Google API access](https://devcenter.bitrise.io/deploy/android-deploy/deploying-android-apps/#setting-up-google-play-api-access). This includes:\n- [Linking your Google Developer Console to an API project](https://developers.google.com/android-publisher/getting_started#linking_your_api_project).\n- [Setting up API access using a service account](https://developers.google.com/android-publisher/getting_started#using_a_service_account).\n- Granting the necessary access rights to the service account.\n- Upload the service account JSON key to Bitrise and store it in a [Secret Env Var](https://devcenter.bitrise.io/builds/env-vars-secret-env-vars/).\n\nDue to the way the Google Play Publisher API works, you have to grant at least the following permissions to that service account:\n- Edit store listing, pricing \u0026 distribution\n- Manage Production APKs\n- Manage Alpha \u0026 Beta APKs\n- Manage Alpha \u0026 Beta users\n\nRead the full process in our [Deploying Android apps guide](https://devcenter.bitrise.io/deploy/android-deploy/deploying-android-apps/).\n\nTo deploy your app with the Step:\n\n1. In the **Service Account JSON key file path**, add the Secret that stores your service account JSON key.\n1. In the **App file path** input, set the path to your APK and/or AAB files. You can add multiple paths here, separated with a newline.\n   In most cases, the default values work well unless you changed the output variable of the Step that build your APK or AAB.\n1. In the **Package name**  input, set the package name of your app.\n1. In the **Track** input, add the track to which you want to assign the app. This can be any of the built-in tracks or a custom track of your own.\n\n### Troubleshooting\n\nIf the Step fails, check the following:\n- If it's an authentication error, check that your Secret points to the correct file (and that a file is uploaded at all).\n- Make sure your service account has the necessary access rights.\n- Check that there's no typo in the package name and that you selected an existing track for the app.\n\n### Useful links\n\n- [Google Play Developer API - Getting Started](https://developers.google.com/android-publisher/getting_started)\n- [Deploying Android apps](https://devcenter.bitrise.io/deploy/android-deploy/deploying-android-apps/)\n\n### Related Steps\n\n- [TestFairy Deploy Android](https://www.bitrise.io/integrations/steps/testfairy-deploy-android)\n- [AppCenter Android Deploy](https://www.bitrise.io/integrations/steps/appcenter-deploy-android)\n- [Appetize.io Deploy](https://www.bitrise.io/integrations/steps/appetize-deploy)\n- [Android Sign](https://www.bitrise.io/integrations/steps/sign-apk)\n\u003c/details\u003e\n\n## 🧩 Get started\n\nAdd this step directly to your workflow in the [Bitrise Workflow Editor](https://devcenter.bitrise.io/steps-and-workflows/steps-and-workflows-index/).\n\nYou can also run this step directly with [Bitrise CLI](https://github.com/bitrise-io/bitrise).\n\n### Example\n\nBuild, sign and deploy your app to Google Play:\n\n```yaml\nsteps:\n- android-build:\n    inputs:\n    - variant: release\n    - build_type: aab\n- sign-apk:\n    inputs:\n    - android_app: $BITRISE_AAB_PATH\n    # Make sure that the keystore file is uploaded in Code Signing settings\n- google-play-deploy:\n    inputs:\n    - service_account_json_key_path: $SERVICE_ACCOUNT_KEY_URL # Upload this in Code Signing settings\n    - package_name: my.example.package\n    - app_path: $BITRISE_SIGNED_AAB_PATH\n    - track: alpha\n```\n\n## ⚙️ Configuration\n\n\u003cdetails\u003e\n\u003csummary\u003eInputs\u003c/summary\u003e\n\n| Key | Description | Flags | Default |\n| --- | --- | --- | --- |\n| `service_account_json_key_path` | Path to the service account's JSON key file. It must be a Secret Environment Variable, pointing to either a file uploaded to Bitrise or to a remote download location. | required, sensitive |  |\n| `package_name` | Package name of the app. | required |  |\n| `app_path` | Path to the app bundle file(s) or APK file(s) to deploy. In the case of [multiple artifacts](https://developer.android.com/google/play/publishing/multiple-apks.html) deploy, you can specify multiple APKs and AABs as a newline (`\\n`) or pipe (`\\|`) separated list. | required | `$BITRISE_APK_PATH\\n$BITRISE_AAB_PATH` |\n| `expansionfile_path` | Path to the [expansion file](https://developer.android.com/google/play/expansion-files). Leave empty or provide exactly the same number of paths as in app_path, separated by `\\|` character and start each path with the expansion file's type separated by a `:`. (main, patch) Format examples: - `main:/path/to/my/app.obb` - `patch:/path/to/my/app1.obb\\|main:/path/to/my/app2.obb\\|main:/path/to/my/app3.obb` |  |  |\n| `track` | The track to which you want to assign the uploaded app.  Can be one of the built-in tracks (internal, alpha, beta, production), or a custom track name you added in Google Play Developer Console. | required | `alpha` |\n| `user_fraction` | Portion of the users who should get the staged version of the app. Accepts values between 0.0 and 1.0 (exclusive-exclusive). Only applies if `Status` is `inProgress` or `halted`.  To release to all users, this input should not be defined (or should be blank). |  |  |\n| `status` | The status of a release. For more information see the [API reference](https://developers.google.com/android-publisher/api-ref/rest/v3/edits.tracks#Status). |  |  |\n| `release_name` | The name of the release. By default Play Store generates the name from the APK's `versionName` value. |  |  |\n| `update_priority` | This allows your app to decide how strongly to recommend an update to the user. Accepts values between 0 and 5 with 0 being the lowest priority and 5 being the highest priority. By default this value is 0. For more information see here: https://developer.android.com/guide/playcore/in-app-updates#check-priority. |  | `0` |\n| `whatsnews_dir` | Use this input to specify localized 'what's new' files directory. This directory should contain 'whatsnew' files postfixed with the locale. what's new file name pattern: `whatsnew-LOCALE` Example:  ``` + - [PATH/TO/WHATSNEW]     \\|     + - whatsnew-en-US     \\|     + - whatsnew-de-DE ``` Format examples: - \"./\"         # what's new files are in the repo root directory - \"./whatsnew\" # what's new files are in the whatsnew directory |  |  |\n| `mapping_file` | The `mapping.txt` file provides a translation between the original and obfuscated class, method, and field names. Uploading a mapping file is not required when deploying an AAB as the app bundle contains the mapping file itself. In case of deploying [multiple artifacts](https://developer.android.com/google/play/publishing/multiple-apks.html), you can specify multiple mapping.txt files as a newline (`\\n`) or pipe (`\\|`) separated list. The order of mapping files should match the list of APK or AAB files in the `app_path` input. |  | `$BITRISE_MAPPING_PATH` |\n| `retry_without_sending_to_review` | If set to `true` and the initial change request fails, the changes will not be reviewed until they are manually sent for review from the Google Play Console UI. If set to `false`, the step fails if the changes can't be automatically sent to review. | required | `false` |\n| `ack_bundle_installation_warning` | Must be set to `true` if the App Bundle installation may trigger a warning on user devices (for example, if installation size may be over a threshold, typically 100 MB). | required | `false` |\n| `dry_run` | If set to `true` then the changes will not be committed to create a real release in the Play Console. Use this flag to validate your configuration without triggering a new review. See the [API reference](https://developers.google.com/android-publisher/api-ref/rest/v3/edits/validate). | | `false` |\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eOutputs\u003c/summary\u003e\n\n| Key              | Description                                        |\n|------------------|----------------------------------------------------|\n| `FAILURE_REASON` | Reason the upload to Google Play failed, if it did |\n\n\u003c/details\u003e\n\n## 🙋 Contributing\n\nWe welcome [pull requests](https://github.com/bitrise-io/steps-google-play-deploy/pulls) and [issues](https://github.com/bitrise-io/steps-google-play-deploy/issues) against this repository.\n\nFor pull requests, work on your changes in a forked repository and use the Bitrise CLI to [run step tests locally](https://devcenter.bitrise.io/bitrise-cli/run-your-first-build/).\n\n**Note:** this step's end-to-end tests (defined in `e2e/bitrise.yml`) are working with secrets which are intentionally not stored in this repo. External contributors won't be able to run those tests. Don't worry, if you open a PR with your contribution, we will help with running tests and make sure that they pass.\n\nLearn more about developing steps:\n\n- [Create your own step](https://devcenter.bitrise.io/contributors/create-your-own-step/)\n- [Testing your Step](https://devcenter.bitrise.io/contributors/testing-and-versioning-your-steps/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitrise-steplib%2Fsteps-google-play-deploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitrise-steplib%2Fsteps-google-play-deploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitrise-steplib%2Fsteps-google-play-deploy/lists"}