Last active
April 25, 2017 16:15
-
-
Save erikfloresq/7666ef82ff020dd2193a25409348286c to your computer and use it in GitHub Desktop.
Fastfile para un preRelease
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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