class Verto::TagCommand

Public Instance Methods

up() click to toggle source
# File lib/verto/commands/tag_command.rb, line 15
def up
  load_config_hooks!

  call_hooks(%i[before before_tag_up], with_attributes: { command_options: options })

  validate_version_option_presence!

  latest_tag = tag_repository.latest(filter: load_filter)

  validate_latest_tag!(latest_tag)

  latest_version = SemanticVersion.new(latest_tag)

  new_version = up_version(latest_version, options)

  validate_new_version!(new_version, latest_version)

  call_hooks(:before_tag_creation, with_attributes: { new_version: new_version })

  stderr.puts "Creating Tag #{version_prefix}#{new_version}..."
  tag_repository.create!("#{version_prefix}#{new_version}")
  stderr.puts "Tag #{version_prefix}#{new_version} Created!"

  call_hooks(:after_tag_up, with_attributes: { new_version: new_version })
  call_hooks(:after)
end

Private Instance Methods

default_identifier() click to toggle source
# File lib/verto/commands/tag_command.rb, line 125
def default_identifier
  Verto.config.pre_release.default_identifier
end
load_config_hooks!() click to toggle source
# File lib/verto/commands/tag_command.rb, line 118
def load_config_hooks!
  if Verto.config.git.pull_before_tag_creation
    Verto.config.hooks.prepend Verto::DSL::BuiltInHooks::GitPullCurrentBranch
  end
  Verto.config.hooks << Verto::DSL::BuiltInHooks::GitPushCurrentBranch if Verto.config.git.push_after_tag_creation
end
load_filter() click to toggle source
# File lib/verto/commands/tag_command.rb, line 110
def load_filter
  TagFilter.for(options[:filter]) || Regexp.new(options[:filter].to_s)
end
pre_release_configured?() click to toggle source
# File lib/verto/commands/tag_command.rb, line 65
def pre_release_configured?
  options[:pre_release] != 'pre_release'
end
up_version(version, options) click to toggle source
# File lib/verto/commands/tag_command.rb, line 46
def up_version(version, options)
  up_options = options.select { |_, value| value == true }.keys.map(&:to_sym) & %i[major minor patch]
  up_option = up_options.min

  new_version = version.up(up_option)

  if options[:pre_release]
    identifier = pre_release_configured? ? options[:pre_release] : version.pre_release.name || default_identifier
    new_version = new_version.with_pre_release(identifier)
    if new_version.pre_release.name == version.pre_release.name && new_version == version
      new_version = new_version.up(:pre_release)
    end
  end

  new_version = new_version.release_version if options[:release]

  new_version
end
validate_latest_tag!(latest_tag) click to toggle source
# File lib/verto/commands/tag_command.rb, line 69
    def validate_latest_tag!(latest_tag)
      return if latest_tag

      command_error!(
        <<~TEXT
          Project doesn't have a previous tag version, create a new tag with git.
          eg: `git tag #{version_prefix}0.1.0`
        TEXT
      )
    end
validate_new_version!(new_version, latest_version) click to toggle source
# File lib/verto/commands/tag_command.rb, line 80
    def validate_new_version!(new_version, latest_version)
      return unless new_version < latest_version && Verto.config.version.validations.new_version_must_be_bigger

      command_error!(
        <<~TEXT
          New version(#{new_version}) can't be equal or lower than latest version(#{latest_version})
          run up --pre-release with --patch, --minor or --major (eg: verto tag up --patch --pre-release=rc),
          add filters (eg: verto tag up --pre-release --filter=pre_release_only)
          or disable tag validation in Vertofile with config.version.validations.new_version_must_be_bigger = false
        TEXT
      )
    end
validate_version_option_presence!() click to toggle source
# File lib/verto/commands/tag_command.rb, line 93
    def validate_version_option_presence!
      return if options[:major] || options[:minor] || options[:patch] || options[:pre_release] || options[:release]

      command_error!(
        <<~TEXT
          You must specify the version number to be increased, use the some of the options(eg: --major, --minor, --patch, --pre_release=rc)
          or configure a Vertofile to specify a default option for current context, eg:

          context('qa') {
            before_command('tag_up') {
              command_options.add(pre_release: 'rc')
            }
          }
        TEXT
      )
    end
version_prefix() click to toggle source
# File lib/verto/commands/tag_command.rb, line 114
def version_prefix
  options[:version_prefix] || Verto.config.version.prefix
end