require 'yaml' require 'digest' WOODPECKER_YML='.woodpecker.yml' DOCKER_COMPOSE='compose.test.yml' 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 desc 'iniciar entorno' task :up do compose('up', '--build', '-d') end desc 'poblar entorno' task :init => [:up] do compose('exec', 'app.dev', "bash .dev/install_module.sh") end desc 'terminal' task :sh do compose('exec', 'app.dev', 'bash') end desc 'iterar' task :tdd, [:name] do |_, args| refresh_cache test_dir = '' if args.name test_dir = "modules/#{args.name}" compose('exec', 'app.dev', "bash -c 'cd #{test_dir} && flake8'") compose('exec', 'app.dev', "bash -c 'cd #{test_dir}/tests && python3 -m unittest'") else compose('exec', 'app.dev', "bash -c 'cd modules && flake8 *'") compose('exec', 'app.dev', "bash -c 'python -m unittest discover -s modules'") end end desc 'detener entorno' task :down do compose('down') end desc 'entorno vivo' namespace :live do desc 'iniciar entorno' task :up do compose('up', '--build', '-d', compose: 'compose.yml') end desc 'monitorear salida' task :tail do compose('logs', '-f', 'live.dev', compose: 'compose.yml') end desc 'monitorear salida ultimas 50 lineas' task :tail_end do compose('logs', '-f', '-n 50', 'live.dev', compose: 'compose.yml') end desc 'detener entorno' task :down do compose('down', compose: 'compose.yml') end desc 'reiniciar entorno' task :restart do compose('restart', compose: 'compose.yml') end desc 'terminal' task :sh_agents do compose('exec', 'agents.dev', 'bash') end desc 'Correr chat de Streamlit' task :streamlit do compose('exec', 'agents.dev', "streamlit run app/chat_dc.py") end end desc 'produccion' namespace :deploy do desc 'iniciar entorno' task :up do compose('up', '--build', '-d', compose: 'docker-compose.yml') end desc 'monitorear salida' task :tail do compose('logs', compose: 'docker-compose.yml') end desc 'detener entorno' task :down do compose('down', compose: 'docker-compose.yml') end desc 'eliminar entorno' task :del do compose('down', '-v', '--rmi', 'all', compose: 'docker-compose.yml') end desc 'reiniciar entorno' task :restart do compose('restart', compose: 'docker-compose.yml') end desc 'terminal-tryton' task :sh_tryton do compose('exec', '--user', 'root', 'tryton', '/entrypoint.sh', 'bash', compose: 'docker-compose.yml') end desc 'terminal-worker' task :sh_worker do compose('exec', '--user', 'root', 'tryton_worker', '/entrypoint.sh', 'bash', compose: 'docker-compose.yml') end desc 'terminal-cron' task :sh_cron do compose('exec', '--user', 'root', 'tryton_cron', '/entrypoint.sh', 'bash', compose: 'docker-compose.yml') end desc 'terminal-db' task :sh_db do compose('exec', '--user', 'postgres', 'db', 'bash', compose: 'docker-compose.yml') end desc 'terminal-nginx' task :sh_nginx do compose('exec', 'nginx', 'bash', compose: 'docker-compose.yml') end desc 'top' task :top do compose('top', compose: 'docker-compose.yml') end end def compose(*arg, compose: DOCKER_COMPOSE) sh "docker-compose -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 < 0 && (tdd_cache != hash) compose('exec', 'app.dev', 'bash -c "rm -f /tmp/*.dump"') cache.seek(0); cache.write(hash) end end end