Skip to content

Commit

Permalink
Merge pull request #231 from cetinajero/feature/gem-deploy-task
Browse files Browse the repository at this point in the history
Create Deploy Gem task to publish new releases at rubygems.org
  • Loading branch information
njimenez-grupopv committed Dec 13, 2019
2 parents f96e9cf + 2904a84 commit 67612a7
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 22 deletions.
2 changes: 0 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
## Unreleased

## [0.5.0](https://github.com/cetinajero/jekyll-theme-marketing/releases/tag/v0.5.0)

### Enhancements
Expand Down
24 changes: 4 additions & 20 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -72,24 +72,8 @@ namespace :deploy do
end

desc 'Deploy a new gem version to Rubygems'
task :"new-version" do
ARGV.each { |a| task(a.to_sym) {} }

puts "## Running: bump #{ARGV[1]} --tag"
system "bump #{ARGV[1]} --tag"
new_version = `bump current | sed -e 's/^.*:.//g' | tr -d '\n'`

puts '## Running: git push origin master'
system 'git push origin master'

puts "## Running: git push origin v#{new_version}" # Push tagged version
system "git push origin v#{new_version}"

puts "## Running: gem build #{File.basename(Dir.pwd)}.gemspec"
system "gem build #{File.basename(Dir.pwd)}.gemspec"

puts "## Running: gem push #{File.basename(Dir.pwd)}-#{new_version}.gem"
system "gem push #{File.basename(Dir.pwd)}-#{new_version}.gem"
task :gem do
Deploy.gem
end
end

Expand Down Expand Up @@ -154,12 +138,12 @@ alias_task [
[:swr, 'serve:without:radios'],
[:swc, 'serve:without:cctv'],
[:dw, 'deploy:website'],
[:dnv, 'deploy:new-version'],
[:dg, 'deploy:gem'],
[:rs, 'reset:soft'],
[:th, 'test:html'],
[:td, 'test:deploy'],

[:deploy, 'deploy:new-version'],
[:deploy, 'deploy:gem'],
[:full, 'serve:prod'],
[:test, 'test:html']
]
Expand Down
2 changes: 2 additions & 0 deletions lib/jekyll_theme_marketing.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# frozen_string_literal: true

require_relative 'jekyll_theme_marketing/content'
require_relative 'jekyll_theme_marketing/customers'
require_relative 'jekyll_theme_marketing/dates'
require_relative 'jekyll_theme_marketing/deploy'
require_relative 'jekyll_theme_marketing/git'
require_relative 'jekyll_theme_marketing/serve'
require_relative 'jekyll_theme_marketing/test'
30 changes: 30 additions & 0 deletions lib/jekyll_theme_marketing/content.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# frozen_string_literal: true

# Customers module to configure jekyll's bundle per website
module Content
module_function

def append(file, data)
File.open(file, 'a') do |f|
f.write data
end
end

def prepend(file, data)
new_content = ''

File.open(file, 'r') do |f|
old_content = f.read
new_content = +data << old_content
end

File.open(file, 'w') { |f| f.write new_content }
end

def replace(file, old, new)
content = File.read(file)
new_content = content.gsub(old, new)

File.open(file, 'w') { |f| f.puts new_content }
end
end
54 changes: 54 additions & 0 deletions lib/jekyll_theme_marketing/deploy.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# frozen_string_literal: true

require 'English'

# Deploy jekyll module
module Deploy
extend self
Expand All @@ -13,13 +15,65 @@ def website
end
end

def gem
if %w[major minor patch].include? ARGV[1]
old_version = `bump current | sed -e 's/^.*:.//g' | tr -d '\n'`
new_version = `bump show-next #{ARGV[1]} | tr -d '\n'`

Git.checkout_new_branch "release/v#{new_version}"
create_release_commit old_version, new_version, ARGV[1]
Git.push 'origin', "release/v#{new_version}", '--set-upstream'
Git.push 'origin', "v#{new_version}" # Push tagged version

publish_to_rubygems new_version
else puts 'Usage: rake deploy:gem [ major | minor | patch ]'
end
end

private

def create_release_commit(old, new, type)
update_changelog old, new
update_npm old, new
system "bump #{type} --tag"
end

def publish_to_rubygems(new_version)
system "gem build #{File.basename(Dir.pwd)}.gemspec"
system "gem push #{File.basename(Dir.pwd)}-#{new_version}.gem"
end

def push_changes
message = "Site updated at #{Time.now.utc}"

system 'git add -A'
system "git commit -m \"#{message}\""
system 'git push'
end

def update_changelog(old, new)
domain = 'www.github.com'
path = "cetinajero/jekyll-theme-marketing/releases/tag/v#{new}"
heading = "## [#{new}](https://#{domain}/#{path})"

pull_requests = get_pull_requests_info old, 'HEAD'

data = "#{heading}\n\n#{pull_requests}\n"
Content.prepend 'CHANGELOG.md', data
end

def get_pull_requests_info(old, new)
git_log_options = '--oneline --simplify-by-decoration'
git_log = Git.list_commits "v#{old}", new, git_log_options

git_log.gsub(/(?<uid>(^[0-9a-f]+))/) do
commit = $LAST_MATCH_INFO[:uid]
path = "cetinajero/jekyll-theme-marketing/commit/#{commit}"
"- [#{commit}](https://www.github.com/#{path})"
end
end

def update_npm(old, new)
Content.replace 'package.json', old, new
end
end
21 changes: 21 additions & 0 deletions lib/jekyll_theme_marketing/git.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true

# Git module to performe git operations
module Git
module_function

def checkout_new_branch(name)
system 'git checkout master'
system 'git pull origin master'
system "git checkout #{name}" # if the branch doesn't exist, create it
system "git checkout -b #{name}" # if the branch does exist, switch to it
end

def push(remote = '', branch = '', options = '')
system "git push #{options} #{remote} #{branch}"
end

def list_commits(old, new, options = '')
`git log #{options} #{old}..#{new}`
end
end

0 comments on commit 67612a7

Please sign in to comment.