56 lines
1.6 KiB
Ruby
Executable File
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
|