{"id":8283688,"name":"KevinRohn/github-action-upload-play-store","ecosystem":"actions","description":"Uploads an Android App Bundle (.aab file) to the Google Play Store using the Play Developer API","homepage":"","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/KevinRohn/github-action-upload-play-store","keywords_array":["actions","github-actions"],"namespace":"KevinRohn","versions_count":3,"first_release_published_at":"2023-09-15T15:41:39.000Z","latest_release_published_at":"2025-11-05T10:58:52.000Z","latest_release_number":"v1.0.2","last_synced_at":"2026-10-02T15:49:48.103Z","created_at":"2023-09-15T18:09:29.373Z","updated_at":"2026-10-02T15:49:48.167Z","registry_url":"https://github.com/KevinRohn/github-action-upload-play-store","install_command":null,"documentation_url":null,"metadata":{"name":"Upload Android App Bundle to Google Play Store","description":"Uploads an Android App Bundle (.aab file) to the Google Play Store using the Play Developer API","author":"Kevin Rohn","branding":{"icon":"upload-cloud","color":"white"},"inputs":{"service_account_json":{"description":"Base64 encoded service account JSON key","required":true},"package_name":{"description":"Android package name","required":true},"aab_file_path":{"description":"Path to the .aab file","required":true},"track":{"description":"Can be internal, alpha, beta, production or rollout","required":true,"default":"internal"},"release_status":{"description":"Release status (e.g., draft, completed)","required":true,"default":"draft"}},"runs":{"using":"composite","steps":[{"name":"Setup Python","uses":"actions/setup-python@v5","with":{"python-version":"3.x"}},{"name":"Validate Inputs","shell":"bash","run":"valid_tracks=(\"internal\" \"alpha\" \"beta\" \"production\" \"rollout\")\nvalid_statuses=(\"draft\" \"completed\" \"halted\" \"inProgress\")\naab_file_path=\"${{ inputs.aab_file_path }}\"\ntrack=\"${{ inputs.track }}\"\nstatus=\"${{ inputs.release_status }}\"\n\nif [[ ! \" ${valid_tracks[@]} \" =~ \" ${track} \" ]]; then\n  echo \"Invalid track: $track. Valid options are ${valid_tracks[@]}\"\n  exit 1\nfi\n\nif [[ ! \" ${valid_statuses[@]} \" =~ \" ${status} \" ]]; then\n  echo \"Invalid release status: $status. Valid options are ${valid_statuses[@]}\"\n  exit 1\nfi\n\nif [[ ! -f \"$aab_file_path\" ]]; then\n  echo \"The specified .aab file does not exist: $aab_file_path\"\n  exit 1\nfi\n"},{"name":"Install Google API Client Libraries","shell":"bash","run":"pip install --upgrade packaging google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client\n"},{"name":"Decode Service Account JSON and Save","shell":"bash","run":"echo \"${{ inputs.service_account_json }}\" | base64 --decode \u003e service_account.json\n"},{"name":"Upload .aab to Google Play Store","shell":"python","run":"from google.oauth2.service_account import Credentials\nfrom googleapiclient.discovery import build\nfrom googleapiclient.http import MediaFileUpload\n\ncredentials = Credentials.from_service_account_file(\n    \"service_account.json\",\n    scopes=[\"https://www.googleapis.com/auth/androidpublisher\"]\n)\nandroidpublisher = build('androidpublisher', 'v3', credentials=credentials)\n\nedits = androidpublisher.edits()\nedit_request = edits.insert(body={}, packageName=\"${{ inputs.package_name }}\")\nedit = edit_request.execute()\nedit_id = edit['id']\n\nmedia_upload = MediaFileUpload(\"${{ inputs.aab_file_path }}\", mimetype='application/octet-stream', resumable=True)\n\n# Upload the App Bundle\naab_upload_response = androidpublisher.edits().bundles().upload(\n    editId=edit_id,\n    packageName=\"${{ inputs.package_name }}\",\n    media_body=media_upload\n).execute()\nversion_code = aab_upload_response['versionCode']\n\ntrack_config = {\n    'releases': [\n        {\n            'versionCodes': [version_code],\n            'status': \"${{ inputs.release_status }}\"\n        }\n    ]\n}\ntrack_update_response = androidpublisher.edits().tracks().update(\n    editId=edit_id,\n    track=\"${{ inputs.track }}\",\n    packageName=\"${{ inputs.package_name }}\",\n    body=track_config\n).execute()\n\ncommit_request = edits.commit(\n    editId=edit_id,\n    packageName=\"${{ inputs.package_name }}\"\n)\ncommit_request.execute()\n\nprint(f\"Successfully uploaded ${{ inputs.aab_file_path }} to ${{ inputs.package_name }} on ${{ inputs.track }} track.\")\n"},{"name":"Remove Service Account JSON","shell":"bash","run":"rm -f service_account.json"}]},"default_branch":"main","path":null},"repo_metadata":{"id":194891717,"uuid":"692105267","full_name":"KevinRohn/github-action-upload-play-store","owner":"KevinRohn","description":"A simple GitHub action to upload an Android App Bundle (.aab file) to the Google Play Store using the Play Developer API.","archived":false,"fork":false,"pushed_at":"2025-11-05T12:18:46.000Z","size":12,"stargazers_count":17,"open_issues_count":3,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-10-02T06:43:00.110Z","etag":null,"topics":["actions","github-actions"],"latest_commit_sha":null,"homepage":"","language":null,"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/KevinRohn.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":"2023-09-15T15:11:08.000Z","updated_at":"2026-09-27T19:24:43.000Z","dependencies_parsed_at":"2025-02-20T06:33:23.353Z","dependency_job_id":"b292763b-e40b-440a-843f-dcaaac29655d","html_url":"https://github.com/KevinRohn/github-action-upload-play-store","commit_stats":null,"previous_names":["kevinrohn/github-action-upload-play-store"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/KevinRohn/github-action-upload-play-store","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KevinRohn","download_url":"https://codeload.github.com/KevinRohn/github-action-upload-play-store/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/sbom","scorecard":{"id":78139,"data":{"date":"2025-08-11","repo":{"name":"github.com/KevinRohn/github-action-upload-play-store","commit":"6c133652de87baa74d9826a480a5bc869c6f60e8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/6 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-15T05:15:47.408Z","repository_id":194891717,"created_at":"2025-08-15T05:15:47.408Z","updated_at":"2025-08-15T05:15:47.408Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":342542704,"owners_count":37936663,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-10-02T02:00:07.254Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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"},"owner_record":{"login":"KevinRohn","name":"Kevin Rohn","uuid":"25847098","kind":"user","description":"Passionate about developing efficient software solutions for the building automation industry.","email":"kevin@rohn.tech","website":"https://rohn.tech","location":"Germany","twitter":null,"company":"@powerIO-GmbH @Pfaender-GmbH ","icon_url":"https://avatars.githubusercontent.com/u/25847098?u=f1d1b0eb9125e79b787e3a6dbe4b0007750960b4\u0026v=4","repositories_count":6,"last_synced_at":"2026-10-01T21:31:36.960Z","metadata":{"has_sponsors_listing":false,"funding":null},"html_url":"https://github.com/KevinRohn","funding_links":[],"total_stars":null,"followers":23,"following":65,"created_at":"2022-11-18T10:08:31.916Z","updated_at":"2026-10-01T21:31:38.468Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KevinRohn","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KevinRohn/repositories"},"tags":[{"name":"v1.0.2","sha":"6873dc0ee309da07eb07576557423eb499ad1cea","kind":"commit","published_at":"2025-11-05T10:58:52.000Z","download_url":"https://codeload.github.com/KevinRohn/github-action-upload-play-store/tar.gz/v1.0.2","html_url":"https://github.com/KevinRohn/github-action-upload-play-store/releases/tag/v1.0.2","dependencies_parsed_at":"2026-08-08T10:23:21.419Z","dependency_job_id":null,"purl":"pkg:github/KevinRohn/github-action-upload-play-store@v1.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/tags/v1.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/tags/v1.0.2/manifests"},{"name":"v1.0.1","sha":"6c133652de87baa74d9826a480a5bc869c6f60e8","kind":"commit","published_at":"2024-03-27T13:59:54.000Z","download_url":"https://codeload.github.com/KevinRohn/github-action-upload-play-store/tar.gz/v1.0.1","html_url":"https://github.com/KevinRohn/github-action-upload-play-store/releases/tag/v1.0.1","dependencies_parsed_at":"2024-03-29T04:18:18.972Z","dependency_job_id":null,"purl":"pkg:github/KevinRohn/github-action-upload-play-store@v1.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/tags/v1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/tags/v1.0.1/manifests"},{"name":"v1.0.0","sha":"d6175c7a938522db8fddb9d7d191d9f4cc787af5","kind":"commit","published_at":"2023-09-15T15:41:39.000Z","download_url":"https://codeload.github.com/KevinRohn/github-action-upload-play-store/tar.gz/v1.0.0","html_url":"https://github.com/KevinRohn/github-action-upload-play-store/releases/tag/v1.0.0","dependencies_parsed_at":"2023-09-16T04:56:56.273Z","dependency_job_id":null,"purl":"pkg:github/KevinRohn/github-action-upload-play-store@v1.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevinRohn%2Fgithub-action-upload-play-store/tags/v1.0.0/manifests"}]},"repo_metadata_updated_at":"2026-10-02T15:49:48.166Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":42.59359051573842,"dependent_packages_count":0.0,"stargazers_count":48.537103369575554,"forks_count":35.26484293276698,"docker_downloads_count":null,"average":31.59888420452024},"purl":"pkg:githubactions/KevinRohn/github-action-upload-play-store","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/actions/KevinRohn/github-action-upload-play-store","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/actions/KevinRohn/github-action-upload-play-store","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/actions/KevinRohn/github-action-upload-play-store/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-09-22T13:48:11.809Z","issues_count":1,"pull_requests_count":4,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":23.333333333333332,"issues_closed_count":0,"pull_requests_closed_count":3,"pull_request_authors_count":2,"issue_authors_count":1,"avg_comments_per_issue":8.0,"avg_comments_per_pull_request":0.25,"merged_pull_requests_count":2,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":4,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":23.333333333333332,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":3,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.25,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":2,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinrohn%2Fgithub-action-upload-play-store/issues","maintainers":[{"login":"KevinRohn","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/KevinRohn"}],"active_maintainers":[{"login":"KevinRohn","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/KevinRohn"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/KevinRohn%2Fgithub-action-upload-play-store/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/KevinRohn%2Fgithub-action-upload-play-store/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/KevinRohn%2Fgithub-action-upload-play-store/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/KevinRohn%2Fgithub-action-upload-play-store/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/KevinRohn%2Fgithub-action-upload-play-store/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/KevinRohn%2Fgithub-action-upload-play-store/codemeta","maintainers":[]}