216 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
	
	
	
| 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 <<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
 |