Refactorizar DeployLocal

En realidad no hay mucho cambio interno, pero se deprecaron algunos
métodos de Deploy y se ajustaron otros.
This commit is contained in:
f 2021-08-01 21:51:44 -03:00
parent e1664d0c12
commit e1749d6c70

View file

@ -1,11 +1,9 @@
# frozen_string_literal: true # frozen_string_literal: true
# Alojamiento local, solo genera el sitio, con lo que no necesita hacer # Alojamiento local, genera el sitio como si corriéramos `jekyll build`.
# nada más
class DeployLocal < Deploy class DeployLocal < Deploy
store :values, accessors: %i[], coder: JSON # Asegurarse que el hostname es el permitido.
before_save :default_hostname!
before_destroy :remove_destination!
# Realizamos la construcción del sitio usando Jekyll y un entorno # Realizamos la construcción del sitio usando Jekyll y un entorno
# limpio para no pasarle secretos # limpio para no pasarle secretos
@ -20,42 +18,48 @@ class DeployLocal < Deploy
jekyll_build jekyll_build
end end
# Sólo permitimos un deploy local
def limit
1
end
# Obtener el tamaño de todos los archivos y directorios (los # Obtener el tamaño de todos los archivos y directorios (los
# directorios son archivos :) # directorios son archivos :)
#
# @return [Integer]
def size def size
paths = [destination, File.join(destination, '**', '**')] paths = [destination, File.join(destination, '**', '**')]
Dir.glob(paths).map do |file| Dir.glob(paths).map do |file|
if File.symlink? file File.symlink?(file) ? 0 : File.size(file)
0
else
File.size(file)
end
end.inject(:+) end.inject(:+)
end end
# La ubicación del sitio luego de generarlo.
#
# @return [String]
def destination def destination
File.join(Rails.root, '_deploy', site.hostname) File.join(Rails.root, '_deploy', hostname)
end
# El hostname es el nombre del sitio más el dominio principal.
#
# @return [String]
def default_hostname
"#{site.name}.#{Site.domain}"
end end
private private
# Crea el directorio destino si no existe.
def mkdir def mkdir
FileUtils.mkdir_p destination FileUtils.mkdir_p destination
end end
# Un entorno que solo tiene lo que necesitamos # Un entorno que solo tiene lo que necesitamos
#
# @return [Hash]
def env def env
# XXX: This doesn't support Windows paths :B # XXX: This doesn't support Windows paths :B
paths = [File.dirname(`which bundle`), '/usr/bin', '/bin'] paths = [File.dirname(`which bundle`), '/usr/bin', '/bin']
{ {
'HOME' => home_dir, 'HOME' => site.path,
'PATH' => paths.join(':'), 'PATH' => paths.join(':'),
'SPREE_API_KEY' => site.tienda_api_key, 'SPREE_API_KEY' => site.tienda_api_key,
'SPREE_URL' => site.tienda_url, 'SPREE_URL' => site.tienda_url,
@ -66,10 +70,15 @@ class DeployLocal < Deploy
} }
end end
# @return [String]
def yarn_lock def yarn_lock
File.join(site.path, 'yarn.lock') File.join(site.path, 'yarn.lock')
end end
# Determina si este proyecto se gestiona con Yarn, buscando si el
# archivo yarn.lock existe.
#
# @return [Boolean]
def yarn_lock? def yarn_lock?
File.exist? yarn_lock File.exist? yarn_lock
end end
@ -79,12 +88,15 @@ class DeployLocal < Deploy
end end
# Corre yarn dentro del repositorio # Corre yarn dentro del repositorio
#
# @return [Boolean,Nil]
def yarn def yarn
return unless yarn_lock? run 'yarn' unless yarn_lock?
run 'yarn'
end end
# Instala las dependencias.
#
# @return [Boolean]
def bundle def bundle
if Rails.env.production? if Rails.env.production?
run %(bundle install --no-cache --path="#{gems_dir}") run %(bundle install --no-cache --path="#{gems_dir}")
@ -93,6 +105,9 @@ class DeployLocal < Deploy
end end
end end
# Genera el sitio.
#
# @return [Boolean]
def jekyll_build def jekyll_build
run %(bundle exec jekyll build --trace --profile --destination "#{escaped_destination}") run %(bundle exec jekyll build --trace --profile --destination "#{escaped_destination}")
end end