require 'yaml' module Sct class DevCommand @@file = "docker-compose.dev.yml" def error message UI.error message exit 1 end def dc command, env = {} system env, "docker-compose -f ~/development/spend-cloud/docker-compose.yml #{command}" end def dc_dev command, env = {} system env, "docker-compose -f #{@@file} #{command}" end def manifest if !File.exist? @@file error "Could not find file '#{@@file}'." end YAML.load File.read @@file end def execute args, options services = manifest["services"].to_a if services.length != 1 error "Currently sct only supports a single service declaration in '#{@@file}'. Contact the infra guild if you consider this a limitation." end service, service_spec = services.first container = service_spec["container_name"] command = service_spec["command"] || "" env = { "PUID" => `id -u`.chomp, "PGID" => `id -g`.chomp, "HOST_MACHINE_IP" => (options.wsl_debugger ? `hostname -I | awk '{print $1}'` : `powershell.exe -c '(Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString' | dos2unix`).chomp, "IDE_DEBUG_KEY" => "PHPSTORM", "IDE_DEBUG_SERVER" => "docker", } if options.pull return unless dc_dev "pull" end if options.build return unless dc_dev "build #{options.pull ? "--pull" : ""}", env end if options.pull or options.build system "docker image prune -f" end return unless dc "rm --stop --force #{service}" dc_dev "run --rm --service-ports --name #{container} #{service} #{command}", env dc "up --detach #{service}" end end end