travis-lint 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/travis/lint/linter.rb +51 -8
- data/lib/travis/lint/runner.rb +2 -1
- data/lib/travis/lint/version.rb +1 -1
- data/spec/files/uses_unsupported_perl.yml +7 -0
- data/spec/files/uses_unsupported_python.yml +7 -0
- data/spec/travis_lint_runner_spec.rb +27 -0
- data/spec/travis_lint_spec.rb +54 -5
- metadata +21 -6
data/lib/travis/lint/linter.rb
CHANGED
@@ -20,7 +20,7 @@ module Travis
|
|
20
20
|
def self.validate(hsh)
|
21
21
|
hsh = Hashr.new hsh
|
22
22
|
|
23
|
-
|
23
|
+
find_validators_for(hsh[:language]).inject([]) do |acc, val|
|
24
24
|
acc << val.call(hsh)
|
25
25
|
acc
|
26
26
|
end.reject(&:first).map { |pair| pair[1] }
|
@@ -87,24 +87,53 @@ module Travis
|
|
87
87
|
("ruby" == hsh[:language].to_s.downcase) && hsh[:rvm].is_a?(Array) && !known_ruby_versions?(hsh[:rvm])
|
88
88
|
end
|
89
89
|
|
90
|
-
validator_for :
|
91
|
-
|
90
|
+
validator_for :ruby, :language, "Language is set to Ruby but node_js key is present. Ruby builder will ignore node_js key." do |hsh|
|
91
|
+
hsh[:language].to_s.downcase == "ruby" && ! blank?(hsh[:node_js])
|
92
92
|
end
|
93
93
|
|
94
|
+
|
95
|
+
KNOWN_RUBY_VERSIONS = %w(1.8.7 ruby-1.8.7 1.9.2 ruby-1.9.2 1.9.3 ruby-1.9.3 ruby-head jruby jruby-18mode jruby-19mode rbx rbx-18mode rbx-19mode jruby-head ree ree-1.8.7)
|
96
|
+
KNOWN_NODE_VERSIONS = %w(0.4 0.6 0.7)
|
97
|
+
KNOWN_PHP_VERSIONS = %w(5.2 5.3 5.3.2 5.3.8 5.4)
|
98
|
+
|
99
|
+
KNOWN_PYTHON_VERSIONS = %w(2.5 2.6 2.7 3.1 3.2)
|
100
|
+
KNOWN_PERL_VERSIONS = %w(5.10 5.12 5.14)
|
101
|
+
|
102
|
+
|
103
|
+
#
|
104
|
+
# PHP
|
105
|
+
#
|
106
|
+
|
94
107
|
validator_for :php, :php, "Detected unsupported PHP versions. For an up-to-date list of supported PHP versions, see #{DOCS_URL}" do |hsh|
|
95
108
|
("php" == hsh[:language].to_s.downcase) && hsh[:php].is_a?(Array) && !known_php_versions?(hsh[:php])
|
96
109
|
end
|
97
110
|
|
111
|
+
#
|
112
|
+
# Python
|
113
|
+
#
|
98
114
|
|
115
|
+
validator_for :python, :python, "Detected unsupported Python versions. For an up-to-date list of supported Python versions, see #{DOCS_URL}" do |hsh|
|
116
|
+
("python" == hsh[:language].to_s.downcase) && hsh[:python].is_a?(Array) && !known_python_versions?(hsh[:python])
|
117
|
+
end
|
99
118
|
|
100
|
-
|
101
|
-
|
119
|
+
#
|
120
|
+
# Perl
|
121
|
+
#
|
122
|
+
|
123
|
+
validator_for :perl, :perl, "Detected unsupported Perl versions. For an up-to-date list of supported Perl versions, see #{DOCS_URL}" do |hsh|
|
124
|
+
("perl" == hsh[:language].to_s.downcase) && hsh[:perl].is_a?(Array) && !known_perl_versions?(hsh[:perl])
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
#
|
129
|
+
# Node.js
|
130
|
+
#
|
131
|
+
|
132
|
+
validator_for :node_js, :node_js, "Detected unsupported Node.js versions. For an up-to-date list of supported Node.js versions, see #{DOCS_URL}" do |hsh|
|
133
|
+
("node_js" == hsh[:language].to_s.downcase) && hsh[:node_js].is_a?(Array) && !known_node_js_versions?(hsh[:node_js])
|
102
134
|
end
|
103
135
|
|
104
136
|
|
105
|
-
KNOWN_RUBY_VERSIONS = %w(1.8.7 ruby-1.8.7 1.9.2 ruby-1.9.2 1.9.3 ruby-1.9.3 ruby-head jruby jruby-18mode jruby-19mode rbx rbx-18mode rbx-19mode jruby-head ree ree-1.8.7)
|
106
|
-
KNOWN_NODE_VERSIONS = %w(0.4 0.6 0.7)
|
107
|
-
KNOWN_PHP_VERSIONS = %w(5.2 5.3 5.3.2 5.3.8 5.4)
|
108
137
|
|
109
138
|
protected
|
110
139
|
|
@@ -129,6 +158,20 @@ module Travis
|
|
129
158
|
unknown.empty?
|
130
159
|
end
|
131
160
|
|
161
|
+
def self.known_python_versions?(ary)
|
162
|
+
ary = ary.map(&:to_s)
|
163
|
+
|
164
|
+
unknown = ary - KNOWN_PYTHON_VERSIONS
|
165
|
+
unknown.empty?
|
166
|
+
end
|
167
|
+
|
168
|
+
def self.known_perl_versions?(ary)
|
169
|
+
ary = ary.map(&:to_s)
|
170
|
+
|
171
|
+
unknown = ary - KNOWN_PERL_VERSIONS
|
172
|
+
unknown.empty?
|
173
|
+
end
|
174
|
+
|
132
175
|
end
|
133
176
|
end
|
134
177
|
end
|
data/lib/travis/lint/runner.rb
CHANGED
@@ -32,6 +32,7 @@ module Travis
|
|
32
32
|
puts
|
33
33
|
puts
|
34
34
|
end
|
35
|
+
quit ".travis.yml at #{@travis_file_path} has issues and thus will be ignored by Travis CI."
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
@@ -47,7 +48,7 @@ module Travis
|
|
47
48
|
def check_that_travis_yml_file_is_valid_yaml!
|
48
49
|
begin
|
49
50
|
YAML.load_file(@travis_file_path)
|
50
|
-
rescue ArgumentError, Psych::SyntaxError
|
51
|
+
rescue ArgumentError, Psych::SyntaxError
|
51
52
|
quit ".travis.yml at #{@travis_file_path} is not a valid YAML file and thus will be ignored by Travis CI."
|
52
53
|
end
|
53
54
|
end
|
data/lib/travis/lint/version.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "stringio"
|
3
|
+
|
4
|
+
def capture_stdout
|
5
|
+
$stdout = StringIO.new
|
6
|
+
yield
|
7
|
+
ensure
|
8
|
+
$stdout = STDOUT
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "A .travis.yml" do
|
12
|
+
context "with issues" do
|
13
|
+
it "run should exit with non-zero exit status" do
|
14
|
+
status = 0
|
15
|
+
|
16
|
+
begin
|
17
|
+
capture_stdout do
|
18
|
+
Travis::Lint::Runner.new(["spec/files/no_language_key.yml"]).run()
|
19
|
+
end
|
20
|
+
rescue SystemExit => e
|
21
|
+
status = e.status
|
22
|
+
end
|
23
|
+
|
24
|
+
status.should_not == 0
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/spec/travis_lint_spec.rb
CHANGED
@@ -29,6 +29,9 @@ describe "A .travis.yml" do
|
|
29
29
|
{ :key => :otp_release, :issue => "Specify OTP releases you want to test against using the \"otp_release\" key" }
|
30
30
|
end
|
31
31
|
|
32
|
+
let(:docs) { "Travis CI documentation at http://bit.ly/travis-ci-environment" }
|
33
|
+
|
34
|
+
|
32
35
|
|
33
36
|
def content_of_sample_file(name)
|
34
37
|
path = Pathname.new(File.join("spec", "files", name)).expand_path
|
@@ -105,8 +108,6 @@ describe "A .travis.yml" do
|
|
105
108
|
end
|
106
109
|
|
107
110
|
|
108
|
-
let(:docs) { "Travis CI documentation at http://bit.ly/travis-ci-environment" }
|
109
|
-
|
110
111
|
|
111
112
|
context "and uses an unsupported Ruby version" do
|
112
113
|
let(:unsupported_rubies) do
|
@@ -124,6 +125,20 @@ describe "A .travis.yml" do
|
|
124
125
|
end
|
125
126
|
|
126
127
|
|
128
|
+
context "that specifies Ruby as the language but tries to set node_js version" do
|
129
|
+
let(:travis_yml) do
|
130
|
+
{ :language => "ruby", :rvm => ["1.9.3"], :node_js => ["0.6"] }
|
131
|
+
end
|
132
|
+
|
133
|
+
it "is invalid" do
|
134
|
+
Travis::Lint::Linter.validate(travis_yml).should include({ :key => :language, :issue => "Language is set to Ruby but node_js key is present. Ruby builder will ignore node_js key." })
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
context "that has language set to node_js" do
|
127
142
|
context "and uses an unsupported Node.js version" do
|
128
143
|
let(:unsupported_nodejs) do
|
129
144
|
{ :key => :node_js, :issue => "Detected unsupported Node.js versions. For an up-to-date list of supported Node.js versions, see #{docs}" }
|
@@ -138,7 +153,10 @@ describe "A .travis.yml" do
|
|
138
153
|
Travis::Lint::Linter.valid?(content_of_sample_file("uses_unsupported_nodejs.yml")).should be_false
|
139
154
|
end
|
140
155
|
end
|
156
|
+
end
|
157
|
+
|
141
158
|
|
159
|
+
context "that has language set to PHP" do
|
142
160
|
context "and uses an unsupported PHP version" do
|
143
161
|
let(:unsupported_php) do
|
144
162
|
{ :key => :php, :issue => "Detected unsupported PHP versions. For an up-to-date list of supported PHP versions, see #{docs}" }
|
@@ -153,19 +171,50 @@ describe "A .travis.yml" do
|
|
153
171
|
Travis::Lint::Linter.valid?(content_of_sample_file("uses_unsupported_php.yml")).should be_false
|
154
172
|
end
|
155
173
|
end
|
174
|
+
end
|
156
175
|
|
157
176
|
|
158
|
-
|
177
|
+
|
178
|
+
context "that has language set to Python" do
|
179
|
+
context "and uses an unsupported Python version" do
|
180
|
+
let(:unsupported_python) do
|
181
|
+
{ :key => :python, :issue => "Detected unsupported Python versions. For an up-to-date list of supported Python versions, see #{docs}" }
|
182
|
+
end
|
183
|
+
|
159
184
|
let(:travis_yml) do
|
160
|
-
{ :language => "
|
185
|
+
{ :language => "python", :python => ["stackless-py", "2.4", "2.3"] }
|
161
186
|
end
|
162
187
|
|
163
188
|
it "is invalid" do
|
164
|
-
Travis::Lint::Linter.validate(travis_yml).should include(
|
189
|
+
Travis::Lint::Linter.validate(travis_yml).should include(unsupported_python)
|
190
|
+
Travis::Lint::Linter.valid?(content_of_sample_file("uses_unsupported_python.yml")).should be_false
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
context "that has language set to Perl" do
|
198
|
+
context "and uses an unsupported Perl version" do
|
199
|
+
let(:unsupported_perl) do
|
200
|
+
{ :key => :perl, :issue => "Detected unsupported Perl versions. For an up-to-date list of supported Perl versions, see #{docs}" }
|
201
|
+
end
|
202
|
+
|
203
|
+
let(:travis_yml) do
|
204
|
+
{ :language => "perl", :perl => ["5.6", "5.8"] }
|
205
|
+
end
|
206
|
+
|
207
|
+
it "is invalid" do
|
208
|
+
Travis::Lint::Linter.validate(travis_yml).should include(unsupported_perl)
|
209
|
+
Travis::Lint::Linter.valid?(content_of_sample_file("uses_unsupported_perl.yml")).should be_false
|
165
210
|
end
|
166
211
|
end
|
167
212
|
end
|
168
213
|
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
|
169
218
|
context "that has language set to erlang" do
|
170
219
|
context "but has no \"otp_release\" key" do
|
171
220
|
it "is invalid" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: travis-lint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael S. Klishin
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-
|
19
|
+
date: 2012-03-06 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: hashr
|
@@ -80,9 +80,12 @@ files:
|
|
80
80
|
- spec/files/uses_old_rbx_aliases.yml
|
81
81
|
- spec/files/uses_ruby_as_language_but_tries_to_switch_nodejs.yml
|
82
82
|
- spec/files/uses_unsupported_nodejs.yml
|
83
|
+
- spec/files/uses_unsupported_perl.yml
|
83
84
|
- spec/files/uses_unsupported_php.yml
|
85
|
+
- spec/files/uses_unsupported_python.yml
|
84
86
|
- spec/files/uses_unsupported_rubies.yml
|
85
87
|
- spec/spec_helper.rb
|
88
|
+
- spec/travis_lint_runner_spec.rb
|
86
89
|
- spec/travis_lint_spec.rb
|
87
90
|
- travis-lint.gemspec
|
88
91
|
homepage: http://github.com/travis-ci
|
@@ -118,5 +121,17 @@ rubygems_version: 1.8.15
|
|
118
121
|
signing_key:
|
119
122
|
specification_version: 3
|
120
123
|
summary: Checks your .travis.yml for possible issues, deprecations and so on
|
121
|
-
test_files:
|
122
|
-
|
124
|
+
test_files:
|
125
|
+
- spec/files/no_language_key.yml
|
126
|
+
- spec/files/no_rvm_key.yml
|
127
|
+
- spec/files/uses_jruby_instead_of_jruby_in_specific_mode.yml
|
128
|
+
- spec/files/uses_old_rbx_aliases.yml
|
129
|
+
- spec/files/uses_ruby_as_language_but_tries_to_switch_nodejs.yml
|
130
|
+
- spec/files/uses_unsupported_nodejs.yml
|
131
|
+
- spec/files/uses_unsupported_perl.yml
|
132
|
+
- spec/files/uses_unsupported_php.yml
|
133
|
+
- spec/files/uses_unsupported_python.yml
|
134
|
+
- spec/files/uses_unsupported_rubies.yml
|
135
|
+
- spec/spec_helper.rb
|
136
|
+
- spec/travis_lint_runner_spec.rb
|
137
|
+
- spec/travis_lint_spec.rb
|