#!/bin/bash # TODO convertir a ruby! set -e rails_root="${PWD}" # Encontrar todos los sitios únicos con el archivo `.generate`. Esto # significa que la usuaria quiso generar el sitio. find -L ./_sites -mindepth 2 -maxdepth 2 -name .generate \ | sed "s/\/\.generate$//" \ | while read _path ; do # Como seguimos todos los symlinks y los sitios pueden estar # vinculados entre sí, volvemos a chequear si existe el archivo para # no generarlo dos veces test -f "${_path}/.generate" || continue test -f "${_path}/.generating" && continue # Obtenemos las direcciones de correo de las responsables _mail=($(cat "${_path}/.usuarias")) _site="$(echo "${_path}" | xargs basename)" _deploy="${rails_root}/_deploy/${_site}" # Entrar al directorio del sitio pushd "${_path}" &>/dev/null # Reiniciar el log con la fecha date > build.log # Instalar las gemas si no están test -f .bundle/config \ || bundle install --path=/srv/http/gems.kefir.red \ >> build.log # Actualizar las gemas bundle >> build.log # Instalar los assets test -f yarn.lock \ && yarn >> build.log # Crear el sitio con lujo de detalles y guardar un log, pero a la vez # tenerlo en la salida estándar para poder enviar al MAILTO del # cronjob. # # Ya que estamos, eliminamos la ruta donde estamos paradas para no dar # información sobre la servidora. touch .generating # Correr en baja prioridad nice -n 19 \ bundle exec \ jekyll build --trace --destination "${_deploy}" 2>&1 \ | sed -re "s,${_path},,g" \ >> "build.log" # Acciones posteriores # TODO convertir en un plugin de cada sitio? if test $? -eq 0; then # Si funciona, enviar un mail # TODO enviar un mail más completo y no hardcodear direcciones echo "Everything was good! You can see your changes in https://${_site}" \ | mail -b "sysadmin@kefir.red" \ -s "${_site}: :)" \ ${_mail[@]} else echo "There was an error, please check build log at https://sutty.kefir.red/" \ | mail -b "sysadmin@kefir.red" \ -s "${_site}: :(" \ ${_mail[@]} date +%s >.failed fi # Eliminar el archivo para sacar el sitio de la cola de compilación rm -f .generate .generating # TODO descubrir el grupo según la distro? chgrp -R http "${_deploy}" find "${_deploy}" -type f -print0 | xargs -r -0 chmod 640 find "${_deploy}" -type d -print0 | xargs -r -0 chmod 2750 # Volver al principio para continuar con el siguiente sitio popd &>/dev/null done