Files
NaliiaERP/Rakefile
2026-06-18 17:43:49 -05:00

238 lines
6.4 KiB
Ruby

require 'yaml'
require 'digest'
DOCKER_COMPOSE_TEST='docker-compose.test.yml'
ENV_FILE_DEV='.env.development'
DOCKER_COMOPSE_LIVE='docker-compose.live.yml'
ENV_FILE_LIVE='.env.development'
DOCKER_COMPOSE_DEPLOY='docker-compose.prod.yml'
ENV_FILE_DEPLOY='.env.production'
desc 'iniciar entorno'
task :up do
compose('up', '--build', '-d')
end
desc 'poblar entorno'
task :init => [:up] do
compose('exec', 'test.dev', 'pip3 install psycopg2-binary flake8 --break-system-packages')
compose('exec', 'test.dev', "bash .dev/install_module.sh")
end
desc 'terminal'
task :sh do
compose('exec', 'test.dev', 'bash')
end
desc 'iterar'
task :tdd, [:name] do |_, args|
refresh_cache
test_dir = ''
if args.name
test_dir = "modules/#{args.name}"
compose('exec', 'test.dev', "bash -c 'cd #{test_dir} && flake8'")
compose('exec', 'test.dev', "bash -c 'cd #{test_dir}/tests && python3 -m unittest'")
else
compose('exec', 'test.dev', "bash -c 'cd modules && flake8 *'")
compose('exec', 'test.dev', "bash -c 'python -m unittest discover -s modules'")
end
end
desc 'detener entorno'
task :down do
compose('down', '-vv')
end
desc 'entorno vivo'
namespace :live do
desc 'iniciar entorno'
task :up do
compose('up', '--build', '-d', env_file: ENV_FILE_LIVE, compose: DOCKER_COMPOSE_LIVE)
end
desc 'monitorear salida'
task :tail do
compose('logs', '-f', 'live', '-n', '50', env_file: ENV_FILE_LIVE, compose: DOCKER_COMPOSE_LIVE)
end
desc 'detener entorno'
task :down do
compose('down', env_file: ENV_FILE_LIVE, compose: DOCKER_COMPOSE_LIVE)
end
desc 'eliminar entorno'
task :del do
compose('down', '-v', '--rmi', 'all', env_file: ENV_FILE_LIVE, compose: DOCKER_COMPOSE_LIVE)
end
desc 'detener entorno'
task :stop do
compose('stop', env_file: ENV_FILE_LIVE, compose: DOCKER_COMPOSE_LIVE)
end
desc 'reiniciar entorno'
task :restart do
compose('restart', env_file: ENV_FILE_LIVE, compose: DOCKER_COMPOSE_LIVE)
end
desc 'terminal'
task :sh do
compose('exec', 'live', 'bash')
end
desc 'monitorear salida'
task :tail_end do
compose('logs', '-f', '-n 50', 'live', env_file: ENV_FILE_LIVE, compose: DOCKER_COMPOSE_LIVE)
end
desc 'populate data'
task :populate, [:database] do |_, args|
if args.database
compose('stop', "live", env_file: ENV_FILE_DEV, compose: DOCKER_COMPOSE_LIVE)
compose('exec', '-it', '--user', 'postgres', 'db', "bash -c 'dropdb -U tryton #{args.database}'")
compose('exec', '-it', '--user', 'postgres', 'db', "bash -c 'createdb -U tryton #{args.database}'")
compose('restart', "live", env_file: ENV_FILE_DEV, compose: DOCKER_COMPOSE_LIVE)
sleep(40)
compose('exec', 'live', "bash -c 'python3 demo/populate_scripts/__main__.py -c .dev/trytond.cfg -d #{args.database}'")
compose('restart', 'live', env_file: ENV_FILE_DEV, compose: DOCKER_COMPOSE_LIVE)
else
puts "Falta el nombre de la base de datos"
end
end
end
desc 'produccion'
namespace :deploy do
desc 'iniciar entorno'
task :up do
compose('up', '--build', '-d', env_file: ENV_FILE_DEPLOY, compose: DOCKER_COMPOSE_DEPLOY)
end
desc 'monitorear salida'
task :tail do
compose('logs', env_file: ENV_FILE_DEPLOY, compose: DOCKER_COMPOSE_DEPLOY)
end
desc 'detener entorno'
task :down do
compose('down', env_file: ENV_FILE_DEPLOY, compose: DOCKER_COMPOSE_DEPLOY)
end
desc 'eliminar entorno'
task :del do
compose('down', '-v', '--rmi', 'all', env_file: ENV_FILE_DEPLOY ,compose: DOCKER_COMPOSE_DEPLOY)
end
desc 'reiniciar entorno'
task :restart do
compose('restart', env_file: ENV_FILE_DEPLOY, compose: DOCKER_COMPOSE_DEPLOY)
end
desc 'terminal-tryton'
task :sh_tryton do
compose('exec', '--user', 'root', 'tryton', '/entrypoint.sh', 'bash', compose: DOCKER_COMPOSE_DEPLOY)
end
desc 'terminal-worker'
task :sh_worker do
compose('exec', '--user', 'root', 'tryton_worker', '/entrypoint.sh', 'bash', compose: DOCKER_COMPOSE_DEPLOY)
end
desc 'terminal-cron'
task :sh_cron do
compose('exec', '--user', 'root', 'tryton_cron', '/entrypoint.sh', 'bash', compose: DOCKER_COMPOSE_DEPLOY)
end
desc 'terminal-db'
task :sh_db do
compose('exec', '--user', 'postgres', 'db', 'bash', compose: DOCKER_COMOPSE_DEPLOY)
end
desc 'terminal-nginx'
task :sh_nginx do
compose('exec', 'nginx', 'bash', compose: DOCKER_COMOPSE_DEPLOY)
end
desc 'top'
task :top do
compose('top', compose: DOCKER_COMOPSE_DEPLOY)
end
end
desc 'Git - Submodules'
namespace :git do
desc 'Iniciar y actualizar submodules'
task :submodules_init do
sh "git submodule init && git submodule update"
end
desc 'Actualizar submodules, últimos commits'
task :submodules_update do
sh "git submodule update --recursive --remote"
end
desc 'Purgar submodules'
task :submodules_purge do
sh "git submodule deinit -f --all"
end
desc 'Actualizar submodules a una rama específica'
task :submodules_update_branch, [:branch] do |t, args|
branch = args[:branch] || 'main' # Usar 'main' como rama predeterminada si no se especifica
sh "git submodule foreach 'git checkout #{branch} && git pull origin #{branch}'"
end
end
def compose(*arg, env_file: ENV_FILE_DEV, compose: DOCKER_COMPOSE_TEST)
sh "docker compose --env-file #{env_file} -f #{compose} #{arg.join(' ')}"
end
def refresh_cache
# cuando se realizan cambios sobre los modelos
# que afectan las tablas es necesario limpiar el cache
# de trytond
changes = []
has_git_dir = File.directory?(File.join(File.dirname(__FILE__), '.git'))
try_git = `which git`.then { $? }.success? && has_git_dir
try_fossil = system('fossil status', err: :close, out: :close)
if try_fossil
changes = %x{fossil diff}.split("\n").grep(/^[-+]/)
elsif try_git
changes = %x{git diff -- '*.xml' ':!*view*'}.split("\n").grep(/^[-+index]/)
else
warn <<WARN
no se detecta repositorio en control de versiones, debe manualmente
limpiar el cache si ahi cambios en el esquema de los modelos.
Eliminando en el contenedor los archivo /tmp/*.dump
WARN
end
refresh_trytond_cache(changes)
end
def refresh_trytond_cache(changes)
num = changes.grep(//).length
hash = Digest::MD5.hexdigest(changes.flatten.join(''))
# touch
File.open('.tdd_cache', 'a+').close
File.open('.tdd_cache', 'r+') do |cache|
tdd_cache = cache.read()
if num > 0 && (tdd_cache != hash)
compose('exec', 'app.dev', 'bash -c "rm -f /tmp/*.dump"')
cache.seek(0); cache.write(hash)
end
end
end