#!/usr/bin/env ruby require 'fileutils' require 'open3' require 'pathname' def git(*args) system 'git', *args exit $?.exitstatus unless $?.success? end repo_dir = Pathname(ARGV[0]) repo = ARGV[1] puts 'Detecting changes…' [ '.editorconfig', '.gitattributes', '.github/*.md', '.github/*.yml', '.github/ISSUE_TEMPLATE/*.{md,yml}', '.github/workflows/{automerge,cache,ci,dispatch-command,rebase,rerun-workflow,triage}.yml', '.gitignore', ].each do |glob| src_paths = Pathname.glob(glob) dst_paths = Pathname.glob(repo_dir.join(glob)) dst_paths.each do |path| FileUtils.rm_f path end src_paths.each do |path| repo_dir.join(path.dirname).mkpath FileUtils.cp path, repo_dir.join(path) end end workflow = File.read(repo_dir.join('.github/PULL_REQUEST_TEMPLATE.md')) File.write repo_dir.join('.github/PULL_REQUEST_TEMPLATE.md'), workflow.gsub(/Homebrew\/homebrew-cask\/(pulls|issues|search)/, "#{repo}/\\1") out, err, status = Open3.capture3('git', '-C', repo_dir.to_s, 'status', '--porcelain', '--ignore-submodules=dirty') raise err unless status.success? repo_changed = !out.chomp.empty? unless repo_changed puts 'No changed detected.' exit end git '-C', repo_dir.to_s, 'add', '--all' out, err, status = Open3.capture3('git', '-C', repo_dir.to_s, 'diff', '--name-only', '--staged') raise err unless status.success? modified_paths = out.lines.map(&:chomp) modified_paths.each do |modified_path| puts "Detected changes to #{modified_path}." git '-C', repo_dir.to_s, 'commit', modified_path, '--message', "#{File.basename(modified_path)}: update to match main repo", '--quiet' end puts File.open(ENV.fetch('GITHUB_OUTPUT'), 'a') do |f| f.puts('pull_request=true') end