circlemator 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c813019d9366200fd764c399fa6736d7e0d690e5
4
- data.tar.gz: b2692e0b581a721cbe5854ba21cdb932552cbe32
3
+ metadata.gz: 0bc105b86b626325f97f0d06877e60e7d6e0751c
4
+ data.tar.gz: 8d8d411aa9f82022ea83ff19c7c827225ac7a497
5
5
  SHA512:
6
- metadata.gz: c0a99bfe944824eb9e5dffb63ab81c8352e7cc63fb42dd1f8229b8535144c6f9998c13a2dabab405f269fab975778e1defefb71866c9383a5d504f6a265414c3
7
- data.tar.gz: 70629c129f63f0646a1a9d185b2d8b6da8377584b93c5dacf70eacaa77f2ecf8a2c333d481c17674e14e73c561b47d56a81919e541470b49a4b931a5771eba2e
6
+ metadata.gz: 6de47e2288045df12d26553f8d2815cdb14faa9af8b9540b0a19d874656f21a73b2c2b06441becb107a6e5a03de8b89a7ea45e8d8351b763c83ba3f34d4a16bd
7
+ data.tar.gz: adb99ddcae2c9956bc8171ba99e3b4fb29580629a6a5fa85d79a13c4452a3bdc836bff4da6af07fc7e3754122ac06d732742615a4c01abd8cc400cd0eee55511
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ inherit_gem:
2
+ rf-stylez: ruby/rubocop.yml
data/Gemfile CHANGED
@@ -1,4 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  # Specify your gem's dependencies in circlemator.gemspec
4
5
  gemspec
6
+
7
+ gem 'rf-stylez'
8
+ gem 'rspec_junit_formatter'
data/Guardfile ADDED
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ guard :rspec, cmd: 'bundle exec rspec' do
3
+ require 'guard/rspec/dsl'
4
+ dsl = Guard::RSpec::Dsl.new(self)
5
+
6
+ rspec = dsl.rspec
7
+ watch(rspec.spec_helper) { rspec.spec_dir }
8
+ watch(rspec.spec_support) { rspec.spec_dir }
9
+ watch(rspec.spec_files)
10
+
11
+ # Ruby files
12
+ ruby = dsl.ruby
13
+ dsl.watch_spec_files_for(ruby.lib_files)
14
+ end
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
- # Circlemator
1
+ # Circlemator [![Circle CI](https://circleci.com/gh/rainforestapp/circlemator.png?style=badge&circle-token=0b39cf33b52e34ef6bb29cf2f2a1c071fef3f26f)](https://circleci.com/gh/rainforestapp/circlemator)
2
2
 
3
3
  Circlemator is a bucket of tricks for working with CircleCI and Github
