require 'rugged' require 'pty' task default: %w[build] task :build do repo = Rugged::Repository.new('.') commit = repo.head.target parent = commit.parents.first pkgs = commit.diff(parent).deltas.map { |d| d.new_file[:path] } # Split paths into arrays pkgs.map! { |p| Pathname.new(p).each_filename.to_a } # looking for [disabled-]packages/(package_name)/... pkgs.select! { |p| p.length > 2 and p[0] =~ /(?)packages/ } # Get package_name pkgs.map! { |p| p[1] } # Remove duplicate packages pkgs.uniq! pkgs.each do |pkg| puts "Building #{pkg}" begin # Start blocking build loop PTY.spawn("./scripts/run-docker.sh ./build-package.sh #{pkg}") do |stdout, stdin, pid| begin stdout.each { |line| print line } rescue Errno::EIO end end rescue PTY::ChildExited puts "Process exited" end # Exit if PTY return a non-zero code if $?.exitstatus != 0 STDERR.puts("Error building #{pkg}") exit($?.exitstatus) end end end