GitHub Action
Upload Android Release to Play Store
v1.1.3
Latest version
This action will help you upload an Android .apk
or .aab
(Android App Bundle) file to the Google Play Console using the Google Play Developer API v3.
Input | Description | Value | Required |
---|---|---|---|
releaseFiles | The Android release file(s) to upload (.apk or .aab) | Comma-separated paths. Supports glob via fast-glob | true |
serviceAccountJsonPlainText | The service account json in plain text, provided via a secret, etc | The contents of your service-account.json |
true (or serviceAccountJson) |
packageName | The package name, or Application Id, of the app you are uploading | A valid package name, e.g. com.example.myapp . The packageName must already exist in the play console account, so make sure you upload a manual apk or aab first through the console |
true |
track | The track in which you want to assign the uploaded app. Defaults to production |
See APKs and Tracks documentation for calculating your target track name | true |
releaseName | The release name. Not required to be unique. Default is configured by Google Play Console | A user-friendly update name, e.g. v1.0.0 |
false |
inAppUpdatePriority | In-app update priority of the release. All newly added APKs in the release will be considered at this priority. Defaults to 0 |
[0-5] , where 5 is the highest priority |
false |
userFraction | Percentage of users who should get the staged version of the app. | (0.0-1.0) |
false |
status | Release status. Defaults to completed . |
One of completed , inProgress , halted , draft . Cannot be null. |
false |
whatsNewDirectory | The directory of localized "whats new" files to upload as the release notes. The files contained in the whatsNewDirectory MUST use the pattern whatsnew-<LOCALE> where LOCALE is using the BCP 47 format |
A path to a valid whatsNewDirectory |
false |
mappingFile | The mapping.txt file used to de-obfuscate your stack traces from crash reports | A path to a valid mapping.txt file |
false |
debugSymbols | The native-debug-symbols.zip file or folder that contains your debug symbols | A path to a valid native-debug-symbols.zip file file or a folder |
false |
changesNotSentForReview | Indicates that the changes in this edit will not be reviewed until they are explicitly sent for review from the Google Play Console. Defaults to false |
true or false |
false |
serviceAccountJson | The service account json private key file to authorize the upload request. Can be used instead of serviceAccountJsonPlainText to specify a file rather than provide a secret |
A path to a valid service-account.json file |
true (or serviceAccountJsonPlainText) |
existingEditId | The ID of an existing edit that has not been completed. If this is supplied, the action will append information to that rather than creating an edit | A valid, unpublished Edit ID | false |
Please switch to using releaseFiles as this will be removed in the future |
false |
Output | Environment Variable | Description |
---|---|---|
internalSharingDownloadUrls | INTERNAL_SHARING_DOWNLOAD_URLS | A JSON list containing the download urls for every release file uploaded using the internalsharing track |
internalSharingDownloadUrl | INTERNAL_SHARING_DOWNLOAD_URL | The download url for the last release file uploaded using the internalsharing track |
committedEditId | COMMITTED_EDIT_ID | The unique identifier of the committed edit. |
committedEditIdExpiryTimeSeconds | COMMITTED_EDIT_ID_EXPIRY_TIME_SECONDS | Time in seconds until the committed edit expires. |
The below example publishes MyApp
to Google Play, targetting 33% (0.33
) of users with a priority of 2
.
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ SERVICE_ACCOUNT_JSON }}
packageName: com.example.MyApp
releaseFiles: app/build/outputs/bundle/release/app-release.aab
track: production
status: inProgress
inAppUpdatePriority: 2
userFraction: 0.33
whatsNewDirectory: distribution/whatsnew
mappingFile: app/build/outputs/mapping/release/mapping.txt
debugSymbols: app/intermediates/merged_native_libs/release/out/lib
- Enable the Google Play Android Developer API.
- Go to https://console.cloud.google.com/apis/library/androidpublisher.googleapis.com.
- Click on Enable.
- Create a new service account in Google Cloud Platform (docs).
- Navigate to https://cloud.google.com/gcp.
- Open
IAM & Admin
>Service accounts
>Create service account
. - Pick a name for the new account. Do not grant the account any permissions.
- To use it from the GitHub Action use either:
- Account key in GitHub secrets (simpler):
- Open the newly created service account, click on
keys
tab and add a new key, JSON type. - When successful, a JSON file will be automatically downloaded on your machine.
- Store the content of this file to your GitHub secrets, e.g.
SERVICE_ACCOUNT_JSON
. - Set
serviceAccountJsonPlainText: ${{ SERVICE_ACCOUNT_JSON }}
when using this action.
- Open the newly created service account, click on
- Workload identity authentication (more secure, recommended by GCP):
- Configure workload identity provider in the same project as the new service account (docs).
- Run a step to obtain short-lived access credentials:
- id: auth uses: google-github-actions/auth@v2 with: workload_identity_provider: <project>/.../workloadIdentityPools/<provider> service_account: <service-account>@<project>.iam.gserviceaccount.com
- Set
serviceAccountJson: ${{ steps.auth.outputs.credentials_file_path }}
when using this action.
- Account key in GitHub secrets (simpler):
- Add the service account to Google Play Console.
- Open https://play.google.com/console and pick your developer account.
- Open Users and permissions.
- Click invite new user and add the email of the service account created in the previous step.
- Grant permissions to the app that you want the service account to deploy in
app permissions
.
Make sure you upload an apk or aab manually first by creating a release through the play console.
The whatsNewDirectory
in this example supplies changelogs for English, German and Japanese
distribution/
└─ whatsnew/
├─ whatsnew-en-US
├─ whatsnew-de-DE
└─ whatsnew-ja-JP