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

70 lines
1.8 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/actions/{automerge}/**/*',
'.github/ISSUE_TEMPLATE/*.md',
'.github/workflows/{automerge,cache,ci,dispatch-command,rebase,rerun-workflow,review,self-approve}.yml',
'.gitignore',
'.travis.yml',
'Casks/.rubocop.yml',
].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
FileUtils.rm repo_dir.join('.github/ISSUE_TEMPLATE/02_feature_request.md')
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
puts '::set-output name=pull_request::true'