4
- used internally at Rainforest QA.
4
+ used internally at [Rainforest QA](http://www.rainforestqa.com).
5
5
 
6
6
  ## Installation
7
7
 
@@ -50,6 +50,26 @@ to be set in CircleCI:
50
50
  - `CIRCLE_API_TOKEN`: Your CircleCI API token. (Can also be set with
51
51
  the `-t` option.)
52
52
 
53
+ ### Style check
54
+
55
+ Think of this as a poor man's HoundCI: it runs Rubocop (and/or more
56
+ linters/checkers TBD) and comments on the Github pull request using
57
+ the excellent [Pronto](https://github.com/mmozuras/pronto). Use it
58
+ like so:
59
+
60
+ ```yml
61
+ test:
62
+ pre:
63
+ - bundle exec circlemator style-check --base-branch=develop
64
+ ```
65
+
66
+ (It probably makes sense in either the `pre` or `override` steps.)
67
+
68
+ `style-check` requires the following environment variable to be set:
69
+
70
+ - `GITHUB_ACCESS_TOKEN`: A Github API auth token for a user with commit
71
+ access to your repo. (Can also be set with the `-g` option.)
72
+
53
73
  ### Self-merge release branch
54
74
 
55
75
  Preamble: at Rainforest, our process for getting code into production
@@ -59,7 +79,7 @@ looks like this:
59
79
  2. Run unit tests and get code review (repeat 1-2 as necessary).
60
80
  3. Merge feature branch to `develop`.
61
81
  4. Open release pull request from `develop` to `master`.
62
- 5. Run unit tests + Rainforest against `develop`.
82
+ 5. Run unit tests + [Rainforest](http://www.rainforestqa.com) against `develop`.
63
83
  6. Merge `develop` into `master` if everything's green.
64
84
  7. Deploy from `master`.
65
85
 
@@ -92,7 +112,7 @@ request.
92
112
 
93
113
  `self-merge` requires the following environment variable to be set:
94
114
 
95
- - `GITHUB_AUTH_TOKEN`: A Github API auth token for a user with commit
115
+ - `GITHUB_ACCESS_TOKEN`: A Github API auth token for a user with commit
96
116
  access to your repo. (Can also be set with the `-g` option.)
97
117
 
98
118
  Also, unfortunately branch protection cannot be enabled on your
data/Rakefile CHANGED
@@ -1 +1,2 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
+ require 'bundler/gem_tasks'
data/circle.yml ADDED
@@ -0,0 +1,4 @@
1
+ test:
2
+ pre:
3
+ - bundle exec exe/circlemator cancel-old
4
+ - bundle exec exe/circlemator style-check --base-branch=master
data/circlemator.gemspec CHANGED
@@ -1,28 +1,35 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'circlemator/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "circlemator"
7
+ spec.name = 'circlemator'
8
8
  spec.version = Circlemator::VERSION
9
- spec.authors = ["Emanuel Evans"]
10
- spec.email = ["emanuel@rainforestqa.com"]
9
+ spec.authors = ['Emanuel Evans']
10
+ spec.email = ['emanuel@rainforestqa.com']
11
11
 
12
- spec.summary = %q{A bucket of tricks for CircleCI and Github.}
13
- spec.description = <<-EOF
12
+ spec.summary = 'A bucket of tricks for CircleCI and Github.'
13
+ spec.description = <<-EOF.strip
14
14
  A few utilities for CircleCI to improve your CI workflow.
15
15
  EOF
16
- spec.homepage = "https://github.com/rainforestapp/circlemator"
17
- spec.license = "MIT"
16
+ spec.homepage = 'https://github.com/rainforestapp/circlemator'
17
+ spec.license = 'MIT'
18
18
 
19
19
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
- spec.bindir = "exe"
20
+ spec.bindir = 'exe'
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ["lib"]
22
+ spec.require_paths = ['lib']
23
23
 
24
- spec.add_dependency "httparty", "~> 0.13.7"
24
+ spec.add_dependency 'httparty', '~> 0.13.7'
25
+ spec.add_dependency 'pronto', '~> 0.5.3'
26
+ spec.add_dependency 'pronto-rubocop', '~> 0.5.2'
25
27
 
26
- spec.add_development_dependency "bundler", "~> 1.10"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency 'bundler', '~> 1.10'
29
+ spec.add_development_dependency 'rake', '~> 10.0'
30
+ spec.add_development_dependency 'rubocop'
31
+ spec.add_development_dependency 'vcr', '~> 3.0.1'
32
+ spec.add_development_dependency 'webmock', '~> 1.22.6'
33
+ spec.add_development_dependency 'rspec', '~> 3.4.0'
34
+ spec.add_development_dependency 'guard-rspec', '~> 4.6.4'
28
35
  end
data/exe/circlemator CHANGED
@@ -1,11 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
  require 'optparse'
3
4
  require_relative '../lib/circlemator/build_canceler'
4
5
  require_relative '../lib/circlemator/self_merger'
6
+ require_relative '../lib/circlemator/github_repo'
7
+ require_relative '../lib/circlemator/style_checker'
5
8
 
6
9
  options = {}
7
10
  parser = OptionParser.new do |opts|
8
- opts.banner = "Usage: circlemator (self-merge|cancel-old) [options]"
11
+ opts.banner = 'Usage: circlemator (self-merge|cancel-old) [options]'
9
12
 
10
13
  opts.on('-bBRANCH', '--base-branch=BRANCH', 'Base branch for merging') do |b|
11
14
  options[:base_branch] = b
@@ -42,7 +45,7 @@ end
42
45
 
43
46
  def require_opt(opts, key)
44
47
  if !opts[key]
45
- puts "Option #{key.gsub(/_/, '-')} is required!"
48
+ puts "Option #{key.to_s.gsub(/_/, '-')} is required!"
46
49
  exit 1
47
50
  end
48
51
  end
@@ -54,14 +57,16 @@ end
54
57
 
55
58
  options[:user] = require_env 'CIRCLE_PROJECT_USERNAME'
56
59
  options[:repo] = require_env 'CIRCLE_PROJECT_REPONAME'
60
+ options[:github_auth_token] ||= ENV['GITHUB_ACCESS_TOKEN']
61
+ options[:github_auth_token] ||= ENV['GITHUB_AUTH_TOKEN']
57
62
 
58
63
  case ARGV[0]
59
64
  when 'self-merge'
60
65
  options[:sha] = require_env 'CIRCLE_SHA1'
61
- options[:github_auth_token] ||= ENV['GITHUB_AUTH_TOKEN']
62
66
  require_opt options, :github_auth_token
63
67
  require_opt options, :base_branch
64
68
  require_opt options, :compare_branch
69
+ options[:github_repo] = Circlemator::GithubRepo.new(options)
65
70
 
66
71
  Circlemator::SelfMerger.new(options).merge!
67
72
  when 'cancel-old'
@@ -70,12 +75,18 @@ when 'cancel-old'
70
75
  require_opt options, :circle_api_token
71
76
 
72
77
  Circlemator::BuildCanceler.new(options).cancel_old_builds!
78
+ when 'style-check'
79
+ options[:sha] = require_env 'CIRCLE_SHA1'
80
+ options[:compare_branch] ||= require_env 'CIRCLE_BRANCH'
81
+ require_opt options, :github_auth_token
82
+ require_opt options, :base_branch
83
+ options[:github_repo] = Circlemator::GithubRepo.new(options)
84
+
85
+ Circlemator::StyleChecker.new(options).check!
73
86
  else
74
87
  puts parser
75
88
  end
76
89
 
77
-
78
-
79
90
  # Local Variables:
80
91
  # major-mode: ruby-mode
81
92
  # End:
data/lib/circlemator.rb CHANGED
@@ -1,4 +1,5 @@
1
- require "circlemator/version"
1
+ # frozen_string_literal: true
2
+ require 'circlemator/version'
2
3
 
3
4
  module Circlemator
4
5
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  require 'httparty'
2
3
  require 'json'
3
4
 
4
5
  module Circlemator
5
6
  class BuildCanceler
6
- def initialize(user: , repo: , current_build: , circle_api_token: )
7
+ def initialize(user: , repo: , current_build: , circle_api_token: , **_opts)
7
8
  @user = user
8
9
  @repo = repo
9
10
  @current_build = current_build
@@ -30,7 +31,7 @@ module Circlemator
30
31
  end
31
32
 
32
33
  if cancel_self
33
- puts "Daisy, Daisy, give me your answer, do..."
34
+ puts 'Daisy, Daisy, give me your answer, do...'
34
35
  HTTParty.post "https://circleci.com/api/v1/project/#{@user}/#{@repo}/#{@current_build}/cancel",
35
36
  circle_auth
36
37
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+ require 'httparty'
3
+
4
+ module Circlemator
5
+ class GithubRepo
6
+ include HTTParty
7
+
8
+ class InvalidPath < StandardError
9
+ def initialize(path)
10
+ super "Path #{path} is not valid for repo"
11
+ end
12
+ end
13
+
14
+ class WrongRepo < StandardError
15
+ def initialize(url, repo)
16
+ super "URL #{url} does not belong to repo #{repo}"
17
+ end
18
+ end
19
+
20
+ base_uri 'https://api.github.com/repos'
21
+
22
+ def initialize(user: , repo: , github_auth_token: , **_opts)
23
+ @user = user
24
+ @repo = repo
25
+ @auth_token = github_auth_token
26
+ end
27
+
28
+ def get(path, opts = {})
29
+ self.class.get(fix_path(path), opts.merge(basic_auth: auth))
30
+ end
31
+
32
+ def put(path, opts = {})
33
+ self.class.put(fix_path(path), opts.merge(basic_auth: auth))
34
+ end
35
+
36
+ private
37
+
38
+ def fix_path(path)
39
+ case path
40
+ when %r(\A#{self.class.base_uri}(/#{@user}/#{@repo}.*)\z)
41
+ $1
42
+ when %r(\A#{self.class.base_uri})
43
+ raise WrongRepo.new(path, "#{@user}/#{@repo}")
44
+ when %r(\A/.*)
45
+ "/#{@user}/#{@repo}#{path}"
46
+ else
47
+ raise InvalidPath, path
48
+ end
49
+ end
50
+
51
+ def auth
52
+ { username: @auth_token, password: 'x-oauth-basic' }
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+ require 'circlemator/github_repo'
3
+
4
+ module Circlemator
5
+ class PrFinder
6
+ class BadResponseError < StandardError
7
+ def initialize(response)
8
+ super "Bad response from github: #{response.inspect}"
9
+ end
10
+ end
11
+
12
+ def initialize(github_repo: , base_branch: , compare_branch: , sha: , **_opts)
13
+ @github_repo = github_repo
14
+ @base_branch = base_branch
15
+ @compare_branch = compare_branch
16
+ @sha = sha
17
+ end
18
+
19
+ def find_pr
20
+ response = @github_repo.get '/pulls', query: { base: @base_branch }
21
+ if response.code != 200
22
+ raise BadResponseError, response
23
+ end
24
+
25
+ prs = JSON.parse(response.body)
26
+ target_pr = prs.find do |pr|
27
+ pr.fetch('head').fetch('ref') == @compare_branch &&
28
+ pr.fetch('head').fetch('sha') == @sha &&
29
+ pr.fetch('base').fetch('ref') == @base_branch
30
+ end
31
+
32
+ return if target_pr.nil?
33
+
34
+ [target_pr.fetch('number'), target_pr.fetch('url')]
35
+ end
36
+ end
37
+ end
@@ -1,69 +1,29 @@
1
+ # frozen_string_literal: true
1
2
  require 'httparty'
2
3
  require 'json'
3
4
 
4
5
  module Circlemator
5
6
  class SelfMerger
6
- def initialize(user: ,
7
- repo: ,
8
- sha: ,
9
- github_auth_token: ,
10
- base_branch: ,
11
- compare_branch: )
12
- @user = user
13
- @repo = repo
14
- @sha = sha
15
- @auth_token = github_auth_token
16
- @base_branch = base_branch
17
- @compare_branch = compare_branch
7
+ MESSAGE = 'Auto-merge by Circlemator!'
8
+ def initialize(opts)
9
+ github_repo = opts.fetch(:github_repo)
10
+ raise "#{github_repo} is invalid" unless github_repo.is_a? GithubRepo
11
+
12
+ @github_repo = github_repo
13
+ @sha = opts.fetch(:sha)
14
+ @opts = opts
18
15
  end
19
16
 
20
17
  def merge!
21
- pr_number, pr_url = find_pr
18
+ pr_number, pr_url = PrFinder.new(@opts).find_pr
22
19
  return if pr_number.nil? || pr_url.nil?
23
20
 
24
- msg = "Auto-merge by Circlemator!"
25
- response = HTTParty.put "#{pr_url}/merge",
26
- body: { commit_message: msg, sha: @sha }.to_json,
27
- basic_auth: github_auth
21
+ response = @github_repo.put "#{pr_url}/merge",
22
+ body: { commit_message: MESSAGE, sha: @sha }.to_json
28
23
  if response.code != 200
29
24
  body = JSON.parse(response.body)
30
25
  raise "Merge failed: #{body.fetch('message')}"
31
26
  end
32
27
  end
33
-
34
- private
35
-
36
- def find_pr
37
- response = HTTParty.get "https://api.github.com/repos/#{github_repo}/pulls",
38
- query: { base: @base_branch },
39
- basic_auth: github_auth
40
- if response.code != 200
41
- raise "Bad response from Github: #{response.inspect}"
42
- end
43
-
44
- prs = JSON.parse(response.body)
45
- pr = prs.find do |pr|
46
- pr.fetch('head').fetch('ref') == @compare_branch &&
47
- pr.fetch('head').fetch('sha') == @sha &&
48
- pr.fetch('base').fetch('ref') == @base_branch
49
- end
50
-
51
- if pr.nil?
52
- puts 'No release PR. Not merging.'
53
- return
54
- end
55
-
56
- [pr.fetch('number'), pr.fetch('url')]
57
- end
58
-
59
-
60
- def github_repo
61
- "#{@user}/#{@repo}"
62
- end
63
-
64
-
65
- def github_auth
66
- { username: @auth_token, password: 'x-oauth-basic' }
67
- end
68
28
  end
69
29
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ require 'httparty'
3
+ require 'json'
4
+ require 'pronto'
5
+ require 'pronto/rubocop'
6
+ require 'circlemator/pr_finder'
7
+
8
+ module Circlemator
9
+ class StyleChecker
10
+ def initialize(opts)
11
+ @opts = opts
12
+ @base_branch = opts.fetch(:base_branch)
13
+ end
14
+
15
+ def check!
16
+ pr_number, _ = PrFinder.new(@opts).find_pr
17
+ if pr_number
18
+ ENV['PULL_REQUEST_ID'] = pr_number.to_s
19
+ formatter = ::Pronto::Formatter::GithubPullRequestFormatter.new
20
+ else
21
+ formatter = ::Pronto::Formatter::GithubFormatter.new
22
+ end
23
+
24
+ ::Pronto.run(@base_branch, '.', formatter)
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Circlemator
2
- VERSION = "0.1.1"
3
+ VERSION = '0.2.0'
3
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: circlemator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emanuel Evans
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-01-23 00:00:00.000000000 Z
11
+ date: 2016-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.13.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: pronto
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.5.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.5.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: pronto-rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.5.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.5.2
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: bundler
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +80,77 @@ dependencies:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
82
  version: '10.0'
55
- description: " A few utilities for CircleCI to improve your CI workflow.\n"
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: vcr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.0.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 1.22.6
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 1.22.6
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.4.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 3.4.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: guard-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 4.6.4
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 4.6.4
153
+ description: A few utilities for CircleCI to improve your CI workflow.
56
154
  email:
57
155
  - emanuel@rainforestqa.com
58
156
  executables:
@@ -61,18 +159,25 @@ extensions: []
61
159
  extra_rdoc_files: []
62
160
  files:
63
161
  - ".gitignore"
162
+ - ".rspec"
163
+ - ".rubocop.yml"
64
164
  - ".ruby-version"
65
165
  - Gemfile
166
+ - Guardfile
66
167
  - LICENSE
67
168
  - README.md
68
169
  - Rakefile
69
170
  - bin/console
70
171
  - bin/setup
172
+ - circle.yml
71
173
  - circlemator.gemspec
72
174
  - exe/circlemator
73
175
  - lib/circlemator.rb
74
176
  - lib/circlemator/build_canceler.rb
177
+ - lib/circlemator/github_repo.rb
178
+ - lib/circlemator/pr_finder.rb
75
179
  - lib/circlemator/self_merger.rb
180
+ - lib/circlemator/style_checker.rb
76
181
  - lib/circlemator/version.rb
77
182
  homepage: https://github.com/rainforestapp/circlemator
78
183
  licenses: