summaryrefslogtreecommitdiff
path: root/bin/secpick
blob: 76ae231e9137b22694baa55ea2dc7aa532023f72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env ruby
require 'optparse'
require 'open3'
require 'rainbow/refinement'
using Rainbow

BRANCH_PREFIX = 'security'.freeze
STABLE_BRANCH_SUFFIX = 'stable'.freeze
REMOTE = 'dev'.freeze

options = { version: nil, branch: nil, sha: nil }

parser = OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} [options]"
  opts.on('-v', '--version 10.0', 'Version') do |version|
    options[:version] = version&.tr('.', '-')
  end

  opts.on('-b', '--branch security-fix-branch', 'Original branch name') do |branch|
    options[:branch] = branch
  end

  opts.on('-s', '--sha abcd', 'SHA to cherry pick') do |sha|
    options[:sha] = sha
  end

  opts.on('-h', '--help', 'Displays Help') do
    puts opts

    exit
  end
end

parser.parse!

abort("Missing options. Use #{$0} --help to see the list of options available".red) if options.values.include?(nil)
abort("Wrong version format #{options[:version].bold}".red) unless options[:version] =~ /\A\d*\-\d*\Z/

branch = [BRANCH_PREFIX, options[:branch], options[:version]].join('-').freeze
stable_branch = "#{options[:version]}-#{STABLE_BRANCH_SUFFIX}".freeze

command = "git checkout #{stable_branch} && git pull #{REMOTE} #{stable_branch} && git checkout -B #{branch} && git cherry-pick #{options[:sha]} && git push #{REMOTE} #{branch}"

_stdin, stdout, stderr = Open3.popen3(command)

puts stdout.read&.green
puts stderr.read&.red