From e1749d6c7010ac2d203d84b05fe15b7e9d42eadc Mon Sep 17 00:00:00 2001 From: f Date: Sun, 1 Aug 2021 21:51:44 -0300 Subject: [PATCH] Refactorizar DeployLocal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit En realidad no hay mucho cambio interno, pero se deprecaron algunos métodos de Deploy y se ajustaron otros. --- app/models/deploy_local.rb | 55 ++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/app/models/deploy_local.rb b/app/models/deploy_local.rb index 02b837f..d2a73cb 100644 --- a/app/models/deploy_local.rb +++ b/app/models/deploy_local.rb @@ -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