Sha256: 240f7ad28a220873d802c8f59dc0cea78452060182e0ef881600fc0fc258e508

Contents?: true

Size: 1.44 KB

Versions: 3

Compression:

Stored size: 1.44 KB

Contents

require 'chef/knife'
require 'knife-spork/runner'

module KnifeSpork
  class SporkBump < Chef::Knife
    include KnifeSpork::Runner

    TYPE_INDEX = { :major => 0, :minor => 1, :patch => 2, :manual => 3 }.freeze

    banner 'knife spork bump COOKBOOK [major|minor|patch|manual]'

    def run
      self.config = Chef::Config.merge!(config)
      @cookbook = load_cookbook(name_args.first)

      run_plugins(:before_bump)
      bump
      run_plugins(:after_bump)
    end

    private
    def bump
      old_version = @cookbook.version

      if bump_type == 3
        # manual bump
        version_array = manual_bump_version.split('.')
      else
        # major, minor, or patch bump
        version_array = old_version.split('.').collect{ |i| i.to_i }
        version_array[bump_type] += 1
        ((bump_type+1)..2).each{ |i| version_array[i] = 0 } # reset all lower version numbers to 0
      end

      new_version = version_array.join('.')

      metadata_file = "#{@cookbook.root_dir}/metadata.rb"
      new_contents = File.read(metadata_file).gsub(/version\s+['"][0-9\.]+['"]/, "version \"#{new_version}\"")
      File.open(metadata_file, 'w'){ |f| f.write(new_contents) }

      ui.info "Successfully bumped #{@cookbook.name} to v#{new_version}!"
    end

    def bump_type
      TYPE_INDEX[(name_args[1] || 'patch').to_sym]
    end

    def manual_bump_version
      version = name_args.last
      validate_version!(version)
      version
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
knife-spork-1.0.2 lib/chef/knife/spork-bump.rb
knife-spork-1.0.1 lib/chef/knife/spork-bump.rb
knife-spork-1.0.0 lib/chef/knife/spork-bump.rb