fuci-travis 0.0.1 → 0.1.0
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/README.md +106 -3
- data/Rakefile +9 -0
- data/bin/fuci +13 -0
- data/fuci-travis.gemspec +7 -3
- data/lib/fuci/travis/build/master.rb +17 -0
- data/lib/fuci/travis/build.rb +75 -0
- data/lib/fuci/travis/server.rb +23 -0
- data/lib/fuci/travis/version.rb +1 -1
- data/lib/fuci/travis.rb +61 -2
- data/spec/lib/fuci/travis/build/master_spec.rb +27 -0
- data/spec/lib/fuci/travis/build_spec.rb +175 -0
- data/spec/lib/fuci/travis/server_spec.rb +43 -0
- data/spec/lib/fuci/travis_spec.rb +152 -0
- data/spec/spec_helper.rb +30 -0
- metadata +79 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f184101ecff65d9fe78fca05b796fff01d3e0d6e
|
4
|
+
data.tar.gz: 09b89a16374fb6f340f5979e62c2874ba2f84219
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36492be64d384e5edee1ca0a1f0277a270646da4fea6fed1ffafa8f5e846a65360ed15d0b2fd0f3c1d795656af37670a0c13a0dcb4019cffd78544f13f444e0d
|
7
|
+
data.tar.gz: 6aead93c5384ea50a562b516166a0e4d22c126db0c4711958c389ca7bc1fea2c0b416254c0f5162537d8206168833b0c6dce2f63c699408e174f1eb2644d9bc5
|
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# Fuci::Travis
|
2
2
|
|
3
|
-
|
3
|
+
Run Travis failures locally.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
-
gem 'fuci-travis'
|
9
|
+
gem 'fuci-travis', '~> 0.1'
|
10
10
|
|
11
11
|
And then execute:
|
12
12
|
|
@@ -16,9 +16,112 @@ Or install it yourself as:
|
|
16
16
|
|
17
17
|
$ gem install fuci-travis
|
18
18
|
|
19
|
+
## Configuration
|
20
|
+
### Configuration file
|
21
|
+
|
22
|
+
To configure itself, fuci-travis looks for a file called
|
23
|
+
".fuci-travis.rb" in your project's root directory. You should create
|
24
|
+
that file and configure fuci-travis there. The configuration must
|
25
|
+
include your Travis access token. **Therefore, you should include
|
26
|
+
./.fuci-travis.rb in .gitignore.**
|
27
|
+
|
28
|
+
That configuration file should include a call to
|
29
|
+
`Fuci::Travis.configure` with a block that sets your access token and
|
30
|
+
other configurations.
|
31
|
+
|
32
|
+
### Access tokens
|
33
|
+
|
34
|
+
fuci-travis ships with the
|
35
|
+
[Travis CI Client](https://github.com/travis-ci/travis) which includes
|
36
|
+
the Travis CLI. You'll use the Travis CLI to get your access token.
|
37
|
+
|
38
|
+
#### Travis for public repositories
|
39
|
+
|
40
|
+
On the command line, log into Travis via Github OAuth:
|
41
|
+
```sh
|
42
|
+
$ travis login
|
43
|
+
```
|
44
|
+
|
45
|
+
Then get your token:
|
46
|
+
```sh
|
47
|
+
$ travis token
|
48
|
+
# Your access token is <access token>
|
49
|
+
```
|
50
|
+
|
51
|
+
Configure fuci-travis with your access token as a string in
|
52
|
+
.fuci-travis.rb:
|
53
|
+
```ruby
|
54
|
+
Fuci::Travis.configure do |fu|
|
55
|
+
fu.access_token = '<access token>'
|
56
|
+
end
|
57
|
+
```
|
58
|
+
|
59
|
+
#### Travis for private repositories
|
60
|
+
|
61
|
+
This is the same as above, but uses the Travis CLI `--pro` flag.
|
62
|
+
|
63
|
+
On the command line, log into Travis via Github OAuth:
|
64
|
+
```sh
|
65
|
+
$ travis login --pro
|
66
|
+
```
|
67
|
+
|
68
|
+
Then get your token:
|
69
|
+
```sh
|
70
|
+
$ travis token --pro
|
71
|
+
# Your access token is <access token>
|
72
|
+
```
|
73
|
+
|
74
|
+
Then, in .fuci-travis.rb, configure fuci-travis with your access token
|
75
|
+
as a string and **set `pro` to true**:
|
76
|
+
```ruby
|
77
|
+
Fuci::Travis.configure do |fu|
|
78
|
+
fu.pro = true
|
79
|
+
fu.access_token = '<access token>'
|
80
|
+
end
|
81
|
+
```
|
82
|
+
|
83
|
+
### Default branch
|
84
|
+
|
85
|
+
If you push to a dedicated ci branch to check your changes before
|
86
|
+
merging them into master, set that branch as the default in the
|
87
|
+
configuration:
|
88
|
+
```ruby
|
89
|
+
Fuci::Travis.configure do |fu|
|
90
|
+
fu.default_branch = 'my-ci'
|
91
|
+
fu.access_token = '<access token>'
|
92
|
+
end
|
93
|
+
```
|
94
|
+
|
95
|
+
### Adding custom tester plugins
|
96
|
+
|
97
|
+
Fuci ships with some tester plugins. If you want to add custom testers,
|
98
|
+
add them in the configuration:
|
99
|
+
```ruby
|
100
|
+
Fuci::Travis.configure do |fu|
|
101
|
+
fu.add_testers Fuci::Spec, Fuci::Jasmine
|
102
|
+
fu.access_token = '<access token>'
|
103
|
+
end
|
104
|
+
```
|
105
|
+
|
106
|
+
See the base Fuci repo for more information on custom testers.
|
107
|
+
|
19
108
|
## Usage
|
20
109
|
|
21
|
-
|
110
|
+
Run your latest ci failures locally:
|
111
|
+
```sh
|
112
|
+
$ fuci
|
113
|
+
```
|
114
|
+
`fuci` will fetch the CI failures from the default branch declared in
|
115
|
+
your configuration. If no default branch is declared in the
|
116
|
+
configuration, `fuci` will fetch the CI failures from the branch of the
|
117
|
+
same name as your current local branch.
|
118
|
+
|
119
|
+
To run a specific branch's failures branch, call `fuci` with the branch.
|
120
|
+
For example, this will run the failures from the latest master build
|
121
|
+
on your local code:
|
122
|
+
```sh
|
123
|
+
$ fuci master
|
124
|
+
```
|
22
125
|
|
23
126
|
## Contributing
|
24
127
|
|
data/Rakefile
CHANGED
data/bin/fuci
ADDED
data/fuci-travis.gemspec
CHANGED
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Fuci::Travis::VERSION
|
9
9
|
spec.authors = ["Dave Jachimiak"]
|
10
10
|
spec.email = ["dave.jachimiak@gmail.com"]
|
11
|
-
spec.description = %q{
|
12
|
-
spec.summary = %q{Run failures from your
|
13
|
-
spec.homepage = ""
|
11
|
+
spec.description = %q{FUCK YOU CI: For Travis! :).}
|
12
|
+
spec.summary = %q{Run failures from your recent Travis builds locally.}
|
13
|
+
spec.homepage = "https://github.com/davejachimiak/fuci-travis"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -18,6 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_dependency 'fuci', '~> 0.1'
|
22
|
+
spec.add_dependency 'travis', '~> 1.4'
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
+
spec.add_development_dependency "minitest-spec-expect", "~> 0.1"
|
25
|
+
spec.add_development_dependency "mocha", "~> 0.14"
|
22
26
|
spec.add_development_dependency "rake"
|
23
27
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative '../build'
|
2
|
+
|
3
|
+
module Fuci
|
4
|
+
module Travis
|
5
|
+
class Build
|
6
|
+
class Master < Fuci::Travis::Build
|
7
|
+
def initialize; end;
|
8
|
+
|
9
|
+
def build_branch
|
10
|
+
repo.builds.detect do |build|
|
11
|
+
build.commit.sha == remote_master_sha
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
require 'fuci/git'
|
3
|
+
require 'fuci/travis/build/master'
|
4
|
+
|
5
|
+
module Fuci
|
6
|
+
module Travis
|
7
|
+
class Build
|
8
|
+
extend Forwardable, Fuci::Git
|
9
|
+
include Fuci::Git
|
10
|
+
|
11
|
+
FAILED = 'failed'
|
12
|
+
PASSED = 'passed'
|
13
|
+
|
14
|
+
attr_reader :branch_name
|
15
|
+
def_delegators :branch, :state, :jobs
|
16
|
+
|
17
|
+
def initialize branch_name
|
18
|
+
@branch_name = branch_name
|
19
|
+
end
|
20
|
+
|
21
|
+
def branch
|
22
|
+
@branch ||= build_branch
|
23
|
+
end
|
24
|
+
|
25
|
+
def status
|
26
|
+
case state
|
27
|
+
when FAILED
|
28
|
+
:red
|
29
|
+
when PASSED
|
30
|
+
:green
|
31
|
+
else
|
32
|
+
:yellow
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def log
|
37
|
+
jobs.first.log.body
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.create
|
41
|
+
branch_name =
|
42
|
+
Fuci.options[:branch] ||
|
43
|
+
Fuci::Travis.default_branch ||
|
44
|
+
current_branch_name
|
45
|
+
|
46
|
+
from_branch_name branch_name
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.from_branch_name branch_name
|
50
|
+
if branch_name == 'master'
|
51
|
+
Fuci::Travis::Build::Master.new
|
52
|
+
else
|
53
|
+
new branch_name
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def build_branch
|
60
|
+
puts "Fetching #{branch_name} branch..."
|
61
|
+
if branch = repo.branches[branch_name]
|
62
|
+
puts "Using #{branch_name} branch."
|
63
|
+
branch
|
64
|
+
else
|
65
|
+
puts "#{branch_name} branch not found on Travis."
|
66
|
+
exit
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def repo
|
71
|
+
Fuci::Travis.repo
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'fuci/server'
|
2
|
+
require 'fuci/travis/build'
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
module Fuci
|
6
|
+
module Travis
|
7
|
+
class Server < Fuci::Server
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
attr_reader :build
|
11
|
+
def_delegator :build, :status, :build_status
|
12
|
+
def_delegator :build, :log
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@build = Fuci::Travis::Build.create
|
16
|
+
end
|
17
|
+
|
18
|
+
def fetch_log
|
19
|
+
remove_ascii_color_chars log
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/fuci/travis/version.rb
CHANGED
data/lib/fuci/travis.rb
CHANGED
@@ -1,7 +1,66 @@
|
|
1
|
-
require
|
1
|
+
require 'fuci'
|
2
|
+
require 'fuci/git'
|
3
|
+
require 'fuci/configurable'
|
4
|
+
require 'fuci/travis/server'
|
5
|
+
require 'fuci/travis/version'
|
6
|
+
|
7
|
+
require 'travis'
|
8
|
+
require 'travis/pro'
|
9
|
+
|
10
|
+
require 'forwardable'
|
2
11
|
|
3
12
|
module Fuci
|
13
|
+
configure do |fu|
|
14
|
+
fu.server = Fuci::Travis::Server
|
15
|
+
end
|
16
|
+
|
4
17
|
module Travis
|
5
|
-
|
18
|
+
include Fuci::Configurable
|
19
|
+
extend Fuci::Git
|
20
|
+
|
21
|
+
DEFAULT_CLIENT = ::Travis
|
22
|
+
PRO_CLIENT = ::Travis::Pro
|
23
|
+
|
24
|
+
class << self
|
25
|
+
extend Forwardable
|
26
|
+
|
27
|
+
attr_accessor :default_branch, :access_token
|
28
|
+
attr_writer :pro
|
29
|
+
def_delegator :Fuci, :add_testers
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.repo
|
33
|
+
return @repo if @repo
|
34
|
+
puts 'Finding repo...'
|
35
|
+
@repo = client::Repository.find remote_repo_name
|
36
|
+
puts "Using repo: #{remote_repo_name}"
|
37
|
+
@repo
|
38
|
+
rescue
|
39
|
+
puts "#{remote_repo_name} repo could not be found on Travis."
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.pro
|
43
|
+
@pro ||= false
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.configure
|
47
|
+
super
|
48
|
+
set_client
|
49
|
+
set_access_token
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def self.set_client
|
55
|
+
@client = PRO_CLIENT if pro
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.client
|
59
|
+
@client ||= DEFAULT_CLIENT
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.set_access_token
|
63
|
+
client.access_token = access_token
|
64
|
+
end
|
6
65
|
end
|
7
66
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
require_relative '../../../../../lib/fuci/travis/build/master'
|
3
|
+
|
4
|
+
describe Fuci::Travis::Build::Master do
|
5
|
+
before do
|
6
|
+
@master = Fuci::Travis::Build::Master.new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'composition' do
|
10
|
+
it 'inherits from ::Travis::Build' do
|
11
|
+
expect(@master).to_be_kind_of Fuci::Travis::Build
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#build_branch' do
|
16
|
+
it 'detects the build branch' do
|
17
|
+
Fuci::Travis.stubs(:repo).returns repo = mock
|
18
|
+
|
19
|
+
@master.stubs(:remote_master_sha).returns master_sha = '123abc'
|
20
|
+
commit = OpenStruct.new(sha: master_sha)
|
21
|
+
build = OpenStruct.new(commit: commit)
|
22
|
+
repo.stubs(:builds).returns [build]
|
23
|
+
|
24
|
+
expect(@master.build_branch).to_equal build
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../../../../lib/fuci/travis/build'
|
3
|
+
|
4
|
+
stub_class 'Fuci::Travis::Build::Master'
|
5
|
+
|
6
|
+
describe Fuci::Travis::Build do
|
7
|
+
describe '#initialize' do
|
8
|
+
it 'sets the branch name' do
|
9
|
+
build = Fuci::Travis::Build.new branch_name = 'name'
|
10
|
+
expect(build.branch_name).to_equal branch_name
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#branch' do
|
15
|
+
it 'sets a memoized branch with build_branch' do
|
16
|
+
build = Fuci::Travis::Build.new 'name'
|
17
|
+
build.stubs(:build_branch).returns branch = mock
|
18
|
+
expect(build.branch).to_equal branch
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#status' do
|
23
|
+
before do
|
24
|
+
Fuci::Travis::Build.any_instance.stubs(:build_branch).
|
25
|
+
returns branch = mock
|
26
|
+
@build = Fuci::Travis::Build.new ''
|
27
|
+
@state = @build.branch.stubs :state
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'when the build passed' do
|
31
|
+
it 'returns :green' do
|
32
|
+
green = :green
|
33
|
+
@state.returns 'passed'
|
34
|
+
|
35
|
+
expect(@build.status).to_equal green
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'when the build failed' do
|
40
|
+
it 'returns :red' do
|
41
|
+
red = :red
|
42
|
+
@state.returns 'failed'
|
43
|
+
|
44
|
+
expect(@build.status).to_equal red
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'when the build neither passed nor failed' do
|
49
|
+
it 'returns :yellow' do
|
50
|
+
yellow = :yellow
|
51
|
+
expect(@build.status).to_equal yellow
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#log' do
|
57
|
+
it 'returns the log body from the build' do
|
58
|
+
Fuci::Travis::Build.any_instance.
|
59
|
+
stubs(:build_branch).
|
60
|
+
returns branch = mock
|
61
|
+
|
62
|
+
build = Fuci::Travis::Build.new ''
|
63
|
+
log_body = 'brody'
|
64
|
+
log = OpenStruct.new(body: log_body)
|
65
|
+
jobs = [OpenStruct.new(log: log)]
|
66
|
+
|
67
|
+
build.branch.stubs(:jobs).returns jobs
|
68
|
+
|
69
|
+
expect(build.log).to_equal log_body
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '.create' do
|
74
|
+
before do
|
75
|
+
@expect_from_branch_name = Fuci::Travis::Build.expects :from_branch_name
|
76
|
+
end
|
77
|
+
|
78
|
+
describe 'a branch option is declared from the command line' do
|
79
|
+
before do
|
80
|
+
@branch = 'master'
|
81
|
+
Fuci.stubs(:options).returns branch: @branch
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'takes priority' do
|
85
|
+
@expect_from_branch_name.with @branch
|
86
|
+
Fuci::Travis::Build.create
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'a branch option is not declared from the command line' do
|
91
|
+
before { Fuci.stubs(:options).returns branch: nil }
|
92
|
+
|
93
|
+
describe 'a default branch is specfied on Fuci::Travis' do
|
94
|
+
before do
|
95
|
+
@branch = 'dj-ci'
|
96
|
+
Fuci::Travis.stubs(:default_branch).returns @branch
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'creates a new ::Build with the default branch' do
|
100
|
+
@expect_from_branch_name.with @branch
|
101
|
+
Fuci::Travis::Build.create
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe 'a default branch is not specified on Fuci::Travis' do
|
106
|
+
before { Fuci::Travis.stubs(:default_branch).returns nil }
|
107
|
+
|
108
|
+
it 'creates a new ::Build with the current branch' do
|
109
|
+
Fuci::Travis::Build.
|
110
|
+
stubs(:current_branch_name).
|
111
|
+
returns branch_name = mock
|
112
|
+
@expect_from_branch_name.with branch_name
|
113
|
+
Fuci::Travis::Build.create
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '.from_branch_name' do
|
120
|
+
describe 'the branch name is master' do
|
121
|
+
before { @branch_name = 'master' }
|
122
|
+
|
123
|
+
it 'creates a new Master build' do
|
124
|
+
Fuci::Travis::Build::Master.stubs(:new).returns master_build = mock
|
125
|
+
build = Fuci::Travis::Build.from_branch_name @branch_name
|
126
|
+
expect(build).to_equal master_build
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe 'the branch name is not master' do
|
131
|
+
before { @branch_name = 'limb' }
|
132
|
+
|
133
|
+
it 'creates a new generic build' do
|
134
|
+
Fuci::Travis::Build.stubs(:new).with(@branch_name).
|
135
|
+
returns generic_build = mock
|
136
|
+
build = Fuci::Travis::Build.from_branch_name @branch_name
|
137
|
+
expect(build).to_equal generic_build
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe '#build_branch' do
|
143
|
+
before do
|
144
|
+
@branch_name = 'my-ci'
|
145
|
+
@build = mock
|
146
|
+
Fuci::Travis.stubs(:repo).returns @repo = mock
|
147
|
+
@build_wrapper = Fuci::Travis::Build.new @branch_name
|
148
|
+
@build_wrapper.expects(:puts).with "Fetching #{@branch_name} branch..."
|
149
|
+
end
|
150
|
+
|
151
|
+
describe 'when the branch is found' do
|
152
|
+
before do
|
153
|
+
@repo.stubs(:branches).returns branches = { @branch_name => @build }
|
154
|
+
@build_wrapper.expects(:puts).with "Using #{@branch_name} branch."
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'logs fetching and calls branch hash with the branch_name on the repo' do
|
158
|
+
expect(@build_wrapper.send :build_branch ).to_equal @build
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe 'when branch is not found' do
|
163
|
+
before do
|
164
|
+
@repo.stubs(:branches).returns branches = {}
|
165
|
+
@build_wrapper.expects(:puts).
|
166
|
+
with "#{@branch_name} branch not found on Travis."
|
167
|
+
@build_wrapper.expects :exit
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'logs that the branch could not be found and exits' do
|
171
|
+
@build_wrapper.send :build_branch
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../../../../lib/fuci/travis/server'
|
3
|
+
|
4
|
+
describe Fuci::Travis::Server do
|
5
|
+
before do
|
6
|
+
Fuci::Travis::Build.stubs(:create).returns @build = mock
|
7
|
+
@server = Fuci::Travis::Server.new
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'composition' do
|
11
|
+
it 'inherits from Fuci::Server' do
|
12
|
+
expect(@server).to_be_kind_of Fuci::Server
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#initialize' do
|
17
|
+
it 'sets a build instance' do
|
18
|
+
server = Fuci::Travis::Server.new
|
19
|
+
expect(server.build).to_equal @build
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#build_status' do
|
24
|
+
it 'delegates to the build object' do
|
25
|
+
@server.stubs(:build).
|
26
|
+
returns OpenStruct.new status: build_status = mock
|
27
|
+
|
28
|
+
expect(@server.build_status).to_equal build_status
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#fetch_log' do
|
33
|
+
it 'delegates to the build object' do
|
34
|
+
@server.stubs(:build).
|
35
|
+
returns OpenStruct.new log: log = mock
|
36
|
+
@server.stubs(:remove_ascii_color_chars).
|
37
|
+
with(log).
|
38
|
+
returns sanitized_log = mock
|
39
|
+
|
40
|
+
expect(@server.fetch_log).to_equal sanitized_log
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
require_relative '../../../lib/fuci/travis'
|
3
|
+
|
4
|
+
stub_class 'Travis::Repository'
|
5
|
+
stub_class 'Travis::Pro::Repository'
|
6
|
+
|
7
|
+
describe Fuci::Travis do
|
8
|
+
describe '.default_branch' do
|
9
|
+
after { Fuci::Travis.instance_variable_set :@default_branch, nil }
|
10
|
+
|
11
|
+
it 'is an accessor' do
|
12
|
+
@branch = 'branch'
|
13
|
+
expect(Fuci::Travis.default_branch).to_be_nil
|
14
|
+
Fuci::Travis.default_branch = @branch
|
15
|
+
expect(Fuci::Travis.default_branch).to_equal @branch
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '.repo' do
|
20
|
+
after { Fuci::Travis.instance_variable_set :@repo, nil }
|
21
|
+
|
22
|
+
describe 'on initial call' do
|
23
|
+
before do
|
24
|
+
Fuci::Travis.stubs(:remote_repo_name).
|
25
|
+
returns @repo_name = 'dj/fuci'
|
26
|
+
class Client
|
27
|
+
class Repository
|
28
|
+
def self.find r
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
Fuci::Travis.stubs(:client).returns Client
|
33
|
+
Fuci::Travis.expects(:puts).with 'Finding repo...'
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'if the repo can be found' do
|
37
|
+
before do
|
38
|
+
Client::Repository.stubs(:find).
|
39
|
+
with(@repo_name).
|
40
|
+
returns @repo = mock
|
41
|
+
Fuci::Travis.expects(:puts).with "Using repo: #{@repo_name}"
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'logs the query and returns the repo from ::Travis::Pro' do
|
45
|
+
expect(Fuci::Travis.repo).to_equal @repo
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'if the repo cannot be found' do
|
50
|
+
before do
|
51
|
+
Client::Repository.stubs(:find).raises
|
52
|
+
Fuci::Travis.expects(:puts).
|
53
|
+
with "#{@repo_name} repo could not be found on Travis."
|
54
|
+
end
|
55
|
+
|
56
|
+
it "logs that the repo couldn't be found and exits" do
|
57
|
+
Fuci::Travis.repo
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe 'after memoized' do
|
63
|
+
before do
|
64
|
+
@repo = mock
|
65
|
+
Fuci::Travis.instance_variable_set :@repo, @repo
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'just returns the repo' do
|
69
|
+
Fuci::Travis.expects(:puts).never
|
70
|
+
expect(Fuci::Travis.repo).to_equal @repo
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '.pro/=' do
|
76
|
+
after { Fuci::Travis.instance_variable_set :@pro, false }
|
77
|
+
|
78
|
+
it "is either false or what it's set to" do
|
79
|
+
expect(Fuci::Travis.pro).to_equal false
|
80
|
+
Fuci::Travis.pro = true
|
81
|
+
expect(Fuci::Travis.pro).to_equal true
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '.access_token' do
|
86
|
+
it 'is an accessor' do
|
87
|
+
@access_token = 'access token'
|
88
|
+
expect(Fuci::Travis.access_token).to_be_nil
|
89
|
+
Fuci::Travis.access_token = @access_token
|
90
|
+
expect(Fuci::Travis.access_token).to_equal @access_token
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '.add_testers' do
|
95
|
+
it 'delegates to Fuci module' do
|
96
|
+
testers = [mock, mock]
|
97
|
+
Fuci.expects(:add_testers).with testers
|
98
|
+
|
99
|
+
Fuci::Travis.add_testers testers
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '.configure' do
|
104
|
+
before do
|
105
|
+
Fuci::Travis.expects(:puts).with 'configuring'
|
106
|
+
Fuci::Travis.expects :set_client
|
107
|
+
Fuci::Travis.expects :set_access_token
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'yields the block with self, ' +
|
111
|
+
'sets the client, ' +
|
112
|
+
'and sets the access token' do
|
113
|
+
Fuci::Travis.configure do |fu|
|
114
|
+
fu.puts 'configuring'
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '.set_client' do
|
120
|
+
after { Fuci::Travis.instance_variable_set :@client, nil }
|
121
|
+
|
122
|
+
describe 'when pro' do
|
123
|
+
before { Fuci::Travis.stubs(:pro).returns true }
|
124
|
+
|
125
|
+
it 'sets the travis strategy to ::Travis::Pro' do
|
126
|
+
Fuci::Travis.set_client
|
127
|
+
|
128
|
+
expect(Fuci::Travis.client).to_equal ::Travis::Pro
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe 'when not pro' do
|
133
|
+
before { Fuci::Travis.stubs(:pro).returns false }
|
134
|
+
|
135
|
+
it 'sets the travis strategy to ::Travis' do
|
136
|
+
Fuci::Travis.set_client
|
137
|
+
|
138
|
+
expect(Fuci::Travis.client).to_equal ::Travis
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe '.set_access_token' do
|
144
|
+
it 'sets the access token on the client' do
|
145
|
+
Fuci::Travis.stubs(:access_token).returns access_token = mock
|
146
|
+
Fuci::Travis.stubs(:client).returns client = mock
|
147
|
+
client.expects(:access_token=).with access_token
|
148
|
+
|
149
|
+
Fuci::Travis.set_access_token
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'minitest/spec/expect'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'mocha/setup'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
def stub_class klass
|
7
|
+
objects = klass.split '::'
|
8
|
+
|
9
|
+
klass = objects.inject(Object) do |memo, obj|
|
10
|
+
unless obj == objects.last
|
11
|
+
begin
|
12
|
+
memo.const_get obj
|
13
|
+
rescue
|
14
|
+
memo.const_set obj, Module.new
|
15
|
+
end
|
16
|
+
else
|
17
|
+
begin
|
18
|
+
memo.const_get obj
|
19
|
+
rescue
|
20
|
+
memo.const_set obj, Class.new
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
memo.const_get obj
|
25
|
+
end
|
26
|
+
|
27
|
+
klass.class_eval do
|
28
|
+
yield if block_given?
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fuci-travis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Jachimiak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: fuci
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: travis
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.4'
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: bundler
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,6 +52,34 @@ dependencies:
|
|
24
52
|
- - ~>
|
25
53
|
- !ruby/object:Gem::Version
|
26
54
|
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest-spec-expect
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mocha
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.14'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.14'
|
27
83
|
- !ruby/object:Gem::Dependency
|
28
84
|
name: rake
|
29
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,10 +94,11 @@ dependencies:
|
|
38
94
|
- - '>='
|
39
95
|
- !ruby/object:Gem::Version
|
40
96
|
version: '0'
|
41
|
-
description:
|
97
|
+
description: 'FUCK YOU CI: For Travis! :).'
|
42
98
|
email:
|
43
99
|
- dave.jachimiak@gmail.com
|
44
|
-
executables:
|
100
|
+
executables:
|
101
|
+
- fuci
|
45
102
|
extensions: []
|
46
103
|
extra_rdoc_files: []
|
47
104
|
files:
|
@@ -50,10 +107,19 @@ files:
|
|
50
107
|
- LICENSE.txt
|
51
108
|
- README.md
|
52
109
|
- Rakefile
|
110
|
+
- bin/fuci
|
53
111
|
- fuci-travis.gemspec
|
54
112
|
- lib/fuci/travis.rb
|
113
|
+
- lib/fuci/travis/build.rb
|
114
|
+
- lib/fuci/travis/build/master.rb
|
115
|
+
- lib/fuci/travis/server.rb
|
55
116
|
- lib/fuci/travis/version.rb
|
56
|
-
|
117
|
+
- spec/lib/fuci/travis/build/master_spec.rb
|
118
|
+
- spec/lib/fuci/travis/build_spec.rb
|
119
|
+
- spec/lib/fuci/travis/server_spec.rb
|
120
|
+
- spec/lib/fuci/travis_spec.rb
|
121
|
+
- spec/spec_helper.rb
|
122
|
+
homepage: https://github.com/davejachimiak/fuci-travis
|
57
123
|
licenses:
|
58
124
|
- MIT
|
59
125
|
metadata: {}
|
@@ -73,8 +139,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
139
|
version: '0'
|
74
140
|
requirements: []
|
75
141
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.0.
|
142
|
+
rubygems_version: 2.0.6
|
77
143
|
signing_key:
|
78
144
|
specification_version: 4
|
79
|
-
summary: Run failures from your
|
80
|
-
test_files:
|
145
|
+
summary: Run failures from your recent Travis builds locally.
|
146
|
+
test_files:
|
147
|
+
- spec/lib/fuci/travis/build/master_spec.rb
|
148
|
+
- spec/lib/fuci/travis/build_spec.rb
|
149
|
+
- spec/lib/fuci/travis/server_spec.rb
|
150
|
+
- spec/lib/fuci/travis_spec.rb
|
151
|
+
- spec/spec_helper.rb
|