class Fastlane::Helper::AndroidFileHelper

Constants

ANDROID_APK_INFO_DIR
ANDROID_APK_INFO_FILENAME
ANDROID_CHANGELOG_DIR
ANDROID_FULL_DESCRIPTION_DIR

ANDROID_CHANGELOG_FILENAME -> changes depending on apk version code

ANDROID_FULL_DESCRIPTION_FILENAME
ANDROID_METADATA_LOC

Public Class Methods

prepareFiles(params, country_MetaData) click to toggle source
# File lib/fastlane/plugin/deploy_file_provider/helper/android_file_helper.rb, line 26
def self.prepareFiles(params, country_MetaData)
  UI.message("Preparing files for ANDROID PlayStore release.".yellow)

  # MetaData root
  metadata_root_dir = "#{params[:metaDataRoot]}"
  UI.message(["Step: Location where metadata will be downloaded:", metadata_root_dir].join(" ").blue)

  # Android PlayStore credentials
  store_credentials_dir = "#{params[:json_key]}" unless params[:json_key].nil?
  UI.message(["Step: Location of credentials for Android PlayStore:", store_credentials_dir].join(" ").blue)

  # Get current metadata from Android PlayStore
  UI.message("Preparing location for metadata download.".yellow)
  clearMetaDataDir(metadata_root_dir)

  UI.message("Step: Fetching current metadata from Android PlayStore".blue)
  fetchCurrentMetaData(metadata_root_dir, store_credentials_dir)

  # Get current *.apk version
  UI.message("Checking version of *.apk which is about to be pushed.".yellow)
  versionCode = fetchVersionCode(params)
  android_changelog_filename = [versionCode, ".txt"].join("")

  # Prepare files for release
  UI.message("Applying changes to fetched metadata.".yellow)
  num_of_languages = ANDROID_METADATA_LOC.size
  num_of_processed_languages = 0
  for i in 0...country_MetaData.size
    language_MetaData = country_MetaData[i]
    language_Key = language_MetaData.language.downcase
 
    unless ANDROID_METADATA_LOC.key?(language_Key)
      next
    end

    UI.message(["Step: ---- Attempting to create files for language -", language_Key].join(" ").blue)
  
    create_description(metadata_root_dir, language_Key, language_MetaData)
    create_changelog(metadata_root_dir, language_Key, language_MetaData, android_changelog_filename)
    num_of_processed_languages += 1

    UI.message("Step: ---- Files updated".blue)
  end

  # Check if all languages were processed
  if num_of_processed_languages != num_of_languages
    UI.message("Error: expected to receive metadata for: #{num_of_languages} languages, but received for: #{num_of_processed_languages}!".red)
    raise Exception, "Lane was stopped by script"
  end
end

Private Class Methods

clearMetaDataDir(metadata_root_dir) click to toggle source
# File lib/fastlane/plugin/deploy_file_provider/helper/android_file_helper.rb, line 78
def self.clearMetaDataDir(metadata_root_dir)
  if (File.directory?(metadata_root_dir))
    UI.message(["Step: Removed old metadata folder in location:", metadata_root_dir].join(" ").blue)
    FileUtils.rm_rf(metadata_root_dir)
  end
end
create_changelog(metadata_root_dir, language_Key, language_MetaData, filename) click to toggle source
# File lib/fastlane/plugin/deploy_file_provider/helper/android_file_helper.rb, line 126
def self.create_changelog(metadata_root_dir, language_Key, language_MetaData, filename)
  changelog_metaDataDir = [
    metadata_root_dir,
    ANDROID_METADATA_LOC[language_Key],
    ANDROID_CHANGELOG_DIR].join

  UI.message(["Step: Attempting to prepare changelog file with name:", filename, "for language:", language_Key, "- in location:", changelog_metaDataDir].join(" ").blue)

  unless File.directory?(changelog_metaDataDir)
    UI.message(["Error: Could not find location'", changelog_metaDataDir, "'."].join(" ").red)
    raise Exception, "Lane was stopped by script"
  end

  file = changelog_metaDataDir + filename
  if File.exists?(file) 
    File.delete(file)
  end

  new_File = File.new(file, "w")
  begin
    new_File.puts(language_MetaData.releaseNotesAndroid)
  ensure
    new_File.close
  end

  new_File = File.open(file, "r")
  begin
    content = new_File.read
    UI.message(["Step:", filename, "- length: #{content.length}"].join(" ").blue)
  ensure
    new_File.close
  end
