In our applications we have a version file that has three variables that are then joined to create a string that can be used for the semantic version.
The file looks like:
# frozen_string_literal: true
major = 0
minor = 1
patch = 0
PORTAL_VERSION = [major, minor, patch].join('.')
And then we update it using the following from our CI server:
@version = '0.1.1' # this is passed from somewhere
puts 'updating version'
version_file = File.open("version.rb").read
version = @version.split('.')
version_file = version_file.gsub(/(major = \w)/, "major = #{version[0]}")
version_file = version_file.gsub(/(minor = \w)/, "minor = #{version[1]}")
version_file = version_file.gsub(/(patch = \w)/, "patch = #{version[2]}")
File.open('version.rb', 'wb') { |file| file.write(version_file) }
puts "updated version to #{@version}"
Is there a better way to do the replacement using the regex? As by having to find each line and then replace it feels a little dirty, plus if there was or wasn't spaces between the variable name and value it wouldn't work. So it feels a little fragile.
version.rb
from scratch instead of trying to edit it? \$\endgroup\$