Class: Pipeline::Npm

Inherits:
BaseTask show all
Includes:
Util
Defined in:
lib/pipeline/tasks/npm.rb

Instance Attribute Summary

Attributes inherited from BaseTask

#appname, #description, #findings, #labels, #name, #stage, #trigger, #warnings

Instance Method Summary collapse

Methods included from Util

#fingerprint, #relative_path, #runsystem, #strip_archive_path

Methods inherited from BaseTask

#directories_with?, #report, #severity, #warn

Constructor Details

#initialize(trigger, tracker) ⇒ Npm

Returns a new instance of Npm.



11
12
13
14
15
16
17
18
# File 'lib/pipeline/tasks/npm.rb', line 11

def initialize(trigger, tracker)
  super(trigger, tracker)
  @name = "NPM"
  @description = "Node Package Manager"
  @stage = :file
  @labels << "file" << "javascript"
  @results = []
end

Instance Method Details

#analyzeObject



37
38
39
40
41
42
43
44
45
46
# File 'lib/pipeline/tasks/npm.rb', line 37

def analyze
  begin
    if @results.include? false
      Pipeline.warn 'Error installing javascript dependencies with #{@command}'
    end
  rescue Exception => e
    Pipeline.warn e.message
    Pipeline.warn e.backtrace
  end
end

#runObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/pipeline/tasks/npm.rb', line 20

def run
  exclude_dirs = ['node_modules','bower_components']
  exclude_dirs = exclude_dirs.concat(@tracker.options[:exclude_dirs]).uniq if @tracker.options[:exclude_dirs]
  directories_with?('package.json', exclude_dirs).each do |dir|
    Pipeline.notify "#{@name} scanning: #{dir}"
    Dir.chdir(dir) do
      if @tracker.options.has_key?(:npm_registry)
        registry = "--registry #{@tracker.options[:npm_registry]}"
      else
        registry = nil
      end
      @command = "npm install -q --ignore-scripts #{registry}"
      @results << runsystem(true, @command)
    end
  end
end

#supported?Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
54
55
56
# File 'lib/pipeline/tasks/npm.rb', line 48

def supported?
  supported = find_executable0('npm')
  unless supported
    Pipeline.notify "Install npm: https://nodejs.org/en/download/"
    return false
  else
    return true
  end
end