mattermost-mobile/fastlane/Fastfile
Miguel Alatzar cbe0c719ac [MM-15874] Add native code to support RNN v2 on Android (#2855)
* Remove fix for MM-9233

* MM-15774 Add native code to support RNN v2 on iOS

* Android changes for RNN v2 upgrade

The activity visibility handling of NotificationsLifecycleFacade
is no longer needed in RNN v2. I've moved the lifecycle callbacks
we use for handling managed config into
ManagedActivityLifecycleCallbacks.java and registered them in
MainApplication's onCreate. Also, I've moved and updated the
loading and getting of the managed config into MainApplication

* Update moduleNames and modulePaths

* Use TAG in restrictionsReceiver

* Set launch screen onCreate

* Comment out registerActivityLifecycleCallbacks for now

* Remove setSoftInputMode call as it's handled in the manifest

* Remove clearHostOnActivityDestroy as that fix is no longer needed

* Rename to canLaunchEntry

* Remove replacement of super.onBackPressed()

* Remove react-navigation from packager files
2019-06-12 15:26:03 -04:00

758 lines
25 KiB
Ruby

fastlane_version '2.71.0'
fastlane_require 'aws-sdk-s3'
fastlane_require 'erb'
fastlane_require 'json'
fastlane_require 'pathname'
skip_docs
configured = false
is_build_pr = false
# Executes before anything else use to setup the script
before_all do |lane, options|
if lane.to_s == 'build_pr'
pr = options[:pr]
UI.success("Building #{pr}")
ENV['BRANCH_TO_BUILD'] = pr
is_build_pr = true
end
# Raises an error is git is not clean
if ENV['COMMIT_CHANGES_TO_GIT'] == 'true'
ensure_git_status_clean
end
# Block to ensure we are on the right branch
branch = ENV['BRANCH_TO_BUILD'] || ENV['GIT_BRANCH']
begin
ensure_git_branch(
branch: branch
)
rescue
sh "git checkout #{branch}"
UI.success("Using branch \"#{branch}\"")
end
# If we are going to commit changes to git create a separate branch
# so no changes are done in the branch that is being built
if ENV['COMMIT_CHANGES_TO_GIT'] == 'true'
local_branch = ENV['GIT_LOCAL_BRANCH'] || 'build'
sh "git checkout -b #{local_branch}"
UI.success("Creating branch \"#{local_branch}\"")
end
end
after_all do |lane|
if lane.to_s == 'build'
submit_to_store
end
if ENV['RESET_GIT_BRANCH'] == 'true'
branch = ENV['BRANCH_TO_BUILD'] || 'master'
package_id = ENV['MAIN_APP_IDENTIFIER'] || 'com.mattermost.rnbeta'
beta_dir = '../android/app/src/main/java/com/mattermost/rnbeta'
release_dir = "../android/app/src/main/java/#{package_id.gsub '.', '/'}"
if beta_dir != release_dir
sh "rm -rf #{release_dir}"
end
reset_git_repo(
force: true,
skip_clean: true
)
sh "git checkout #{branch}"
if ENV['COMMIT_CHANGES_TO_GIT'] == 'true'
local_branch = ENV['GIT_LOCAL_BRANCH'] || 'build'
sh "git branch -D #{local_branch}"
UI.success("Deleted working branch \"#{local_branch}\"")
if lane.to_s == 'build_pr'
sh 'git checkout master'
## Remove the branch for the PR
sh "git branch -D #{branch}"
UI.success("Deleted PR branch \"#{branch}\"")
end
end
end
end
desc 'Increment version number for both Android and iOS'
lane :set_app_version do
version_number = ENV['VERSION_NUMBER']
unless version_number.nil? || version_number.empty?
package = load_config_json('../package.json')
package['version'] = version_number
save_config_json('../package.json', package)
android_set_version_name(
gradle_file: './android/app/build.gradle',
version_name: version_number
)
increment_version_number(
xcodeproj: './ios/Mattermost.xcodeproj',
version_number: version_number
)
if ENV['COMMIT_CHANGES_TO_GIT'] == 'true'
msg = ENV['INCREMENT_VERSION_NUMBER_MESSAGE'] || 'Bump app version number to '
commit_message = "#{msg} #{version_number.to_s}"
build_folder_path = Dir[File.expand_path('..')].first
repo_path = (sh "git -C #{build_folder_path} rev-parse --show-toplevel").strip
git_dirty_files = (sh "git -C #{repo_path} diff --name-only HEAD").split(" ").join(' ')
unless git_dirty_files.empty?
sh "git -C #{repo_path} commit -m \"#{commit_message}\" #{git_dirty_files}"
UI.success("Successfully committed \"#{git_dirty_files}\" 💾.")
end
end
end
end
desc 'Increments the build number for both Android and iOS'
lane :set_app_build_number do
## set the build number for both platforms
# use the one for iOS if no env variable set
if ENV['INCREMENT_BUILD_NUMBER'] === 'true'
build_number = ENV['BUILD_NUMBER'] || (get_build_number(xcodeproj: './ios/Mattermost.xcodeproj').to_i + 1)
increment_build_number(
xcodeproj: './ios/Mattermost.xcodeproj',
build_number: build_number
)
android_set_version_code(
gradle_file: './android/app/build.gradle',
version_code: build_number
)
if ENV['COMMIT_CHANGES_TO_GIT'] == 'true'
msg = ENV['INCREMENT_BUILD_NUMBER_MESSAGE'] || 'Bump app build number to '
commit_message = "#{msg} #{build_number.to_s}"
build_folder_path = Dir[File.expand_path('..')].first
repo_path = (sh "git -C #{build_folder_path} rev-parse --show-toplevel").strip
git_dirty_files = (sh "git -C #{repo_path} diff --name-only HEAD").split(" ").join(' ')
unless git_dirty_files.empty?
sh "git -C #{repo_path} commit -m \"#{commit_message}\" #{git_dirty_files}"
UI.success("Successfully committed \"#{git_dirty_files}\" 💾.")
end
end
end
end
desc 'Configure the app before building'
lane :configure do
json = load_config_json('../dist/assets/config.json')
# Set the Segment API Key
unless ENV['SEGMENT_API_KEY'].nil? || ENV['SEGMENT_API_KEY'].empty?
json['SegmentApiKey'] = ENV['SEGMENT_API_KEY']
end
# Configure Sentry if enabled
if ENV['SENTRY_ENABLED'] == 'true'
json['SentryEnabled'] = true
json['SentryOrg'] = ENV['SENTRY_ORG']
json['SentryProjectIos'] = ENV['SENTRY_PROJECT_IOS']
json['SentryProjectAndroid'] = ENV['SENTRY_PROJECT_ANDROID']
json['SentryDsnIos'] = ENV['SENTRY_DSN_IOS']
json['SentryDsnAndroid'] = ENV['SENTRY_DSN_ANDROID']
end
# Save the config.json file
save_config_json('../dist/assets/config.json', json)
configured = true
end
desc 'Build the app for Android and iOS'
lane :build do |options|
configure
set_app_version
set_app_build_number
# Build the android app
self.runner.current_platform = :android
build
# Build the ios app
self.runner.current_platform = :ios
build
end
desc 'Build the app for Android and iOS unsigned'
lane :unsigned do
configure
# Build the android app
self.runner.current_platform = :android
unsigned
# Build the ios app
self.runner.current_platform = :ios
unsigned
end
desc 'Build the app using a PR so QA can test'
lane :build_pr do
configure
# Build the android app
self.runner.current_platform = :android
build
# Build the ios app
self.runner.current_platform = :ios
build
end
platform :ios do
desc 'Build iOS app'
lane :build do
unless configured
configure
end
update_identifiers
replace_assets
build_ios
upload_file_to_s3({:os_type => "iOS"})
end
desc 'Build an unsigned ipa'
lane :unsigned do
unless configured
configure
end
update_identifiers
replace_assets
end
lane :update_identifiers do
# Set the name for the app
app_name = ENV['APP_NAME'] || 'Mattermost Beta'
update_info_plist(
xcodeproj: './ios/Mattermost.xcodeproj',
plist_path: 'Mattermost/Info.plist',
display_name: app_name
)
# Set the notification service extension bundle identifier
notification_bundle_id = ENV['NOTIFICATION_SERVICE_IDENTIFIER'] || 'com.mattermost.rnbeta.NotificationService'
update_app_identifier(
xcodeproj: './ios/Mattermost.xcodeproj',
plist_path: 'NotificationService/Info.plist',
app_identifier: notification_bundle_id
)
find_replace_string(
path_to_file: './ios/Mattermost.xcodeproj/project.pbxproj',
old_string: 'com.mattermost.rnbeta.NotificationService',
new_string: notification_bundle_id
)
# Set the share extension bundle identifier
extension_bundle_id = ENV['EXTENSION_APP_IDENTIFIER'] || 'com.mattermost.rnbeta.MattermostShare'
update_app_identifier(
xcodeproj: './ios/Mattermost.xcodeproj',
plist_path: 'MattermostShare/Info.plist',
app_identifier: extension_bundle_id
)
find_replace_string(
path_to_file: './ios/Mattermost.xcodeproj/project.pbxproj',
old_string: 'com.mattermost.rnbeta.MattermostShare',
new_string: extension_bundle_id
)
# Set the app bundle id
app_bundle_id = ENV['MAIN_APP_IDENTIFIER'] || 'com.mattermost.rnbeta'
update_app_identifier(
xcodeproj: './ios/Mattermost.xcodeproj',
plist_path: 'Mattermost/Info.plist',
app_identifier: app_bundle_id
)
find_replace_string(
path_to_file: './ios/Mattermost.xcodeproj/project.pbxproj',
old_string: 'com.mattermost.rnbeta',
new_string: app_bundle_id
)
# If set update the development team
unless ENV['FASTLANE_TEAM_ID'].nil? || ENV['FASTLANE_TEAM_ID'].empty?
update_project_team(
path: './ios/Mattermost.xcodeproj',
teamid: ENV['FASTLANE_TEAM_ID']
)
end
# Set the ICloud container
icloud_container = ENV['IOS_ICLOUD_CONTAINER'] || 'iCloud.com.mattermost.rnbeta'
update_icloud_container_identifiers(
entitlements_file: './ios/Mattermost/Mattermost.entitlements',
icloud_container_identifiers: [icloud_container]
)
# Set the app group id to share data between the app and the extension
app_group_id = ENV['IOS_APP_GROUP'] || 'group.com.mattermost.rnbeta'
update_app_group_identifiers(
entitlements_file: './ios/Mattermost/Mattermost.entitlements',
app_group_identifiers: [app_group_id]
)
find_replace_string(
path_to_file: './ios/UploadAttachments/UploadAttachments/Constants.m',
old_string: 'group.com.mattermost.rnbeta',
new_string: app_group_id
)
update_app_group_identifiers(
entitlements_file: './ios/MattermostShare/MattermostShare.entitlements',
app_group_identifiers: [app_group_id]
)
update_app_group_identifiers(
entitlements_file: './ios/NotificationService/NotificationService.entitlements',
app_group_identifiers: [app_group_id]
)
# Sync the provisioning profiles using match
if ENV['SYNC_PROVISIONING_PROFILES'] == 'true'
match(type: ENV['MATCH_TYPE'] || 'adhoc')
end
end
lane :replace_assets do
if ENV['REPLACE_ASSETS'] == 'true'
sh 'cp -R ../dist/assets/release/icons/ios/* ../ios/Mattermost/Images.xcassets/AppIcon.appiconset/'
sh 'cp -R ../dist/assets/release/splash_screen/ios/* ../ios/SplashScreenResource/'
end
end
error do |lane, exception|
version = get_version_number(xcodeproj: './ios/Mattermost.xcodeproj', target: 'Mattermost')
build_number = get_build_number(xcodeproj: './ios/Mattermost.xcodeproj')
send_message_to_mattermost({
:version_number => version,
:build_number => build_number,
:pretext => '',
:title => 'Unsuccessful Build',
:thumb_url => 'https://support.apple.com/library/content/dam/edam/applecare/images/en_US/iOS/move-to-ios-icon.png',
:msg => exception.message,
:default_payloads => [:lane],
:success => false
})
end
def build_ios()
app_name = ENV['APP_NAME'] || 'Mattermost Beta'
app_name_sub = app_name.gsub(" ", "_")
config_mode = ENV['BUILD_FOR_RELEASE'] == 'true' ? 'Release' : 'Debug'
method = ENV['IOS_BUILD_EXPORT_METHOD'].nil? || ENV['IOS_BUILD_EXPORT_METHOD'].empty? ? 'ad-hoc' : ENV['IOS_BUILD_EXPORT_METHOD']
gym(
clean: true,
scheme: 'Mattermost',
configuration: config_mode,
workspace: './ios/Mattermost.xcworkspace',
export_method: method,
skip_profile_detection: true,
output_name: "#{app_name_sub}.ipa",
export_options: {
signingStyle: 'manual',
iCloudContainerEnvironment: 'Production'
}
)
end
end
platform :android do
desc 'Build Android app'
lane :build do
unless configured
configure
end
configure_telemetry_android
update_identifiers
replace_assets
link_sentry_android
build_android
move_apk_to_root
upload_file_to_s3({:os_type => "Android"})
end
desc 'Build an unsigned apk'
lane :unsigned do
unless configured
configure
end
update_identifiers
replace_assets
gradle(
task: 'assemble',
build_type: 'Unsigned',
project_dir: 'android/'
)
end
desc 'Update config and module/listener for Android telemetry'
lane :configure_telemetry_android do
if ENV['TELEMETRY_ENABLED'] == 'true' && ENV['TELEMETRY_URL'] != '' && ENV['TELEMETRY_API_KEY'] != ''
# Update telemetry config
json = load_config_json('../dist/assets/config.json')
json['TelemetryEnabled'] = true
json['TelemetryUrl'] = ENV['TELEMETRY_URL']
json['TelemetryApiKey'] = ENV['TELEMETRY_API_KEY']
save_config_json('../dist/assets/config.json', json)
beta_dir = './android/app/src/main/java/com/mattermost/rnbeta/'
# Listen to telemetry react markers
find_replace_string(
path_to_file: "#{beta_dir}MainApplication.java",
old_string: '// addReactMarkerListener();',
new_string: 'addReactMarkerListener();'
)
end
end
lane :update_identifiers do
# Set the name for the app
app_name = ENV['APP_NAME'] || 'Mattermost Beta'
sh "echo '#{app_name}' > ../fastlane/metadata/android/en-US/title.txt"
android_change_string_app_name(
newName: app_name,
stringsFile: './android/app/src/main/res/values/strings.xml'
)
package_id = ENV['MAIN_APP_IDENTIFIER'] || 'com.mattermost.rnbeta'
android_change_package_identifier(newIdentifier: package_id, manifest: './android/app/src/main/AndroidManifest.xml')
android_update_application_id(app_folder_name: 'android/app', application_id: package_id)
beta_dir = './android/app/src/main/java/com/mattermost/rnbeta/'
release_dir = "./android/app/src/main/java/#{package_id.gsub '.', '/'}/"
if ENV['BUILD_FOR_RELEASE'] == 'true'
find_replace_string(
path_to_file: "#{beta_dir}MainApplication.java",
old_string: 'return BuildConfig.DEBUG;',
new_string: 'return false;'
)
end
if release_dir != beta_dir
unless Dir.exist?(".#{release_dir}")
FileUtils.mkdir_p ".#{release_dir}"
end
sh "mv .#{beta_dir}* .#{release_dir}"
find_replace_string(
path_to_file: './android/app/BUCK',
old_string: 'package com.mattermost.rnbeta;',
new_string: "package #{package_id};"
)
Dir.glob(".#{release_dir}*.java") do |item|
find_replace_string(
path_to_file: item[1..-1],
old_string: 'package com.mattermost.rnbeta;',
new_string: "package #{package_id};"
)
end
Dir.glob('../android/app/src/main/java/com/mattermost/share/*.java') do |item|
find_replace_string(
path_to_file: item[1..-1],
old_string: 'import com.mattermost.rnbeta.MainApplication;',
new_string: "import #{package_id}.MainApplication;"
)
end
end
end
lane :replace_assets do
if ENV['REPLACE_ASSETS'] == 'true'
sh 'cp -R ../dist/assets/release/icons/android/* ../android/app/src/main/res/'
sh 'cp -R ../dist/assets/release/splash_screen/android/* ../android/app/src/main/res/'
end
end
error do |lane, exception|
build_number = android_get_version_code(
gradle_file: './android/app/build.gradle'
)
version_number = android_get_version_name(
gradle_file: './android/app/build.gradle'
)
send_message_to_mattermost({
:version_number => version_number,
:build_number => build_number,
:pretext => '',
:title => 'Unsuccessful Build',
:thumb_url => 'https://lh3.ggpht.com/XL0CrI8skkxnboGct-duyg-bZ_MxJDTrjczyjdU8OP2PM1dmj7SP4jL1K8JQeMIB3AM=w300',
:msg => exception.message,
:default_payloads => [:lane],
:success => false,
})
end
def build_android()
config_mode = ENV['BUILD_FOR_RELEASE'] == 'true' ? 'Release' : 'Debug'
gradle(
task: 'app:assemble',
build_type: config_mode,
project_dir: 'android/'
)
end
def move_apk_to_root
app_name = ENV['APP_NAME'] || 'Mattermost Beta'
app_name_sub = app_name.gsub(" ", "_")
new_apk_path = "#{Pathname.new(File.expand_path(File.dirname(__FILE__))).parent.to_s}/#{app_name_sub}.apk"
apk_path = lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]
unless apk_path.nil?
sh "mv #{apk_path} #{new_apk_path}"
lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] = new_apk_path
end
end
def link_sentry_android
if ENV['SENTRY_ENABLED'] == 'true'
url = 'https://sentry.io'
File.open('../android/sentry.properties', 'w+') do |f|
UI.message('Creating sentry.properties from environment')
f.write(
"defaults.url=#{url}\n"\
"defaults.org=#{ENV['SENTRY_ORG']}\n"\
"defaults.project=#{ENV['SENTRY_PROJECT_ANDROID']}\n"\
"auth.token=#{ENV['SENTRY_AUTH_TOKEN']}\n"
)
end
else
UI.message('Not creating sentry.properties because Sentry is disabled')
end
end
end
def load_config_json(json_path)
config_file = File.read(json_path)
JSON.parse(config_file)
end
def save_config_json(json_path, json)
File.open(json_path, 'w') do |f|
f.write(JSON.pretty_generate(json))
end
end
def send_message_to_mattermost(options)
unless ENV['MATTERMOST_WEBHOOK_URL'].nil? || ENV['MATTERMOST_WEBHOOK_URL'].empty?
mattermost(
pretext: options[:pretext],
message: options[:msg],
default_payloads: options[:default_payloads],
username: 'Fastlane',
icon_url: 'https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png',
payload: {},
attachment_properties: {
title: options[:title],
thumb_url: options[:thumb_url],
fields: [{
title: 'Version',
value: options[:version_number],
short: true
},
{
title: 'Build Number',
value: options[:build_number],
short: true
},
{
title: 'Built by',
value: 'Jenkins',
short: true
}]
},
success: options[:success]
)
end
end
def submit_to_store
apk_path = lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]
ipa_path = lane_context[SharedValues::IPA_OUTPUT_PATH]
app_name = ENV['APP_NAME'] || 'Mattermost Beta'
app_name_sub = app_name.gsub(" ", "_")
s3_region = ENV['AWS_REGION']
s3_bucket = ENV['AWS_BUCKET_NAME']
# Submit to Google Play if required
if !apk_path.nil? && ENV['SUBMIT_ANDROID_TO_GOOGLE_PLAY'] == 'true'
UI.success("apk file #{apk_path}")
supply(
track: ENV['SUPPLY_TRACK'] || 'alpha',
apk: apk_path
)
version_number = android_get_version_name(gradle_file: './android/app/build.gradle')
build_number = android_get_version_code(gradle_file: './android/app/build.gradle')
s3_folder = "#{ENV['AWS_FOLDER_NAME']}/#{version_number}/#{build_number}"
public_link = "https://#{s3_bucket}/#{s3_folder}/#{app_name_sub}.apk"
# Send a build message to Mattermost
pretext = '#### New Android released ready to be published'
msg = "Release has been cut and is on the Beta track ready to be published.\nDownload link: #{public_link}"
if ENV['BETA_BUILD'] == 'true'
pretext = '#### New Android beta published to Google Play'
msg = "Sign up as a beta tester [here](https://play.google.com/apps/testing/com.mattermost.rnbeta).\nDownload link: #{public_link}"
end
send_message_to_mattermost({
:version_number => version_number,
:build_number => build_number,
:pretext => pretext,
:title => '',
:thumb_url => 'https://lh3.ggpht.com/XL0CrI8skkxnboGct-duyg-bZ_MxJDTrjczyjdU8OP2PM1dmj7SP4jL1K8JQeMIB3AM=w300',
:msg => msg,
:default_payloads => [],
:success => true,
})
end
# Submit to TestFlight if required
if !ipa_path.nil? && ENV['SUBMIT_IOS_TO_TESTFLIGHT'] == 'true'
UI.success("ipa file #{ipa_path}")
pilot
version_number = get_version_number(xcodeproj: './ios/Mattermost.xcodeproj', target: 'Mattermost')
build_number = get_build_number(xcodeproj: './ios/Mattermost.xcodeproj')
s3_folder = "#{ENV['AWS_FOLDER_NAME']}/#{version_number}/#{build_number}"
public_link = "https://#{s3_bucket}/#{s3_folder}/#{app_name_sub}.ipa"
# Send a build message to Mattermost
pretext = '#### New iOS released ready to be published'
msg = "Release has been cut and is on TestFlight ready to be published.\nDownload link: #{public_link}"
if ENV['BETA_BUILD'] == 'true'
pretext = '#### New iOS beta published to TestFlight'
msg = "Sign up as a beta tester [here](https://testflight.apple.com/join/Q7Rx7K9P).\nDownload link: #{public_link}"
end
send_message_to_mattermost({
:version_number => version_number,
:build_number => build_number,
:pretext => pretext,
:title => '',
:thumb_url => 'https://support.apple.com/library/content/dam/edam/applecare/images/en_US/iOS/move-to-ios-icon.png',
:msg => msg,
:default_payloads => [],
:success => true,
})
end
end
def qa_build_message(options)
abbreviated_commit_hash = last_git_commit[:abbreviated_commit_hash]
os_type = options[:os_type]
install_url = options[:install_url]
unless ENV['MATTERMOST_WEBHOOK_URL'].nil? || ENV['MATTERMOST_WEBHOOK_URL'].empty?
os_type = options[:os_type]
if os_type == 'Android'
msg = "QA build [#{abbreviated_commit_hash}](https://github.com/mattermost/mattermost-mobile/commit/#{abbreviated_commit_hash}) — [Android APK Link](#{install_url})"
mattermost(message: msg, username: 'Fastlane', icon_url: 'https://lh3.ggpht.com/XL0CrI8skkxnboGct-duyg-bZ_MxJDTrjczyjdU8OP2PM1dmj7SP4jL1K8JQeMIB3AM=w300')
elsif os_type == 'iOS'
msg = "QA build [#{abbreviated_commit_hash}](https://github.com/mattermost/mattermost-mobile/commit/#{abbreviated_commit_hash}) — [iOS pList Link](#{install_url})"
mattermost(message: msg, username: 'Fastlane', icon_url: 'https://support.apple.com/library/content/dam/edam/applecare/images/en_US/iOS/move-to-ios-icon.png')
end
else
UI.success("PR Built for #{os_type}: #{install_url}")
end
end
desc 'Upload file to s3'
lane :upload_file_to_s3 do |options|
os_type = options[:os_type]
file = options[:file]
file_plist = ""
if file.nil? || file.empty?
app_name = ENV['APP_NAME'] || 'Mattermost Beta'
filename = app_name.gsub(" ", "_")
if os_type == 'Android'
file = "#{filename}.apk"
elsif os_type == 'iOS'
file = "#{filename}.ipa"
file_plist = "#{filename}.plist"
end
end
build_folder_path = Dir[File.expand_path('..')].first
file_path = "#{build_folder_path}/#{file}"
unless ENV['AWS_BUCKET_NAME'].nil? || ENV['AWS_BUCKET_NAME'].empty? || ENV['AWS_REGION'].nil? || ENV['AWS_REGION'].empty? || file_path.nil?
s3_region = ENV['AWS_REGION']
s3_bucket = ENV['AWS_BUCKET_NAME']
s3_folder = ''
if is_build_pr
s3_folder = "#{ENV['AWS_FOLDER_NAME']}/#{ENV['BRANCH_TO_BUILD']}"
else
if os_type == 'Android'
version_number = android_get_version_name(gradle_file: './android/app/build.gradle')
build_number = android_get_version_code(gradle_file: './android/app/build.gradle')
elsif os_type == 'iOS'
version_number = get_version_number(xcodeproj: './ios/Mattermost.xcodeproj', target: 'Mattermost')
build_number = get_build_number(xcodeproj: './ios/Mattermost.xcodeproj')
end
s3_folder = "#{ENV['AWS_FOLDER_NAME']}/#{version_number}/#{build_number}"
end
s3 = Aws::S3::Resource.new(region: s3_region)
file_obj = s3.bucket(s3_bucket).object("#{s3_folder}/#{file}")
file_obj.upload_file("#{file_path}")
if is_build_pr
if os_type == 'Android'
install_url = "https://#{s3_bucket}/#{s3_folder}/#{file}"
elsif os_type == 'iOS'
current_build_number = get_build_number(xcodeproj: './ios/Mattermost.xcodeproj')
plist_template = File.read('plist.erb')
plist_body = ERB.new(plist_template).result(binding)
plist_obj = s3.bucket(s3_bucket).object("#{s3_folder}/#{file_plist}")
plist_obj.put(body: plist_body)
install_url = "itms-services://?action=download-manifest&url=https://#{s3_bucket}/#{s3_folder}/#{file_plist}"
end
qa_build_message({
:os_type => os_type,
:install_url => install_url
})
end
UI.success("S3 bucket @#{s3_bucket}, object @#{s3_folder}/#{file}")
UI.success("S3 public path: https://#{s3_bucket}/#{s3_folder}/#{file}")
end
end