Skip to content

Commit 2f004bc

Browse files
committed
bears/yaml: Add TravisLintBear
Closes #294
1 parent 62daca6 commit 2f004bc

File tree

6 files changed

+160
-0
lines changed

6 files changed

+160
-0
lines changed

Diff for: Gemfile

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ gem "reek"
77
gem "rubocop", "0.47.1"
88
gem "scss_lint", require: false
99
gem "sqlint"
10+
gem "travis", "1.8.8"

Diff for: bears/yaml/TravisLintBear.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from coalib.bearlib.abstractions.Linter import linter
2+
3+
from dependency_management.requirements.GemRequirement import GemRequirement
4+
5+
6+
@linter(executable='travis',
7+
output_format='regex',
8+
output_regex=r'\[x\]\s+(?P<message>.+)')
9+
class TravisLintBear:
10+
"""
11+
A validator for your ``.travis.yml`` that attempts to reduce common build
12+
errors such as:
13+
14+
- invalid YAML
15+
- missing language key
16+
- unsupported runtime versions of Ruby, PHP, OTP, etc.
17+
- deprecated features or runtime aliases
18+
"""
19+
20+
LANGUAGES = {'YAML'}
21+
REQUIREMENTS = {GemRequirement('travis', '1.8.8')}
22+
AUTHORS = {'The coala developers'}
23+
AUTHORS_EMAILS = {'coala-devel@googlegroups.com'}
24+
LICENSE = 'AGPL-3.0'
25+
CAN_DETECT = {'Formatting', 'Syntax'}
26+
SEE_MORE = 'https://docs.travis-ci.com/user/travis-lint'
27+
28+
@staticmethod
29+
def create_arguments(filename, file, config_file):
30+
return 'lint', filename

Diff for: tests/yaml/TravisLintBearTest.py

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import os
2+
from queue import Queue
3+
4+
from coalib.results.Result import Result
5+
from coalib.results.RESULT_SEVERITY import RESULT_SEVERITY
6+
from coalib.settings.Section import Section
7+
from coalib.testing.LocalBearTestHelper import LocalBearTestHelper
8+
from coalib.testing.BearTestHelper import generate_skip_decorator
9+
10+
from bears.yaml.TravisLintBear import TravisLintBear
11+
12+
13+
def get_testfile_path(name):
14+
return os.path.join(os.path.dirname(__file__),
15+
'travislint_test_files',
16+
name)
17+
18+
19+
def load_testfile(name):
20+
return open(get_testfile_path(name)).readlines()
21+
22+
23+
@generate_skip_decorator(TravisLintBear)
24+
class TravisLintBearTest(LocalBearTestHelper):
25+
26+
def setUp(self):
27+
self.uut = TravisLintBear(Section('name'), Queue())
28+
29+
def test_good_file(self):
30+
file_name = '.good_travis.yml'
31+
file_contents = load_testfile(file_name)
32+
self.check_results(
33+
self.uut,
34+
file_contents,
35+
[],
36+
filename=get_testfile_path(file_name))
37+
38+
def test_bad_file(self):
39+
file_name = '.bad_travis.yml'
40+
file_contents = load_testfile(file_name)
41+
self.check_results(
42+
self.uut,
43+
file_contents,
44+
[Result.from_values('TravisLintBear',
45+
message='in matrix.exclude section: '
46+
'specified ruby, but setting is '
47+
'not relevant for python',
48+
file=get_testfile_path(file_name),
49+
severity=RESULT_SEVERITY.NORMAL),
50+
Result.from_values('TravisLintBear',
51+
message='in os section: dropping osx, does'
52+
' not support python',
53+
file=get_testfile_path(file_name),
54+
severity=RESULT_SEVERITY.NORMAL),
55+
Result.from_values('TravisLintBear',
56+
message='specified ruby, but setting is '
57+
'not relevant for python',
58+
file=get_testfile_path(file_name),
59+
severity=RESULT_SEVERITY.NORMAL)],
60+
filename=get_testfile_path(file_name))
61+
62+
def test_empty_file(self):
63+
file_name = '.empty_travis.yml'
64+
file_contents = load_testfile(file_name)
65+
self.check_results(
66+
self.uut,
67+
file_contents,
68+
[Result.from_values('TravisLintBear',
69+
message='missing key language, defaulting '
70+
'to ruby',
71+
file=get_testfile_path(file_name),
72+
severity=RESULT_SEVERITY.NORMAL)],
73+
filename=get_testfile_path(file_name))

Diff for: tests/yaml/travislint_test_files/.bad_travis.yml

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
language: python
2+
sudo: false
3+
cache: bundler
4+
rvm:
5+
- 1.9.2
6+
- 1.9.3
7+
- 2.0.0
8+
- 2.1.0
9+
- 2.1.3
10+
- jruby
11+
os:
12+
- linux
13+
- osx
14+
matrix:
15+
exclude:
16+
- rvm: 1.8.7
17+
os: osx
18+
- rvm: 1.9.2
19+
os: osx
20+
- rvm: 2.1.0
21+
os: osx
22+
- rvm: jruby
23+
os: osx
24+
deploy:
25+
provider: rubygems
26+
api_key:
27+
secure: abcdef
28+
gem: travis

Diff for: tests/yaml/travislint_test_files/.empty_travis.yml

Whitespace-only changes.

Diff for: tests/yaml/travislint_test_files/.good_travis.yml

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
language: ruby
2+
sudo: false
3+
cache: bundler
4+
rvm:
5+
- 1.9.2
6+
- 1.9.3
7+
- 2.0.0
8+
- 2.1.0
9+
- 2.1.3
10+
- jruby
11+
os:
12+
- linux
13+
- osx
14+
matrix:
15+
exclude:
16+
- rvm: 1.8.7
17+
os: osx
18+
- rvm: 1.9.2
19+
os: osx
20+
- rvm: 2.1.0
21+
os: osx
22+
- rvm: jruby
23+
os: osx
24+
deploy:
25+
provider: rubygems
26+
api_key:
27+
secure: abcdef
28+
gem: travis

0 commit comments

Comments
 (0)