#!/usr/bin/env ruby

require_relative 'run.rb'

def main(tag)
  version = tag.sub(/^v/, '')

  unless version.match?(/\d+\.\d+\.\d+(-rc\d+)?/)
    abort "Version string #{version.inspect} does not look like a Gitaly Release tag (e.g. \"v1.0.2\"). Aborting."
  end

  ref = capture!(%w[git describe --tag]).chomp
  if ref != "v#{version}"
    abort "Checkout tag v#{version} to publish.\n\t git checkout v#{version}"
  end

  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])

  gem = "gitaly-#{version}.gem"
  run!(['gem', 'build', 'gitaly.gemspec', '--output', gem])
  abort "gem not found: #{gem}" unless File.exist?(gem)

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

  run!(%W[gem push #{gem}])
end

unless ARGV.count == 1
  warn "Usage: #{$0} TAG"
  abort
end

main(ARGV[0])
