Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"ar-SA - Invalid request" when uploading metadata to Play Store with a locale it does not support #21905

Open
4 tasks done
grishka opened this issue Mar 1, 2024 · 3 comments

Comments

@grishka
Copy link

grishka commented Mar 1, 2024

New Issue Checklist

Issue Description

When any of textual metadata upload is enabled, but there are locales in fastlane/metadata that aren't supported by Google Play, you get this cryptic error.

I used a mitm proxy to see the actual error returned by the server and the request that caused it. (there might be better ways to do it but I'm very unfamiliar with Ruby and its ecosystem)
Request URL: https://androidpublisher.googleapis.com/androidpublisher/v3/applications/:packageID/edits/:someOtherID/listings/:locale
Error:

{
	"error": {
		"code": 400,
		"message": "The requested language is not currently supported: ar-SA.",
		"status": "INVALID_ARGUMENT"
	}
}

I assume these GET requests to retrieve existing metadata are done to only update those pieces of metadata that have actually changed.

If I set both skip_upload_metadata and skip_upload_changelogs to true, this goes away and the deployment succeeds.

Now that I've seen the real error, I know I should change my Crowdin configuration to only add the country code to locales where it's strictly necessary (e.g. pt-BR vs pt-PT). Still, the error messages returned by APIs should always be included in the output.

Command executed

fastlane deploy

Complete output when running fastlane, including the stack trace and command used
$ fastlane deploy
[✔] 🚀 
[11:30:35]: fastlane detected a Gemfile in the current directory
[11:30:35]: However, it seems like you didn't use `bundle exec`
[11:30:35]: To launch fastlane faster, please use
[11:30:35]: 
[11:30:35]: $ bundle exec fastlane deploy
[11:30:35]: 
[11:30:35]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
[11:30:36]: ------------------------------
[11:30:36]: --- Step: default_platform ---
[11:30:36]: ------------------------------
[11:30:36]: Driving the lane 'android deploy' 🚀
[11:30:36]: ---------------------------
[11:30:36]: --- Step: bundlerelease ---
[11:30:36]: ---------------------------
[11:30:36]: $ /Users/grishka/Documents/android/Mastodon/gradlew bundlerelease -p .
[11:30:36]: ▸ > Task :mastodon:preBuild UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:preReleaseBuild UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:generateReleaseFeatureMetadata UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:checkReleaseDuplicateClasses UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:compileReleaseAidl UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:generateReleaseBuildConfig UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:javaPreCompileRelease UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:checkReleaseAarMetadata UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:generateReleaseResValues UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:mapReleaseSourceSetPaths UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:generateReleaseResources UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:mergeReleaseResources UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:packageReleaseResources UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:parseReleaseLocalResources UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:createReleaseCompatibleScreenManifests UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:extractDeepLinksRelease UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:processReleaseMainManifest UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:processReleaseManifest UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:processReleaseManifestForPackage UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:processReleaseResources UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:compileReleaseJavaWithJavac UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:mergeReleaseArtProfile UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:expandReleaseArtProfileWildcards UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:extractProguardFiles UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:mergeReleaseGeneratedProguardFiles UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:processReleaseJavaRes UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:mergeReleaseJavaResource UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:minifyReleaseWithR8 UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:processApplicationManifestReleaseForBundle UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:bundleReleaseResources UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:l8DexDesugarLibRelease UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:mergeReleaseShaders UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:compileReleaseShaders NO-SOURCE
[11:30:36]: ▸ > Task :mastodon:generateReleaseAssets UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:mergeReleaseAssets UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:mergeReleaseJniLibFolders UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:mergeReleaseNativeLibs NO-SOURCE
[11:30:36]: ▸ > Task :mastodon:stripReleaseDebugSymbols NO-SOURCE
[11:30:36]: ▸ > Task :mastodon:writeReleaseAppMetadata UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:buildReleasePreBundle UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:compileReleaseArtProfile UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:extractReleaseNativeSymbolTables NO-SOURCE
[11:30:36]: ▸ > Task :mastodon:parseReleaseIntegrityConfig UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:packageReleaseBundle UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:shrinkBundleReleaseResources UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:validateSigningRelease UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:signReleaseBundle UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:produceReleaseBundleIdeListingFile UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:createReleaseBundleListingFileRedirect UP-TO-DATE
[11:30:36]: ▸ > Task :mastodon:bundleRelease UP-TO-DATE
[11:30:36]: ▸ BUILD SUCCESSFUL in 432ms
[11:30:36]: ▸ 41 actionable tasks: 41 up-to-date
[11:30:37]: ----------------------------------
[11:30:37]: --- Step: upload_to_play_store ---
[11:30:37]: ----------------------------------

+----------------------------------------------------------------------------------------------------+
| Summary for supply 2.219.0 |
+------------------------------------+---------------------------------------------------------------+
| changes_not_sent_for_review | true |
| skip_upload_images | true |
| skip_upload_screenshots | true |
| aab | /Users/grishka/Documents/android/Mastodon/mastodon/build/out |
| | puts/bundle/release/mastodon-release.aab |
| package_name | org.joinmastodon.android |
| release_status | completed |
| track | production |
| metadata_path | ./fastlane/metadata/android |
| json_key_data | ******** |
| skip_upload_apk | false |
| skip_upload_aab | false |
| skip_upload_metadata | false |
| skip_upload_changelogs | true |
| sync_image_upload | false |
| track_promote_release_status | completed |
| validate_only | true |
| check_superseded_tracks | false |
| timeout | 300 |
| deactivate_on_promote | true |
| rescue_changes_not_sent_for_review | true |
| ack_bundle_installation_warning | false |
+------------------------------------+---------------------------------------------------------------+

[11:30:38]: Preparing aab at path '/Users/grishka/Documents/android/Mastodon/mastodon/build/outputs/bundle/release/mastodon-release.aab' for upload...
[11:30:47]: Updating track 'production'...
[11:30:49]: Preparing uploads for language 'ar-SA'...
[11:30:49]: Preparing uploads for language 'be-BY'...
[11:30:49]: Preparing uploads for language 'bn-BD'...
[11:30:49]: Preparing uploads for language 'bs-BA'...
[11:30:49]: Preparing uploads for language 'ca-ES'...
[11:30:49]: Preparing uploads for language 'cs-CZ'...
[11:30:49]: Preparing uploads for language 'da-DK'...
[11:30:49]: Preparing uploads for language 'de-DE'...
[11:30:49]: Preparing uploads for language 'el-GR'...
[11:30:49]: Preparing uploads for language 'en-US'...
#<Thread:0x0000000121b79ab8 /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/fastlane-2.219.0/fastlane_core/lib/fastlane_core/queue_worker.rb:37 run> terminated with exception (report_on_exception is true):
/opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/fastlane-2.219.0/fastlane_core/lib/fastlane_core/ui/interface.rb:184:in abort_with_message!': ar-SA - Invalid request (FastlaneCore::Interface::FastlaneCommonException) from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/fastlane-2.219.0/fastlane_core/lib/fastlane_core/ui/ui.rb:17:in method_missing'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/fastlane-2.219.0/supply/lib/supply/uploader.rb:526:in rescue in block in create_meta_upload_worker' from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/fastlane-2.219.0/supply/lib/supply/uploader.rb:517:in block in create_meta_upload_worker'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/fastlane-2.219.0/fastlane_core/lib/fastlane_core/queue_worker.rb:40:in block (2 levels) in start' /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-core-0.11.2/lib/google/apis/core/http_command.rb:244:in check_status': Invalid request (Google::Apis::ClientError)
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-core-0.11.2/lib/google/apis/core/api_command.rb:135:in check_status' from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-core-0.11.2/lib/google/apis/core/http_command.rb:207:in process_response'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-core-0.11.2/lib/google/apis/core/http_command.rb:326:in execute_once' from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-core-0.11.2/lib/google/apis/core/http_command.rb:131:in block (2 levels) in do_retry'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/retriable-3.1.2/lib/retriable.rb:61:in block in retriable' from <internal:numeric>:237:in times'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/retriable-3.1.2/lib/retriable.rb:56:in retriable' from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-core-0.11.2/lib/google/apis/core/http_command.rb:128:in block in do_retry'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/retriable-3.1.2/lib/retriable.rb:61:in block in retriable' from <internal:numeric>:237:in times'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/retriable-3.1.2/lib/retriable.rb:56:in retriable' from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-core-0.11.2/lib/google/apis/core/http_command.rb:118:in do_retry'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-core-0.11.2/lib/google/apis/core/http_command.rb:109:in execute' from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-core-0.11.2/lib/google/apis/core/base_service.rb:418:in execute_or_queue_command'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/google-apis-androidpublisher_v3-0.54.0/lib/google/apis/androidpublisher_v3/service.rb:1181:in get_edit_listing' from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/fastlane-2.219.0/supply/lib/supply/client.rb:238:in listing_for_language'
from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/fastlane-2.219.0/supply/lib/supply/uploader.rb:519:in block in create_meta_upload_worker' from /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/gems/fastlane-2.219.0/fastlane_core/lib/fastlane_core/queue_worker.rb:40:in block (2 levels) in start'
+-----------------------------------------------------------------------------------------------------+
| Lane Context |
+-------------------------------------+---------------------------------------------------------------+
| DEFAULT_PLATFORM | android |
| PLATFORM_NAME | android |
| LANE_NAME | android deploy |
| GRADLE_BUILD_TYPE | release |
| GRADLE_ALL_APK_OUTPUT_PATHS | [] |
| GRADLE_ALL_AAB_OUTPUT_PATHS | ["/Users/grishka/Documents/android/Mastodon/mastodon/build/o |
| | utputs/bundle/release/mastodon-release.aab"] |
| GRADLE_ALL_OUTPUT_JSON_OUTPUT_PATHS | [] |
| GRADLE_ALL_MAPPING_TXT_OUTPUT_PATHS | ["/Users/grishka/Documents/android/Mastodon/mastodon/build/o |
| | utputs/mapping/release/mapping.txt"] |
| GRADLE_AAB_OUTPUT_PATH | /Users/grishka/Documents/android/Mastodon/mastodon/build/out |
| | puts/bundle/release/mastodon-release.aab |
| GRADLE_MAPPING_TXT_OUTPUT_PATH | /Users/grishka/Documents/android/Mastodon/mastodon/build/out |
| | puts/mapping/release/mapping.txt |
+-------------------------------------+---------------------------------------------------------------+
[11:30:49]: ar-SA - Invalid request

+-------------------------------------------+
| fastlane summary |
+------+----------------------+-------------+
| Step | Action | Time (in s) |
+------+----------------------+-------------+
| 1 | default_platform | 0 |
| 2 | bundlerelease | 0 |
| 💥 | upload_to_play_store | 11 |
+------+----------------------+-------------+

[11:30:49]: fastlane finished with errors

[!] ar-SA - Invalid request

Environment

(doesn't seem to matter, does the same thing in a Github Action)

✅ fastlane environment ✅

Stack

Key Value
OS 13.6.4
Ruby 3.3.0
Bundler? false
Git git version 2.39.3 (Apple Git-145)
Installation Source /opt/homebrew/Cellar/fastlane/2.219.0_2/libexec/bin/fastlane
Host macOS 13.6.4 (22G513)
Ruby Lib Dir /opt/homebrew/Cellar/ruby/3.3.0/lib
OpenSSL Version OpenSSL 3.2.0 23 Nov 2023
Is contained false
Is homebrew true
Is installed via Fabric.app false
Xcode Path /Applications/Xcode.app/Contents/Developer/
Xcode Version 15.2
Swift Version 5.9.2

System Locale

Variable Value
LANG ru_RU.UTF-8
LC_ALL
LANGUAGE

fastlane files:

`./fastlane/Fastfile`
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:android)

platform :android do
  desc "Runs all the tests"
  lane :test do
    gradle(task: "test")
  end

  desc "Deploy a new version to the Google Play"
  lane :deploy do
    gradle(
      task: "bundle",
      build_type: "release",
    )
    upload_to_play_store(
      changes_not_sent_for_review: true,
      skip_upload_images: true,
      skip_upload_screenshots: true
    )
  end
end
`./fastlane/Appfile`
json_key_file("") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
package_name("org.joinmastodon.android") # e.g. com.krausefx.app

fastlane gems

Gem Version Update-Status
fastlane 2.219.0 ✅ Up-To-Date

Loaded fastlane plugins:

No plugins Loaded

Loaded gems
Gem Version
error_highlight 0.6.0
did_you_mean 1.6.3
syntax_suggest 2.0.0
public_suffix 5.0.4
addressable 2.8.6
artifactory 3.0.15
jmespath 1.6.2
aws-partitions 1.877.0
aws-eventstream 1.3.0
aws-sigv4 1.8.0
aws-sdk-core 3.190.1
aws-sdk-kms 1.76.0
aws-sdk-s3 1.142.0
babosa 1.0.4
bundler 2.5.4
rexml 3.2.6
CFPropertyList 3.0.6
colored 1.2
highline 2.0.3
commander 4.6.0
dotenv 2.8.1
emoji_regex 3.2.3
excon 0.109.0
faraday-em_http 1.0.0
faraday-em_synchrony 1.0.0
faraday-excon 1.1.0
faraday-httpclient 1.0.1
multipart-post 2.3.0
faraday-multipart 1.0.4
faraday-net_http 1.0.1
faraday-net_http_persistent 1.2.0
faraday-patron 1.0.0
faraday-rack 1.0.0
faraday-retry 1.0.3
ruby2_keywords 0.0.5
faraday 1.10.3
faraday_middleware 1.2.0
domain_name 0.6.20240107
http-cookie 1.0.5
faraday-cookie_jar 0.0.7
fastimage 2.3.0
gh_inspector 1.1.3
uber 0.1.0
declarative 0.0.20
trailblazer-option 0.1.2
representable 3.2.0
retriable 3.1.2
mini_mime 1.1.5
jwt 2.7.1
multi_json 1.15.0
os 1.1.4
signet 0.18.0
googleauth 1.8.1
httpclient 2.8.3
webrick 1.8.1
google-apis-core 0.11.2
google-apis-androidpublisher_v3 0.54.0
google-apis-playcustomapp_v1 0.13.0
google-cloud-env 1.6.0
google-cloud-errors 1.3.1
google-cloud-core 1.6.1
google-apis-iamcredentials_v1 0.17.0
google-apis-storage_v1 0.31.0
rake 13.1.0
digest-crc 0.6.5
google-cloud-storage 1.47.0
json 2.7.1
mini_magick 4.12.0
naturally 2.2.1
optparse 0.4.0
plist 3.7.1
rubyzip 2.3.2
security 0.1.3
simctl 1.6.10
terminal-notifier 2.0.0
unicode-display_width 2.5.0
terminal-table 3.0.2
tty-screen 0.8.2
tty-cursor 0.7.1
tty-spinner 0.9.3
word_wrap 1.0.0
atomos 0.1.3
claide 1.1.0
colored2 3.1.2
nanaimo 0.3.0
xcodeproj 1.23.0
rouge 2.0.7
xcpretty 0.3.0
xcpretty-travis-formatter 1.0.1
set 1.1.0
forwardable 1.3.3
logger 1.6.0
pathname 0.3.0
shellwords 0.2.0
cgi 0.4.1
date 3.3.4
timeout 0.4.1
securerandom 0.3.1
uri 0.13.0
openssl 3.2.0
digest 3.1.1
ipaddr 1.2.6
resolv 0.3.0
time 0.3.0
stringio 3.1.0
open-uri 0.4.1
mutex_m 0.2.0
net-http 0.4.0
net-protocol 0.2.2
ostruct 0.6.0
english 0.8.0
erb 4.0.3
abbrev 0.1.2
tempfile 0.2.1
delegate 0.3.1
fileutils 1.7.2
tmpdir 0.2.0
base64 0.2.0
singleton 0.2.0
open3 0.2.1
nkf 0.1.3
prettyprint 0.2.0
pp 0.5.0
find 0.2.0
yaml 0.3.0
psych 5.1.2

generated on: 2024-03-01

grishka added a commit to mastodon/mastodon-android that referenced this issue Mar 1, 2024
@sakiv
Copy link

sakiv commented Mar 4, 2024

Facing the same issue.

@jeannette9728miller
Copy link

It seems you’ve encountered an issue with the fastlane tool when uploading metadata to the Google Play Store for a locale that is not supported. The error message you received indicates that the language code ar-SA (Arabic - Saudi Arabia) is not currently supported by Google Play.

To resolve this issue, you can adjust your Crowdin configuration to ensure that only supported locales are used. Google Play supports a variety of locales, but not all possible combinations of language and region codes are accepted. It’s important to use only the locales that are recognized by Google Play to avoid such errors during the deployment process.

As you’ve discovered, setting skip_upload_metadata and skip_upload_changelogs to true can bypass the error, but this is more of a workaround than a solution. The proper fix would be to ensure that your metadata locales match the supported locales on Google Play.

For future reference, it’s always a good idea to check the supported locations for distribution and the supported languages/locales on Android to prevent similar issues. If you need to update your fastlane configuration or scripts, make sure to include only the supported locales to streamline your deployment process.

@grishka
Copy link
Author

grishka commented May 10, 2024

Yes, I know why this happens, I just want this to not be a fatal error. Just skip the unsupported language and continue. Maybe not by default, but it would be nice to have an option to do so, not the current all-or-nothing approach.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants