From 6d8930465121a9ee04bbeec97a7d70bf7b806298 Mon Sep 17 00:00:00 2001 From: Georg Gadinger Date: Sat, 23 Jul 2022 13:03:56 +0200 Subject: [PATCH] add rake task for easier version bumping Just use `rake version:update` for bumping and creating the commit + tag. --- lib/tasks/version.rake | 49 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 lib/tasks/version.rake diff --git a/lib/tasks/version.rake b/lib/tasks/version.rake new file mode 100644 index 00000000..d3e9009a --- /dev/null +++ b/lib/tasks/version.rake @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +namespace :version do + desc "Bump the version" + task bump: :environment do + puts "Current version: #{Retrospring::Version}" + current_ymd = %i[year month day].map { Retrospring::Version.public_send(_1) } + + now = Time.now.utc + today_ymd = %i[year month day].map { now.public_send(_1) } + + version_path = Rails.root.join("lib/version.rb") + version_contents = File.read(version_path) + + patch_contents = lambda do |key, val| + version_contents.sub!(/def #{key} = .+/) { "def #{key} = #{val}" } + end + + if current_ymd == today_ymd + # bump the patch version + patch_contents[:patch, Retrospring::Version.patch + 1] + else + # set year/month/day to today, and reset patch to 0 + %i[year month day].each { patch_contents[_1, now.public_send(_1)] } + patch_contents[:patch, 0] + end + + # write the file + File.write(version_path, version_contents) + + # reload the version file + load version_path + puts "New version: #{Retrospring::Version}" + end + + desc "Commit and tag a new release" + task commit: :environment do + version_path = Rails.root.join("lib/version.rb") + + puts "Committing version" + sh %(git commit -m 'Bump version to #{Retrospring::Version}' -- #{version_path.to_s.inspect}) + + puts "Tagging new release" + sh %(git tag -a -m 'Bump version to #{Retrospring::Version}' #{Retrospring::Version}) + end + + desc "Update the version (bump + commit)" + task update: %i[bump commit] +end