end
create_description(metadata_root_dir, language_Key, language_MetaData) click to toggle source
# File lib/fastlane/plugin/deploy_file_provider/helper/android_file_helper.rb, line 161
def self.create_description(metadata_root_dir, language_Key, language_MetaData) 
  fulldescription_metaDataDir = [
    metadata_root_dir,
    ANDROID_METADATA_LOC[language_Key], 
    ANDROID_FULL_DESCRIPTION_DIR].join
  
  UI.message(["Step: Attempting to prepare", ANDROID_FULL_DESCRIPTION_FILENAME, "for language:", language_Key, "- in location:",fulldescription_metaDataDir].join(" ").blue)
  
  unless File.directory?(fulldescription_metaDataDir)
    UI.message(["Error: Could not find location'", fulldescription_metaDataDir, "'."].join(" ").red)
    raise Exception, "Lane was stopped by script"
  end
 
  file = fulldescription_metaDataDir + ANDROID_FULL_DESCRIPTION_FILENAME
  if File.exists?(file) 
    File.delete(file)
  end

  new_File = File.new(file, "w")
  begin
    new_File.puts(language_MetaData.description_android)
  ensure
    new_File.close
  end

  new_File = File.open(file, "r")
  begin
    content = new_File.read
    UI.message(["Step:", ANDROID_FULL_DESCRIPTION_FILENAME, "- length: #{content.length}"].join(" ").blue)
  ensure
    new_File.close
  end
end
fetchCurrentMetaData(metadata_root_dir, store_credentials_dir) click to toggle source
# File lib/fastlane/plugin/deploy_file_provider/helper/android_file_helper.rb, line 86
def self.fetchCurrentMetaData(metadata_root_dir, store_credentials_dir)
  fetch_command = "fastlane supply init --metadata_path #{metadata_root_dir} --json_key #{store_credentials_dir}"
  Action.sh(fetch_command)

  unless File.directory?(metadata_root_dir)
    UI.message(["Error: Could not find location'", metadata_root_dir, "'."].join(" ").red)
    raise Exception, "Lane was stopped by script"
  end
end
fetchVersionCode(params) click to toggle source
# File lib/fastlane/plugin/deploy_file_provider/helper/android_file_helper.rb, line 97
def self.fetchVersionCode(params) 
  UI.message("Note: Android changelog filename is created from .apk version code.".green)
  UI.message(["Step: Attempting to get Android .apk versionCode from", ANDROID_APK_INFO_FILENAME, "located in:", ANDROID_APK_INFO_DIR].join(" ").blue)

  file = ANDROID_APK_INFO_DIR + ANDROID_APK_INFO_FILENAME

  version_code_header = "Version code: "
  android_apk_version_code = nil
  if File.exists?(file)
    File.open(file) do |f|
        f.each_line do |line|
          if line.include?(version_code_header)
            android_apk_version_code = line.gsub(/\D/, '')   
          end
        end
    end
  end

  if android_apk_version_code.empty? || android_apk_version_code == nil
    UI.message("Error: Unable to fetch Android versionCode. No #{ANDROID_APK_INFO_FILENAME} was found.".red)
    raise Exception, "Lane was stopped by script"
  else 
    UI.message("Step: Fetch successfull! Version code: #{android_apk_version_code}".blue)
  end

  return android_apk_version_code
end