Skip to content

Instantly share code, notes, and snippets.

@erikfloresq
Last active April 25, 2017 16:15
Show Gist options
  • Save erikfloresq/7666ef82ff020dd2193a25409348286c to your computer and use it in GitHub Desktop.
Save erikfloresq/7666ef82ff020dd2193a25409348286c to your computer and use it in GitHub Desktop.
Fastfile para un preRelease
# Definimos la version minima de fastlane con la que vamos a trabajar
fastlane_version "2.20.0"
# Variables globales
# Nos ayudara a no estar repitiendo datos en nuestros lane y también para realizar cambios mas rápidos en nuestras configuraciones
application_name = "Weriklandia"
application_id = "pe.com.orbis.Weriklandia"
application_language = "Swift 3"
application_deploy_target = "iOS 9"
# Obtenemos la URL base de nuestro proyecto usnado sh, con sh podemos ejecutar comandos de terminal
project_base_url = sh("cd .. && pwd").strip!
channel_notification = "@erikflores"
# Es un archivo de configuración para la generacion de nuestro changelog, yo uso https://github.com/rafinskipg/git-changelog
changelog_configuration_source = "#{project_base_url}.changelogrc"
# Es donde exportaremos nuestro changelog creado
changelog_generation_output = "#{project_base_url}CHANGELOG.md"
# Es donde exportaremos nuestro readme creado con https://github.com/erikfloresq/ios-readme-generator
readme_generation_output = "#{project_base_url}/README.md"
default_platform :ios
platform :ios do
before_all do
ENV["SLACK_URL"] = "https://hooks.slack.com/services/*******"
# Esta configuración nos ayudara a subir nuestro ipa por Pilot, evitando posibles problemas de firewall
ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
end
desc "Generando el release para testflight"
lane :prerelease do
# Nos aseguramos que nuestra rama no tenga commits pendientes
ensure_git_status_clean
# Verificamos que nos encontramos en la rama debug
ensure_git_branch(
branch: 'debug'
)
# Actualizamos nuestra rama y nuestros tags
sh("git pull origin debug && git fetch --tags")
# Usamos la funcion set_version_number para añadir una nueva version a nuestro build, la funcion se encuentra en la parte final
set_version_number
# Usamos la funcion set_build_number para incrementar el numero de nuestro build, la funcion se encuentra en la parte final
set_build_number
# Instalamos los pods que tenemos declarados en nuestro Podfile
cocoapods
# Avisamos por slack que iniciaremos la creacion de un nuevo build
# En el mensaje mostraremos la version y numero del build que obtenemos por las acciones get_version_number y get_build_number
# El nombre de la aplicacion la obtenemos de application_name que fue declara como global
slack(
message: "Generando el beta #{get_version_number} (#{get_build_number}) de #{application_name} para testflight",
channel: channel_notification,
default_payloads: [:git_author]
)
# Generamos el build con el esquema que tiene mis configuraciones para preRelease
gym(
scheme: "#{application_name}PreRelease"
)
# Utilizamos el build generado con gym y usando pilot los subimos a testflight
pilot(
username: "[email protected]",
skip_waiting_for_build_processing: true
)
# Uso set_tag_name para consultar si ingresaremos un nuevo tag, la funccion se encuentra en la parte de inferior
if set_tag_name == true
# Con get_tag_name consulto el nombre del tag para mi changelog, la funccion se encuentra en la parte de inferior
new_tag_name = get_tag_name
# Uso git-changelog para generar mi changelog, fastlane tambien ofrece acciones para la creacion de changelog,
# particularmente prefiero el estilo que maneja este
sh("git-changelog -n #{new_tag_name} --changelogrc #{changelog_configuration_source} --file #{changelog_generation_output}")
# Usaremos ios-readme-generator para generar mi readme al estilo que deseo
sh("ios-readme-generator -n '#{application_name}' -i '#{application_id}' -a '#{get_version_number}' -b '#{get_build_number}' -l '#{application_language}' -d '#{application_deploy_target}' -f '#{readme_generation_output}'")
# Añado mis cambios
git_add(path:"./")
# Realizo un commit de mis ultimos cambios
git_commit(path:"./", message:"Versión #{last_git_tag}")
# Agregamos un nuevo tag con el nombre del tag que ingresamos hace un momento
set_new_tag(new_tag_name)
# Realizamos un push a nuestra rama remota
push_to_git_remote
# Hacemos un push de los tags creados
push_git_tags
end
end
after_all do |lane|
# Una vez terminado la ejecucion de nuestro lane enviamos una notificacion por slack al canal que definimos en la variables globales
slack(
message: "#{application_name} #{last_git_tag} (#{get_build_number}) ya esta en testflight! 🎉 😎",
channel: channel_notification
)
# luego borramos los archivos generados por pilot
clean_build_artifacts
# En caso no tengas que avizar a nadie al slack, puedes usar la linea de abajo para hacer que la computadora te avise con un mensaje de voz
# say "Fastlane ha terminado sus tareas"
end
error do |lane, exception|
slack(
message: "💩 #{exception.message} 💩",
success: false,
channel: channel_notification
)
end
end
# -- HELPER FUNTIONS ---
# Consultamos si vamos a ingresar una nueva versión
def set_version_number()
# con ask podemos recibir informacion por la consola para definir nuestro flujo
response_user = ask("Vamos a ingresar una nueva version?: y/n - Versión actual #{get_version_number}")
if response_user == "y"
# Aqui ejecutamos una funcion que hemos desarrollado abajo
set_new_version
elsif response_user != "n"
puts "Debes de ingresar 'y' para si o 'n' para no"
# Realizamos una version y hacemos uso de una recursividad
set_version_number
end
end
# Agregamos una nueva versión ya sea un patch, minor o major
def set_new_version()
type_of_version = ask("¿Que vas a ingresar un patch, minor o major?")
case type_of_version
when 'patch'
# increment_version_number es una accion que viene con fastlane, pero la hemos acoplado a nuestro flujo
increment_version_number(
bump_type: "patch"
)
when 'minor'
increment_version_number(
bump_type: "minor"
)
when 'major'
increment_version_number(
bump_type: "major"
)
else
puts "De nuevo! ¿Que vas a ingresar un patch, minor o major?"
set_new_version
end
end
# Consultamos si vamos a ingresar un nuevo build
def set_build_number()
response_user = ask("Vamos a ingresar una nuevo build?: y/n - Build actual #{get_build_number}")
if response_user == "y"
increment_build_number
elsif response_user != "n"
puts "Debes de ingresar 'y' para si o 'n' para no"
set_build_number
end
end
# Consultamos como se llamara nuestro nuevo tag
def get_tag_name()
return ask("¿Cuál será el nombre del tag?")
end
# Consultamos si vamos a ingresar un tag
def set_tag_name()
response_user = ask("Vamos a ingresar una nuevo tag?: y/n - Tag actual #{last_git_tag} /n")
if response_user == "y"
return true
elsif response_user != "n"
puts "Debes de ingresar 'y' para si o 'n' para no"
set_tag_name
end
end
# Ingresamos un nuevo tag
def set_new_tag(new_tag_name)
puts "Se crea el tag #{new_tag_name}"
# En este caso lo hacemos usando sh
sh("git tag -a #{new_tag_name} -m 'Se crea #{new_tag_name}'")
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment