#!/usr/bin/env ruby
require 'erb'

require_relative 'run.rb'

def main(version)
  run!(%w[make notice-up-to-date])
  run!(%w[make test])

  puts 'Testing for changed files'
  run!(%w[git diff --quiet --exit-code])

  puts 'Testing for staged changes'
  run!(%w[git diff --quiet --cached --exit-code])

  write_version_file(version)
  version_msg = "Version #{version}"
  run!(%W[git commit -m #{version_msg}])

  tag_name = "v#{version}"
  run!(%W[git tag -a -m #{version_msg} #{tag_name}])

  show_output = capture!(%W[git show --pretty #{tag_name}])
  puts show_output

  puts "Proceed to publish version #{version}? Enter 'Yes' to continue; Ctrl-C to abort"
  $stdout.flush
  abort unless $stdin.gets.chomp == 'Yes'

  %w[
    https://gitlab.com/gitlab-org/gitaly.git
    https://dev.gitlab.org/gitlab/gitaly.git
  ].each do |remote|
    run!(%W[git push #{remote} HEAD #{tag_name}])
  end
end

def write_version_file(version)
  version_file = 'VERSION'
  open(version_file, 'w') { |f| f.puts version }
  run!(%W[git add #{version_file}])
end

def error(msg)
  warn "#{$0}: #{msg}"
end

unless ARGV.count == 1
  warn "Usage: #{$0} VERSION"
  warn "Specify version as x.y.z"
  abort
end

directory_current_file = File.expand_path('..', __FILE__)
git_root_current_file = capture!(%w[git rev-parse --show-toplevel], directory_current_file).chomp
unless git_root_current_file == Dir.pwd
  error "#{$0}: this script must be run from the root of the Gitaly repository"
  abort
end

main(ARGV.first)
