Skip to main content
← Back to workflows

How to Upload Android Release to Play Store with GitHub Action

r0adkll-upload-google-play -
GitHub Action
v1.1.3
772
Contributors
Contributor - bosweljaContributor - r0adkll
Categories
CICUBE ANALYTICS INSIGHTS
Engineering Velocity: 25% Team Time Lost to CI Issues
View Platform →
3.5h
Time Saved/Dev/Week
40%
Faster Releases
Click for next insight
Usage
name: Upload Android Release to Play Store
on:
push:
branches:
- main

jobs:
upload:
runs-on: ubuntu-latest
steps:
- name: Setup repo
uses: actions/checkout@v3

- name: Upload to Play Store
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.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

upload-google-play-action logo

Upload Android Release to Play Store

GitHub Action to upload Android .apk or .aab files to Google Play Console.

This GitHub Action simplifies uploading Android release files (.apk or .aab) to Google Play Console using the Google Play Developer API v3. You can automate the release process, assign tracks, and manage app versions with ease.

How to Upload Android Release Files

To upload Android release files (.apk or .aab), use the releaseFiles input. You can provide one or more file paths, separated by commas.

with:
releaseFiles: app/build/outputs/bundle/release/app-release.aab

How to Provide Service Account Credentials

For authentication, provide the service account JSON credentials in plain text. You can store the credentials as a GitHub secret and reference it in the workflow.

with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}

How to Set the Package Name

Specify the package name (Application ID) of the app you're uploading. Ensure that this package is already registered in the Play Console.

with:
packageName: com.example.MyApp

How to Select a Track for Uploading

The track input defines where the uploaded app will be distributed (e.g., production, beta). You can refer to the APKs and Tracks documentation for valid track names.

with:
track: production

How to Assign a Release Name

You can provide a user-friendly release name using the releaseName input. If not specified, the Google Play Console will auto-generate one.

with:
releaseName: v1.0.0

How to Set In-App Update Priority

The inAppUpdatePriority input defines the priority level for in-app updates, where 0 is the lowest and 5 is the highest priority.

with:
inAppUpdatePriority: 3

How to Specify a User Fraction for Staged Rollout

To control how many users receive the staged version of the app, use the userFraction input. The value should be between 0.0 and 1.0, where 1.0 means 100% of users.

with:
userFraction: 0.33

How to Define Release Status

The status input sets the release status, such as completed, inProgress, halted, or draft. The default value is completed.

with:
status: inProgress

How to Upload Localized "What's New" Files

To upload release notes in multiple languages, use the whatsNewDirectory input. Each file should follow the pattern whatsnew-<LOCALE>.

with:
whatsNewDirectory: distribution/whatsnew

Example directory structure:

distribution/
└─ whatsnew/
├─ whatsnew-en-US
├─ whatsnew-de-DE
└─ whatsnew-ja-JP

How to Upload Mapping Files for Crash Reports

The mappingFile input allows you to upload the mapping.txt file, which is used to de-obfuscate stack traces in crash reports.

with:
mappingFile: app/build/outputs/mapping/release/mapping.txt

How to Upload Debug Symbols

Use the debugSymbols input to upload the native-debug-symbols.zip file or a folder containing your debug symbols.

with:
debugSymbols: app/intermediates/merged_native_libs/release/out/lib

How to Control Review of Changes

The changesNotSentForReview input indicates whether the changes in this edit will be reviewed immediately or not. By default, it is set to false, meaning the changes are sent for review automatically.

with:
changesNotSentForReview: false

How to Use Service Account JSON File

Instead of providing the service account credentials in plain text, you can provide a path to the JSON file using the serviceAccountJson input.

with:
serviceAccountJson: ${{ secrets.SERVICE_ACCOUNT_JSON_FILE }}

How to Append Information to an Existing Edit

The existingEditId input allows you to append information to an existing edit instead of creating a new one. This is useful when continuing an unfinished edit.

with:
existingEditId: ${{ steps.previous-edit.outputs.editId }}