Sha256: 57ef19ced46e035012d93ed0665c62f3132070b88f016fceb92a5b9d68e55aa8

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

module Rake::Funnel::Integration::TeamCity
  class NUnitPlugin
    include Rake::Funnel::Support

    ENV_VAR = 'teamcity.dotnet.nunitaddin'

    class << self
      def setup(nunit_executable)
        addins = get_addin_dir(ENV[ENV_VAR]) || return
        nunit, version = read_version(nunit_executable) || return

        addin_files = find_teamcity_addins(addins, version) || return

        copy_addin_files(nunit, addin_files, version)
      end

      private
      def get_addin_dir(source)
        return nil unless source

        File.expand_path(source)
      end

      def read_version(executable)
        nunit = Which.which(executable) || return
        version = BinaryVersionReader.read_from(nunit)

        unless version.file_version
          Rake.rake_output_message("Could read version from NUnit executable in #{nunit}")
          return
        end

        [nunit, version.file_version.split('.').take(3).join('.')]
      end

      def find_teamcity_addins(addins, version)
        addin_files = Dir.glob("#{addins}-#{version}.*")

        if addin_files.none?
          Rake.rake_output_message("Could not find TeamCity NUnit addin for version #{version} in #{addins}")
          return
        end

        addin_files
      end

      def copy_addin_files(nunit, addin_files, version)
        Rake.rake_output_message("Installing TeamCity NUnit addin for version #{version} in #{nunit}")

        destination = File.join(File.dirname(nunit), 'addins')

        RakeFileUtils.mkdir_p(destination)
        RakeFileUtils.cp(addin_files, destination, { preserve: true })
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rake-funnel-0.3.1.pre lib/rake/funnel/integration/teamcity/nunit_plugin.rb