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