require 'yaml' module Sct class ShellCommand def error message UI.error message exit 1 end def execute args, options command = args.empty? ? "sh" : args.join(" ") file = "docker-compose.dev.yml" if !File.exist? file error "Could not find file '#{file}'." end manifest = YAML.load File.read file 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"] project = `docker container inspect --format '{{index .Config.Labels "com.docker.compose.project"}}' #{container}`.chomp if project == "spend-cloud" print "This container was not started with 'sct dev'. Are you sure you want to continue? [y/N] ".red answer = $stdin.readline.chomp.downcase if answer != "y" exit end end user = options.root ? "root:root" : "$(id -u):$(id -g)" system "docker exec -it --user #{user} #{container} #{command}" end end end