lint_trap 0.0.11 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Dockerfile +1 -1
- data/Rakefile +32 -22
- data/circle.yml +0 -2
- data/config/checkstyle/checkstyle_logger-6.6-all.jar +0 -0
- data/config/checkstyle/sun_checks.xml +2 -1
- data/docker/checkstyle/Dockerfile +19 -0
- data/docker/coffeelint/Dockerfile +21 -0
- data/docker/cppcheck/Dockerfile +24 -0
- data/docker/csslint/Dockerfile +21 -0
- data/docker/golint/Dockerfile +19 -0
- data/docker/jshint/Dockerfile +21 -0
- data/docker/jsonlint/Dockerfile +21 -0
- data/docker/pylint/Dockerfile +24 -0
- data/docker/rubocop/Dockerfile +21 -0
- data/docker/scsslint/Dockerfile +21 -0
- data/lib/lint_trap/command.rb +2 -3
- data/lib/lint_trap/container/base.rb +10 -3
- data/lib/lint_trap/container/docker.rb +16 -3
- data/lib/lint_trap/container/fake.rb +3 -0
- data/lib/lint_trap/execution_error.rb +12 -0
- data/lib/lint_trap/linter/base.rb +29 -18
- data/lib/lint_trap/linter/checkstyle.rb +12 -5
- data/lib/lint_trap/linter/coffeelint.rb +6 -2
- data/lib/lint_trap/linter/cppcheck.rb +5 -1
- data/lib/lint_trap/linter/csslint.rb +6 -2
- data/lib/lint_trap/linter/golint.rb +6 -2
- data/lib/lint_trap/linter/jshint.rb +6 -2
- data/lib/lint_trap/linter/jsonlint.rb +6 -2
- data/lib/lint_trap/linter/pylint.rb +5 -1
- data/lib/lint_trap/linter/rubocop.rb +6 -2
- data/lib/lint_trap/linter/scsslint.rb +7 -3
- data/lib/lint_trap/linter/unknown.rb +4 -0
- data/lib/lint_trap/linter.rb +4 -0
- data/lib/lint_trap/parser/base.rb +1 -1
- data/lib/lint_trap/parser/line.rb +12 -6
- data/lib/lint_trap/version.rb +1 -1
- data/lint_trap.gemspec +15 -14
- data/spec/command_spec.rb +8 -5
- data/spec/container/base_spec.rb +31 -0
- data/spec/container/docker_spec.rb +27 -7
- data/spec/execution_error_spec.rb +11 -0
- data/spec/integration/base_spec.rb +33 -0
- data/spec/integration/checkstyle_spec.rb +1 -1
- data/spec/integration/coffeelint_spec.rb +16 -10
- data/spec/integration/cppcheck_spec.rb +9 -1
- data/spec/integration/csslint_spec.rb +16 -10
- data/spec/integration/golint_spec.rb +8 -10
- data/spec/integration/jshint_spec.rb +9 -1
- data/spec/integration/jsonlint_spec.rb +9 -1
- data/spec/integration/pylint_spec.rb +9 -1
- data/spec/integration/rubocop_spec.rb +9 -1
- data/spec/integration/scsslint_spec.rb +16 -10
- data/spec/language/coffeescript_spec.rb +1 -0
- data/spec/language/cpp_spec.rb +1 -0
- data/spec/language/css_spec.rb +1 -0
- data/spec/language/go_spec.rb +1 -0
- data/spec/language/java_spec.rb +1 -0
- data/spec/language/javascript_spec.rb +1 -0
- data/spec/language/json_spec.rb +1 -0
- data/spec/language/python_spec.rb +1 -0
- data/spec/language/ruby_spec.rb +1 -0
- data/spec/language/scss_spec.rb +1 -0
- data/spec/language/unknown_spec.rb +1 -0
- data/spec/linter/base_spec.rb +24 -0
- data/spec/linter/checkstyle_spec.rb +8 -4
- data/spec/linter/coffeelint_spec.rb +5 -2
- data/spec/linter/cppcheck_spec.rb +4 -1
- data/spec/linter/csslint_spec.rb +5 -2
- data/spec/linter/golint_spec.rb +4 -1
- data/spec/linter/jshint_spec.rb +5 -2
- data/spec/linter/jsonlint_spec.rb +4 -1
- data/spec/linter/pylint_spec.rb +5 -2
- data/spec/linter/rubocop_spec.rb +5 -2
- data/spec/linter/scsslint_spec.rb +5 -2
- data/spec/linter/unknown_spec.rb +3 -0
- data/spec/linter_spec.rb +20 -1
- data/spec/parser/base_spec.rb +13 -0
- data/spec/parser/csslint_spec.rb +3 -1
- data/spec/parser/line_spec.rb +13 -0
- data/spec/parser/standard_spec.rb +4 -2
- data/spec/parser/vim_quickfix_spec.rb +10 -10
- data/spec/spec_helper.rb +15 -0
- data/spec/support/dockerfile.rb +12 -0
- data/spec/support/examples/language.rb +1 -1
- metadata +43 -4
- data/config/checkstyle/checkstyle_logger-all.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd8b059140d1d4487ff867109b06886cee712990
|
4
|
+
data.tar.gz: 546a5bf4794e33d96cce6a0caf1eb06154f657e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5da1f4256d21805a0000e717de18bb7525544d1e9951ec6dff7c0532ba03815271fc0be2f85483fcc40d05545b26eb929cdaf143f0b1469394df5c050053e6a
|
7
|
+
data.tar.gz: 161a54aebfc888fa3cfe6524674be8f28dcddd23d9a35df5dcc0e66b903f92e57cbcc718aeb45a88393f6ed17f9c7beea57aca28cfe0a527c7456b7279d6aa98
|
data/Dockerfile
CHANGED
data/Rakefile
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'English'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
require_relative 'lib/lint_trap'
|
3
5
|
|
4
6
|
$stdout.sync = true
|
5
7
|
|
6
8
|
RSpec::Core::RakeTask.new(:spec)
|
7
9
|
|
8
|
-
task :
|
10
|
+
task default: :spec
|
9
11
|
|
10
12
|
task :credentials do
|
11
13
|
require 'fileutils'
|
@@ -19,13 +21,17 @@ task :credentials do
|
|
19
21
|
end
|
20
22
|
|
21
23
|
namespace :docker do
|
22
|
-
|
24
|
+
class Docker
|
23
25
|
DOCKER_CACHE_PATH = File.expand_path('~/.docker')
|
24
26
|
DOCKER_IMAGE_PATH = File.join(DOCKER_CACHE_PATH, 'image.tar')
|
25
|
-
IMAGE_NAME = 'lintci/spin_cycle'
|
26
27
|
|
27
28
|
BuildError = Class.new(StandardError)
|
28
29
|
|
30
|
+
attr_reader :linter
|
31
|
+
|
32
|
+
def initialize(linter)
|
33
|
+
@linter = linter
|
34
|
+
end
|
29
35
|
|
30
36
|
def tag
|
31
37
|
run("docker tag -f #{image_sha} #{image_latest}")
|
@@ -52,11 +58,11 @@ namespace :docker do
|
|
52
58
|
end
|
53
59
|
|
54
60
|
def build
|
55
|
-
run("docker build -t #{image_sha} .")
|
61
|
+
run("docker build -t #{image_sha} ./docker/#{linter.name.downcase}")
|
56
62
|
end
|
57
63
|
|
58
64
|
def push
|
59
|
-
run("docker login -e #{ENV['DOCKER_EMAIL']} -u #{ENV['DOCKER_USER']} -p #{ENV['DOCKER_PASSWORD']}")
|
65
|
+
run("docker login -e #{ENV['DOCKER_EMAIL']} -u #{ENV['DOCKER_USER']} -p #{ENV['DOCKER_PASSWORD']}", true)
|
60
66
|
run("docker push #{image_sha}")
|
61
67
|
run("docker push #{image_version}")
|
62
68
|
run("docker push #{image_latest}")
|
@@ -64,25 +70,24 @@ namespace :docker do
|
|
64
70
|
|
65
71
|
private
|
66
72
|
|
67
|
-
def run(command)
|
68
|
-
puts
|
73
|
+
def run(command, suppress = false)
|
74
|
+
puts
|
75
|
+
puts command unless suppress
|
69
76
|
system(command)
|
70
77
|
|
71
|
-
raise BuildError, 'There was a problem executing the command.' unless
|
78
|
+
raise BuildError, 'There was a problem executing the command.' unless $CHILD_STATUS == 0
|
72
79
|
end
|
73
80
|
|
74
81
|
def image_sha
|
75
|
-
"#{
|
82
|
+
"#{linter.image}:#{sha}"
|
76
83
|
end
|
77
84
|
|
78
85
|
def image_version
|
79
|
-
|
80
|
-
|
81
|
-
"#{IMAGE_NAME}:#{LintTrap::VERSION}"
|
86
|
+
linter.image_version
|
82
87
|
end
|
83
88
|
|
84
89
|
def image_latest
|
85
|
-
"#{
|
90
|
+
"#{linter.image}:latest"
|
86
91
|
end
|
87
92
|
|
88
93
|
def sha
|
@@ -90,12 +95,17 @@ namespace :docker do
|
|
90
95
|
end
|
91
96
|
end
|
92
97
|
|
93
|
-
|
98
|
+
def for_each_linter(method)
|
99
|
+
LintTrap::Linter.all.each do |linter|
|
100
|
+
puts '', '#' * 80, linter.name, '#' * 80
|
101
|
+
Docker.new(linter).send(method)
|
102
|
+
end
|
103
|
+
end
|
94
104
|
|
95
|
-
task(:tag){tag}
|
96
|
-
task(:pull){pull}
|
97
|
-
task(:load){load}
|
98
|
-
task(:dump){dump}
|
99
|
-
task(:build){build}
|
100
|
-
task(:push){push}
|
105
|
+
task(:tag){for_each_linter(:tag)}
|
106
|
+
task(:pull){for_each_linter(:pull)}
|
107
|
+
task(:load){for_each_linter(:load)}
|
108
|
+
task(:dump){for_each_linter(:dump)}
|
109
|
+
task(:build){for_each_linter(:build)}
|
110
|
+
task(:push){for_each_linter(:push)}
|
101
111
|
end
|
data/circle.yml
CHANGED
Binary file
|
@@ -39,6 +39,8 @@
|
|
39
39
|
<property name="basedir" value="${basedir}"/>
|
40
40
|
-->
|
41
41
|
|
42
|
+
<property name="fileExtensions" value="java, properties, xml"/>
|
43
|
+
|
42
44
|
<!-- Checks that a package-info.java file exists for each package. -->
|
43
45
|
<!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->
|
44
46
|
<!-- <module name="JavadocPackage"/> -->
|
@@ -152,7 +154,6 @@
|
|
152
154
|
<module name="InnerAssignment"/>
|
153
155
|
<module name="MagicNumber"/>
|
154
156
|
<module name="MissingSwitchDefault"/>
|
155
|
-
<module name="RedundantThrows"/>
|
156
157
|
<module name="SimplifyBooleanExpression"/>
|
157
158
|
<module name="SimplifyBooleanReturn"/>
|
158
159
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
FROM java:8u45-jre
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
# Bundled as config
|
16
|
+
|
17
|
+
### Defaults ###
|
18
|
+
USER $user
|
19
|
+
WORKDIR $homedir
|
@@ -0,0 +1,21 @@
|
|
1
|
+
FROM node:0.12.3-slim
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
ENV COFFEELINT_VERSION 1.9.7
|
16
|
+
|
17
|
+
RUN npm install -g coffeelint@$COFFEELINT_VERSION
|
18
|
+
|
19
|
+
### Defaults ###
|
20
|
+
USER $user
|
21
|
+
WORKDIR $homedir
|
@@ -0,0 +1,24 @@
|
|
1
|
+
FROM debian:jessie
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
ENV CPPCHECK_VERSION 1.67-1
|
16
|
+
|
17
|
+
RUN apt-get update \
|
18
|
+
&& apt-get install -y \
|
19
|
+
cppcheck=$CPPCHECK_VERSION \
|
20
|
+
&& rm -rf /var/lib/apt/lists/*
|
21
|
+
|
22
|
+
### Defaults ###
|
23
|
+
USER $user
|
24
|
+
WORKDIR $homedir
|
@@ -0,0 +1,21 @@
|
|
1
|
+
FROM node:0.12.3-slim
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
ENV CSSLINT_VERSION 0.10.0
|
16
|
+
|
17
|
+
RUN npm install -g csslint@$CSSLINT_VERSION
|
18
|
+
|
19
|
+
### Defaults ###
|
20
|
+
USER $user
|
21
|
+
WORKDIR $homedir
|
@@ -0,0 +1,19 @@
|
|
1
|
+
FROM golang:1.4.2
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
RUN go get github.com/golang/lint/golint
|
16
|
+
|
17
|
+
### Defaults ###
|
18
|
+
USER $user
|
19
|
+
WORKDIR $homedir
|
@@ -0,0 +1,21 @@
|
|
1
|
+
FROM node:0.12.3-slim
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
ENV JSHINT_VERSION 2.5.11
|
16
|
+
|
17
|
+
RUN npm install -g jshint@$JSHINT_VERSION
|
18
|
+
|
19
|
+
### Defaults ###
|
20
|
+
USER $user
|
21
|
+
WORKDIR $homedir
|
@@ -0,0 +1,21 @@
|
|
1
|
+
FROM node:0.12.3-slim
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
ENV JSONLINT_VERSION 0.0.4
|
16
|
+
|
17
|
+
RUN npm install -g durable-json-lint-cli@$JSONLINT_VERSION
|
18
|
+
|
19
|
+
### Defaults ###
|
20
|
+
USER $user
|
21
|
+
WORKDIR $homedir
|
@@ -0,0 +1,24 @@
|
|
1
|
+
FROM debian:jessie
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
ENV PYLINT_VERSION 1.3.1-3
|
16
|
+
|
17
|
+
RUN apt-get update \
|
18
|
+
&& apt-get install -y \
|
19
|
+
pylint=$PYLINT_VERSION \
|
20
|
+
&& rm -rf /var/lib/apt/lists/*
|
21
|
+
|
22
|
+
### Defaults ###
|
23
|
+
USER $user
|
24
|
+
WORKDIR $homedir
|
@@ -0,0 +1,21 @@
|
|
1
|
+
FROM ruby:2.2.2-slim
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
ENV RUBOCOP_VERSION 0.31.0
|
16
|
+
|
17
|
+
RUN gem install rubocop:$RUBOCOP_VERSION
|
18
|
+
|
19
|
+
### Defaults ###
|
20
|
+
USER $user
|
21
|
+
WORKDIR $homedir
|
@@ -0,0 +1,21 @@
|
|
1
|
+
FROM ruby:2.2.2-slim
|
2
|
+
MAINTAINER LintCI
|
3
|
+
|
4
|
+
### Setup User ###
|
5
|
+
ENV user lint_trap
|
6
|
+
ENV group linters
|
7
|
+
ENV homedir /src/
|
8
|
+
|
9
|
+
RUN mkdir -p $homedir \
|
10
|
+
&& groupadd -r $group -g 777 \
|
11
|
+
&& useradd -u 666 -r -g $group -d $homedir -s /sbin/nologin -c "Docker image user" $user \
|
12
|
+
&& chown -R $user:$group $homedir
|
13
|
+
|
14
|
+
### Setup Linter ###
|
15
|
+
ENV SCSSLINT_VERSION 0.38.0
|
16
|
+
|
17
|
+
RUN gem install scss-lint:$SCSSLINT_VERSION
|
18
|
+
|
19
|
+
### Defaults ###
|
20
|
+
USER $user
|
21
|
+
WORKDIR $homedir
|
data/lib/lint_trap/command.rb
CHANGED
@@ -14,11 +14,10 @@ module LintTrap
|
|
14
14
|
|
15
15
|
def run(container)
|
16
16
|
Bundler.with_clean_env do
|
17
|
-
puts command(container) if ENV['DEBUG_LINTING']
|
18
17
|
Open3.popen2e(command(container)) do |_, stdout, thread|
|
19
|
-
yield stdout
|
18
|
+
yield stdout if block_given?
|
20
19
|
|
21
|
-
thread.
|
20
|
+
thread.value.success?
|
22
21
|
end
|
23
22
|
end
|
24
23
|
end
|
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'pathname'
|
2
|
+
require_relative '../execution_error'
|
2
3
|
|
3
4
|
module LintTrap
|
4
5
|
module Container
|
5
6
|
class Base
|
7
|
+
ImagePullError = Class.new(ExecutionError)
|
8
|
+
|
6
9
|
LOCAL_CONFIG_PATH = Pathname.new(File.expand_path('../../../../config', __FILE__))
|
7
10
|
|
8
11
|
def initialize(image, repo_path)
|
@@ -10,16 +13,20 @@ module LintTrap
|
|
10
13
|
@repo_path = Pathname.new(repo_path)
|
11
14
|
end
|
12
15
|
|
16
|
+
def pull
|
17
|
+
raise NotImplementedError, 'Must implement pull.'
|
18
|
+
end
|
19
|
+
|
13
20
|
def wrap(_command)
|
14
|
-
raise NotImplementedError
|
21
|
+
raise NotImplementedError, 'Must implement wrap.'
|
15
22
|
end
|
16
23
|
|
17
24
|
def config_path(_path)
|
18
|
-
raise NotImplementedError
|
25
|
+
raise NotImplementedError, 'Must implement config_path.'
|
19
26
|
end
|
20
27
|
|
21
28
|
def file_path(_path)
|
22
|
-
raise NotImplementedError
|
29
|
+
raise NotImplementedError, 'Must implement file_path.'
|
23
30
|
end
|
24
31
|
|
25
32
|
protected
|
@@ -1,12 +1,24 @@
|
|
1
1
|
require_relative 'base'
|
2
2
|
require 'pathname'
|
3
|
+
require 'open3'
|
3
4
|
|
4
5
|
module LintTrap
|
5
6
|
module Container
|
6
7
|
# Acts like a container, without actually requiring a container.
|
7
8
|
class Docker < Base
|
8
|
-
CONFIG_PATH = Pathname.new('/
|
9
|
-
CODE_PATH = Pathname.new('/
|
9
|
+
CONFIG_PATH = Pathname.new('/config')
|
10
|
+
CODE_PATH = Pathname.new('/src')
|
11
|
+
|
12
|
+
def pull
|
13
|
+
command = "docker pull #{image}"
|
14
|
+
Open3.popen2e(command) do |_, stdout, thread|
|
15
|
+
if thread.value.success?
|
16
|
+
true
|
17
|
+
else
|
18
|
+
raise ImagePullError.new(command, stdout.read)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
10
22
|
|
11
23
|
def wrap(command)
|
12
24
|
"docker run #{flags} #{image} #{command}"
|
@@ -34,11 +46,12 @@ module LintTrap
|
|
34
46
|
[
|
35
47
|
# '-m', '50m', # memory
|
36
48
|
# '-c', '1', # number of cpus
|
49
|
+
'--net="none"',
|
37
50
|
'--privileged=false',
|
38
51
|
'-v', "#{LOCAL_CONFIG_PATH}:#{CONFIG_PATH}",
|
39
52
|
'-v', "#{repo_path}:#{CODE_PATH}",
|
40
53
|
"--workdir=#{CODE_PATH}",
|
41
|
-
'--user=
|
54
|
+
'--user=lint_trap'
|
42
55
|
].join(' ')
|
43
56
|
end
|
44
57
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module LintTrap
|
2
|
+
# Error thrown from code that executes an external command.
|
3
|
+
class ExecutionError < StandardError
|
4
|
+
attr_reader :command, :output
|
5
|
+
|
6
|
+
def initialize(command, output)
|
7
|
+
super("An error occurred while running `#{command}`. The output was:\n#{output}")
|
8
|
+
@command = command
|
9
|
+
@output = output
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -1,8 +1,11 @@
|
|
1
1
|
require_relative '../parser/standard'
|
2
2
|
require_relative '../command'
|
3
|
+
require_relative '../execution_error'
|
3
4
|
|
4
5
|
module LintTrap
|
5
6
|
module Linter
|
7
|
+
LintError = Class.new(ExecutionError)
|
8
|
+
|
6
9
|
# The base class for all linters. Provides a template for linter execution.
|
7
10
|
class Base
|
8
11
|
CONFIG_PATH = File.expand_path('../../../../config', __FILE__)
|
@@ -10,19 +13,35 @@ module LintTrap
|
|
10
13
|
def lint(files, container, options)
|
11
14
|
return unless known?
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
violations_found, remaining_output = false, ''
|
17
|
+
success = command(files, container, options).run(container) do |stdout|
|
18
|
+
remaining_output = parser(stdout, container).parse do |violation|
|
19
|
+
violations_found = true
|
17
20
|
yield violation
|
18
21
|
end
|
19
22
|
end
|
23
|
+
|
24
|
+
if !violations_found && !success
|
25
|
+
raise LintError.new(command(files, container, options).to_s(container), remaining_output)
|
26
|
+
end
|
20
27
|
end
|
21
28
|
|
22
29
|
def name
|
23
30
|
self.class.name.split('::').last
|
24
31
|
end
|
25
32
|
|
33
|
+
def version
|
34
|
+
raise NotImplementedError, 'Must implement version.'
|
35
|
+
end
|
36
|
+
|
37
|
+
def image
|
38
|
+
"lintci/#{name.downcase}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def image_version
|
42
|
+
"#{image}:#{version}"
|
43
|
+
end
|
44
|
+
|
26
45
|
def languages(*classes)
|
27
46
|
classes.map(&:new)
|
28
47
|
end
|
@@ -41,29 +60,21 @@ module LintTrap
|
|
41
60
|
"<#{name}>"
|
42
61
|
end
|
43
62
|
|
44
|
-
protected
|
45
|
-
|
46
|
-
attr_reader :container, :options
|
47
|
-
|
48
63
|
private
|
49
64
|
|
50
|
-
def command(files)
|
51
|
-
Command.new(command_name, flags, files)
|
65
|
+
def command(files, container, options)
|
66
|
+
Command.new(command_name(container), flags(container, options), files)
|
52
67
|
end
|
53
68
|
|
54
|
-
def parser(stdout)
|
69
|
+
def parser(stdout, container)
|
55
70
|
LintTrap::Parser::Standard.new(stdout, container)
|
56
71
|
end
|
57
72
|
|
58
|
-
def
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
def flags(options)
|
63
|
-
raise NotImplementedError, 'Method flags must be implemented.'
|
73
|
+
def flags(_container, _options)
|
74
|
+
raise NotImplementedError, 'Must implement flags.'
|
64
75
|
end
|
65
76
|
|
66
|
-
def command_name
|
77
|
+
def command_name(_container)
|
67
78
|
name.downcase
|
68
79
|
end
|
69
80
|
end
|
@@ -4,23 +4,30 @@ module LintTrap
|
|
4
4
|
module Linter
|
5
5
|
# Encapsulates logic specific to checkstyle command line tool.
|
6
6
|
class CheckStyle < Base
|
7
|
-
JAR = 'checkstyle/checkstyle_logger-all.jar'
|
8
7
|
CHECKS_XML = 'checkstyle/sun_checks.xml'
|
9
8
|
|
10
9
|
def languages
|
11
10
|
super(Language::Java)
|
12
11
|
end
|
13
12
|
|
13
|
+
def version
|
14
|
+
'6.6'
|
15
|
+
end
|
16
|
+
|
17
|
+
def jar
|
18
|
+
"checkstyle/checkstyle_logger-#{version}-all.jar"
|
19
|
+
end
|
20
|
+
|
14
21
|
private
|
15
22
|
|
16
|
-
def command_name
|
23
|
+
def command_name(_container)
|
17
24
|
'java'
|
18
25
|
end
|
19
26
|
|
20
|
-
def flags
|
27
|
+
def flags(container, options)
|
21
28
|
[
|
22
|
-
'-jar', config_path(
|
23
|
-
'-c', options[:config] || config_path(CHECKS_XML)
|
29
|
+
'-jar', container.config_path(jar),
|
30
|
+
'-c', options[:config] || container.config_path(CHECKS_XML)
|
24
31
|
]
|
25
32
|
end
|
26
33
|
end
|
@@ -10,11 +10,15 @@ module LintTrap
|
|
10
10
|
super(Language::CoffeeScript)
|
11
11
|
end
|
12
12
|
|
13
|
+
def version
|
14
|
+
'1.9.7'
|
15
|
+
end
|
16
|
+
|
13
17
|
private
|
14
18
|
|
15
|
-
def flags
|
19
|
+
def flags(container, options)
|
16
20
|
[
|
17
|
-
"--reporter=#{config_path(REPORTER)}",
|
21
|
+
"--reporter=#{container.config_path(REPORTER)}",
|
18
22
|
'--nocolor'
|
19
23
|
].tap do |flags|
|
20
24
|
flags.concat(["--file=#{options[:config]}"]) if options[:config]
|