Skip to content

Commit

Permalink
Create Deploy Gem task to publish new releases at rubygems.org
Browse files Browse the repository at this point in the history
This commit also creates the Git & Content Ruby modules.
  • Loading branch information
cetinajero committed Dec 13, 2019
1 parent f96e9cf commit 2904a84
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 2904a84

Please sign in to comment.