homebrew-cask/.github/actions/sync/templates.rb

67 lines
1.7 KiB
Ruby
Executable File

#!/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