dotfiles/bin/git-release

56 lines
1.6 KiB
Ruby
Executable File

#!/usr/bin/env ruby
require 'date'
begin
require 'cocaine'
rescue LoadError
puts "Cocaine gem not found, install it: 'gem install cocaine'"
exit
end
module Release
class Git
REMOTE = 'origin'
RELEASE_BRANCH = 'master'
def self.create
develop_branch = current_branch
stash = Cocaine::CommandLine.new('git', 'stash create').run.chomp
Cocaine::CommandLine.new('git', 'reset --hard').run
Cocaine::CommandLine.new('git', 'checkout :branch').run(branch: RELEASE_BRANCH)
Cocaine::CommandLine.new('git', 'merge --ff-only :branch').run(branch: develop_branch)
Cocaine::CommandLine.new('git', 'tag -a -m :message :tag').run(
message: "Released by #{user}@#{hostname}", tag: "release-#{DateTime.now.strftime('%Y%m%dT%H%M%S')}")
Cocaine::CommandLine.new('git', 'push --tags :remote :branch').run(
remote: REMOTE, branch: "#{RELEASE_BRANCH}:#{RELEASE_BRANCH}")
ensure
Cocaine::CommandLine.new('git', 'checkout :branch').run(branch: develop_branch)
Cocaine::CommandLine.new('git', 'stash apply :stash').run(stash: stash) unless stash.to_s.empty?
end
def self.current_branch
branch = Cocaine::CommandLine.new('git', 'rev-parse --abbrev-ref HEAD').run.chomp
branch == 'HEAD' ? current_commit : branch
end
def self.current_commit
Cocaine::CommandLine.new('git', 'rev-parse HEAD').run.chomp
end
def self.user
Cocaine::CommandLine.new('id', '-un').run.chomp
end
def self.hostname
Cocaine::CommandLine.new('hostname').run.chomp
end
end
end
Release::Git.create