Implement support for AAB upload to store
This commit is contained in:
Родитель
a4ebc2bf27
Коммит
4c55f10e02
|
@ -24,7 +24,7 @@ appcenter_upload(
|
|||
api_token: "<appcenter token>",
|
||||
owner_name: "<your appcenter account name>",
|
||||
app_name: "<your app name>",
|
||||
apk: "<path to android build binary>",
|
||||
apk: "<path to android build binary>", # Or aab: "<path to aab file>" for app bundles
|
||||
notify_testers: true # Set to false if you don't want to notify testers of your new release (default: `false`)
|
||||
)
|
||||
```
|
||||
|
@ -35,6 +35,7 @@ The action parameters `api_token` and `owner_name` can also be omitted when thei
|
|||
- `APPCENTER_OWNER_NAME` - Owner name
|
||||
- `APPCENTER_APP_NAME` - App name. If there is no app with such name, you will be prompted to create one
|
||||
- `APPCENTER_DISTRIBUTE_APK` - Build release path for android build
|
||||
- `APPCENTER_DISTRIBUTE_AAB` - Build release path for android app bundle build
|
||||
- `APPCENTER_DISTRIBUTE_IPA` - Build release path for ios build
|
||||
- `APPCENTER_DISTRIBUTE_DSYM` - Path to your symbols (app.dSYM.zip) file
|
||||
- `APPCENTER_DISTRIBUTE_UPLOAD_DSYM_ONLY` - Flag to upload only the dSYM file to App Center
|
||||
|
|
|
@ -117,7 +117,8 @@ module Fastlane
|
|||
|
||||
file = [
|
||||
params[:ipa],
|
||||
params[:apk]
|
||||
params[:apk],
|
||||
params[:aab]
|
||||
].detect { |e| !e.to_s.empty? }
|
||||
|
||||
UI.user_error!("Couldn't find build file at path '#{file}'") unless file && File.exist?(file)
|
||||
|
@ -274,7 +275,7 @@ module Fastlane
|
|||
default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH],
|
||||
optional: true,
|
||||
type: String,
|
||||
conflicting_options: [:ipa],
|
||||
conflicting_options: [:ipa, :aab],
|
||||
conflict_block: proc do |value|
|
||||
UI.user_error!("You can't use 'apk' and '#{value.key}' options in one run")
|
||||
end,
|
||||
|
@ -283,13 +284,28 @@ module Fastlane
|
|||
UI.user_error!("Only \".apk\" formats are allowed, you provided \"#{File.extname(value)}\"") unless accepted_formats.include? File.extname(value)
|
||||
end),
|
||||
|
||||
FastlaneCore::ConfigItem.new(key: :aab,
|
||||
env_name: "APPCENTER_DISTRIBUTE_AAB",
|
||||
description: "Build release path for android app bundle build",
|
||||
default_value: Actions.lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH],
|
||||
optional: true,
|
||||
type: String,
|
||||
conflicting_options: [:ipa, :apk],
|
||||
conflict_block: proc do |value|
|
||||
UI.user_error!("You can't use 'aab' and '#{value.key}' options in one run")
|
||||
end,
|
||||
verify_block: proc do |value|
|
||||
accepted_formats = [".aab"]
|
||||
UI.user_error!("Only \".aab\" formats are allowed, you provided \"#{File.extname(value)}\"") unless accepted_formats.include? File.extname(value)
|
||||
end),
|
||||
|
||||
FastlaneCore::ConfigItem.new(key: :ipa,
|
||||
env_name: "APPCENTER_DISTRIBUTE_IPA",
|
||||
description: "Build release path for ios build",
|
||||
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH],
|
||||
optional: true,
|
||||
type: String,
|
||||
conflicting_options: [:apk],
|
||||
conflicting_options: [:apk, :aab],
|
||||
conflict_block: proc do |value|
|
||||
UI.user_error!("You can't use 'ipa' and '#{value.key}' options in one run")
|
||||
end,
|
||||
|
@ -451,6 +467,19 @@ module Fastlane
|
|||
dsym: "./app.dSYM.zip",
|
||||
release_notes: "release notes",
|
||||
notify_testers: false
|
||||
)',
|
||||
'appcenter_upload(
|
||||
api_token: "...",
|
||||
owner_name: "appcenter_owner",
|
||||
app_name: "testing_app",
|
||||
aab: "./app.aab",
|
||||
destinations: "Alpha",
|
||||
destination_type: "store",
|
||||
build_number: "3",
|
||||
version: "1.0.0",
|
||||
mapping: "./mapping.txt",
|
||||
release_notes: "release notes",
|
||||
notify_testers: false
|
||||
)'
|
||||
]
|
||||
end
|
||||
|
|
|
@ -184,7 +184,7 @@ module Fastlane
|
|||
|
||||
options = {}
|
||||
options[:upload_id] = upload_id
|
||||
# ipa field is used both for .apk and .ipa files
|
||||
# ipa field is used for .apk, .aab and .ipa files
|
||||
options[:ipa] = Faraday::UploadIO.new(file, 'application/octet-stream') if file && File.exist?(file)
|
||||
|
||||
response = connection.post do |req|
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
module Fastlane
|
||||
module Appcenter
|
||||
VERSION = "1.1.0"
|
||||
VERSION = "1.1.1"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -198,6 +198,22 @@ describe Fastlane::Actions::AppcenterUploadAction do
|
|||
end.to raise_error("Couldn't find build file at path './nothing.apk'")
|
||||
end
|
||||
|
||||
it "raises an error if given aab was not found" do
|
||||
expect do
|
||||
stub_check_app(200)
|
||||
Fastlane::FastFile.new.parse("lane :test do
|
||||
appcenter_upload({
|
||||
api_token: 'xxx',
|
||||
owner_name: 'owner',
|
||||
app_name: 'app',
|
||||
destinations: 'Testers',
|
||||
destination_type: 'group',
|
||||
aab: './nothing.aab'
|
||||
})
|
||||
end").runner.execute(:test)
|
||||
end.to raise_error("Couldn't find build file at path './nothing.aab'")
|
||||
end
|
||||
|
||||
it "raises an error if given ipa was not found" do
|
||||
expect do
|
||||
stub_check_app(200)
|
||||
|
@ -229,6 +245,21 @@ describe Fastlane::Actions::AppcenterUploadAction do
|
|||
end.to raise_error("Only \".apk\" formats are allowed, you provided \"\"")
|
||||
end
|
||||
|
||||
it "raises an error if given file has invalid extension for aab" do
|
||||
expect do
|
||||
Fastlane::FastFile.new.parse("lane :test do
|
||||
appcenter_upload({
|
||||
api_token: 'xxx',
|
||||
owner_name: 'owner',
|
||||
app_name: 'app',
|
||||
destinations: 'Testers',
|
||||
destination_type: 'group',
|
||||
aab: './spec/fixtures/appfiles/Appfile_empty'
|
||||
})
|
||||
end").runner.execute(:test)
|
||||
end.to raise_error("Only \".aab\" formats are allowed, you provided \"\"")
|
||||
end
|
||||
|
||||
it "raises an error if given file has invalid extension for ipa" do
|
||||
expect do
|
||||
Fastlane::FastFile.new.parse("lane :test do
|
||||
|
@ -260,6 +291,38 @@ describe Fastlane::Actions::AppcenterUploadAction do
|
|||
end.to raise_error("You can't use 'ipa' and 'apk' options in one run")
|
||||
end
|
||||
|
||||
it "raises an error if both aab and apk provided" do
|
||||
expect do
|
||||
Fastlane::FastFile.new.parse("lane :test do
|
||||
appcenter_upload({
|
||||
api_token: 'xxx',
|
||||
owner_name: 'owner',
|
||||
app_name: 'app',
|
||||
destinations: 'Testers',
|
||||
destination_type: 'group',
|
||||
aab: './spec/fixtures/appfiles/aab_file_empty.aab',
|
||||
apk: './spec/fixtures/appfiles/apk_file_empty.apk'
|
||||
})
|
||||
end").runner.execute(:test)
|
||||
end.to raise_error("You can't use 'aab' and 'apk' options in one run")
|
||||
end
|
||||
|
||||
it "raises an error if both aab and ipa provided" do
|
||||
expect do
|
||||
Fastlane::FastFile.new.parse("lane :test do
|
||||
appcenter_upload({
|
||||
api_token: 'xxx',
|
||||
owner_name: 'owner',
|
||||
app_name: 'app',
|
||||
destinations: 'Testers',
|
||||
destination_type: 'group',
|
||||
ipa: './spec/fixtures/appfiles/ipa_file_empty.ipa',
|
||||
apk: './spec/fixtures/appfiles/apk_file_empty.apk'
|
||||
})
|
||||
end").runner.execute(:test)
|
||||
end.to raise_error("You can't use 'ipa' and 'apk' options in one run")
|
||||
end
|
||||
|
||||
it "raises an error if destination type is not group or store" do
|
||||
expect do
|
||||
Fastlane::FastFile.new.parse("lane :test do
|
||||
|
@ -502,7 +565,7 @@ describe Fastlane::Actions::AppcenterUploadAction do
|
|||
stub_create_release_upload(200)
|
||||
stub_upload_build(200)
|
||||
stub_update_release_upload(200, 'committed')
|
||||
stub_update_release(200)
|
||||
stub_update_release(200)
|
||||
stub_get_destination(200)
|
||||
stub_add_to_destination(200)
|
||||
stub_get_release(200)
|
||||
|
@ -519,12 +582,34 @@ describe Fastlane::Actions::AppcenterUploadAction do
|
|||
end").runner.execute(:test)
|
||||
end
|
||||
|
||||
it "works with valid parameters for android app bundle" do
|
||||
stub_check_app(200)
|
||||
stub_create_release_upload(200)
|
||||
stub_upload_build(200)
|
||||
stub_update_release_upload(200, 'committed')
|
||||
stub_update_release(200)
|
||||
stub_get_destination(200)
|
||||
stub_add_to_destination(200)
|
||||
stub_get_release(200)
|
||||
|
||||
Fastlane::FastFile.new.parse("lane :test do
|
||||
appcenter_upload({
|
||||
api_token: 'xxx',
|
||||
owner_name: 'owner',
|
||||
app_name: 'app',
|
||||
aab: './spec/fixtures/appfiles/aab_file_empty.aab',
|
||||
destinations: 'Testers',
|
||||
destination_type: 'group'
|
||||
})
|
||||
end").runner.execute(:test)
|
||||
end
|
||||
|
||||
it "uses GRADLE_APK_OUTPUT_PATH as default for apk" do
|
||||
stub_check_app(200)
|
||||
stub_create_release_upload(200)
|
||||
stub_upload_build(200)
|
||||
stub_update_release_upload(200, 'committed')
|
||||
stub_update_release(200)
|
||||
stub_update_release(200)
|
||||
stub_get_destination(200)
|
||||
stub_add_to_destination(200)
|
||||
stub_get_release(200)
|
||||
|
@ -544,6 +629,31 @@ describe Fastlane::Actions::AppcenterUploadAction do
|
|||
expect(values[:apk]).to eq('./spec/fixtures/appfiles/apk_file_empty.apk')
|
||||
end
|
||||
|
||||
it "uses GRADLE_AAB_OUTPUT_PATH as default for aab" do
|
||||
stub_check_app(200)
|
||||
stub_create_release_upload(200)
|
||||
stub_upload_build(200)
|
||||
stub_update_release_upload(200, 'committed')
|
||||
stub_update_release(200)
|
||||
stub_get_destination(200)
|
||||
stub_add_to_destination(200)
|
||||
stub_get_release(200)
|
||||
|
||||
values = Fastlane::FastFile.new.parse("lane :test do
|
||||
Actions.lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH] = './spec/fixtures/appfiles/aab_file_empty.aab'
|
||||
|
||||
appcenter_upload({
|
||||
api_token: 'xxx',
|
||||
owner_name: 'owner',
|
||||
app_name: 'app',
|
||||
destinations: 'Testers',
|
||||
destination_type: 'group'
|
||||
})
|
||||
end").runner.execute(:test)
|
||||
|
||||
expect(values[:aab]).to eq('./spec/fixtures/appfiles/aab_file_empty.aab')
|
||||
end
|
||||
|
||||
it "uses IPA_OUTPUT_PATH as default for ipa" do
|
||||
stub_check_app(200)
|
||||
stub_create_release_upload(200)
|
||||
|
|
Загрузка…
Ссылка в новой задаче