lita-github 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b1cecdbe3d83a2b89867c6936613fca780591b2b
4
- data.tar.gz: 08048f199dbf53215c03947363b2615617d24d71
3
+ metadata.gz: 4fb70c20f1df1ecc8a2bbab4f0d15ca99e654c88
4
+ data.tar.gz: 4dce6a2923469c0a456f5b47ad76867ce66b94b6
5
5
  SHA512:
6
- metadata.gz: 3877f91890ca3df7238f1b01ca13361ff19314d9260f36419cae8bef99104cb556d40fb1494dea0f4417bad311e98c6ef2311a8e00262c0baf676ac84bc9cdf1
7
- data.tar.gz: e29da4072f9cbca52aca950d30309700edf9686e41a6f0b87a652ea67ed8c50913dd39833b1c427d04f5abcda7fe0e911cf0507cb46a20fb7b0b1f31e79bf02f
6
+ metadata.gz: 22855d06a6172229a3e1f1a2edd5bf8a15521e3f317b53d1efb6b65254ff3e29c9be97e86752f04696f648796aa6007075097dc98c54f689302e11e761583eea
7
+ data.tar.gz: 13929d9be901a4ad208d3cdbaf1ea5a032595264760d321c48ef96a107a1549ff9fd94e5220acc7f18c43fc25f112a66a575177c4d4d0bcc94cc6492876bfa15
data/.gitignore CHANGED
@@ -32,3 +32,6 @@ Gemfile.lock
32
32
 
33
33
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
34
  .rvmrc
35
+
36
+ # Ignore non-example lita_config.rb while developing
37
+ lita_config.rb
data/README.md CHANGED
@@ -17,6 +17,27 @@ This Gem is currently in development, and is not suited for production use. Ther
17
17
 
18
18
  In addition, the documentation will be lacking while the development is underway.
19
19
 
20
+ Running Locally
21
+ ---------------
22
+ ### Set Up
23
+ You'll need to have checked out this repo and `cd` into its directory.
24
+ Then run the following commands.
25
+
26
+ ```
27
+ docker-compose run --rm lita-github bundle install --jobs=5
28
+ cp lita_config.example.rb lita_config.rb
29
+ ```
30
+ Edit the lita_config.rb file as needed, you'll most likely need to add your own Github Access Token.
31
+ ```
32
+ docker-compose run --rm lita-github bundle exec rake
33
+ ```
34
+ If the above command works and everything passes then you're good to go!
35
+
36
+ ### Interacting with Lita on the command line
37
+ ```
38
+ docker-compose run --rm lita-github bundle exec lita
39
+ ```
40
+
20
41
  Configuration
21
42
  -------------
22
43
  The configuration options will get their own in-depth doc a little further down the line. Here are the important ones for now:
@@ -31,6 +52,16 @@ The configuration options will get their own in-depth doc a little further down
31
52
  * the default teams that should be added to a repo based on the slug name:
32
53
  * When clicking on a team in your org you can use the URL to get the slug: `https://github.com/orgs/<ORG>/teams/[slug]`
33
54
 
55
+ ### Github Enterprise configuration
56
+ To set your github enterprise hostname you have to directly [configure
57
+ Octokit](https://github.com/octokit/octokit.rb#working-with-github-enterprise). All you have to do is add
58
+ the following snippet to ``lita_config.rb``.
59
+ ```ruby
60
+ Octokit.configure do |octo_config|
61
+ octo_config.api_endpoint = "https://<your-api-hostname>/api/v3/"
62
+ end
63
+ ```
64
+
34
65
  Commands
35
66
  --------
36
67
  Use the source, Luke. We will try to keep this list up to date, but it will be inevitably deprecated by proper documentation.
@@ -53,8 +84,8 @@ Here is the current functionality:
53
84
  * show some information about a GitHub user
54
85
 
55
86
  ### GitHub Repository Handler
56
- * `!gh repo create PagerDuty/lita-github private:true team:<team_slug>`
57
- * This creates a new repository, sets it to private, and adds the team you've specified.
87
+ * `!gh repo create PagerDuty/lita-github private:true team:<team_slug> admin:<username>`
88
+ * This creates a new repository, sets it to private, adds the team you've specified, and adds the GitHub user with <username> as admin
58
89
  * This method can be disabled by setting `config.handlers.github.repo_create_enabled = false` in your configuration file
59
90
  * `!gh repo delete PagerDuty/lita-github`
60
91
  * Deletes the repo you specify, requires confirmation before doing so
@@ -0,0 +1,23 @@
1
+ ---
2
+ version: '3'
3
+ services:
4
+ lita-github:
5
+ image: 'ruby:2.1'
6
+ expose:
7
+ - '8080'
8
+ volumes:
9
+ - '.:/usr/src/app'
10
+ - 'lita-github-bundle:/usr/local/bundle'
11
+ working_dir: '/usr/src/app'
12
+ environment:
13
+ - 'BUNDLE_PATH=/usr/local/bundle'
14
+ - 'RSPEC_REDIS_HOST=redis'
15
+ command: 'bundle exec lita'
16
+ depends_on:
17
+ - 'redis'
18
+ redis:
19
+ image: 'redis'
20
+ expose:
21
+ - '8080'
22
+ volumes:
23
+ lita-github-bundle: {}
@@ -21,7 +21,7 @@
21
21
  # @author Tim Heckman <tim@pagerduty.com>
22
22
  module LitaGithub
23
23
  # lita-github version
24
- VERSION = '0.2.2'
24
+ VERSION = '0.3.0'
25
25
 
26
26
  # lita-github version split amongst different revisions
27
27
  MAJOR_VERSION, MINOR_VERSION, REVISION = VERSION.split('.').map(&:to_i)
@@ -65,39 +65,39 @@ module Lita
65
65
  }
66
66
  )
67
67
 
68
- def self.default_config(config)
69
- # when setting default configuration values please remember one thing:
70
- # secure and safe by default
71
- config.default_team_slugs = nil
72
- config.repo_private_default = true
73
- config.org_team_add_allowed_perms = %w(pull)
74
-
75
- ####
76
- # Method Filters
77
- ####
78
-
79
- # Lita::Handlers::Github
80
- config.totp_secret = nil
81
-
82
- # Lita::Handlers::GithubRepo
83
- config.repo_create_enabled = true
84
- config.repo_rename_enabled = true
85
- config.repo_delete_enabled = false
86
- config.repo_team_add_enabled = false
87
- config.repo_team_rm_enabled = false
88
- config.repo_update_description_enabled = true
89
- config.repo_update_homepage_enabled = true
90
-
91
- # Lita::Handlers::GithubPR
92
- config.pr_merge_enabled = true
93
-
94
- # Lita::Handlers::GithubOrg
95
- config.org_team_add_enabled = false
96
- config.org_team_rm_enabled = false
97
- config.org_user_add_enabled = false
98
- config.org_user_rm_enabled = false
99
- config.org_eject_user_enabled = false
100
- end
68
+ # when setting default configuration values please remember one thing:
69
+ # secure and safe by default
70
+ config :access_token, default: nil
71
+ config :default_team_slugs, default: nil
72
+ config :repo_private_default, default: true
73
+ config :org_team_add_allowed_perms, default: %w(pull)
74
+
75
+ ####
76
+ # Method Filters
77
+ ####
78
+
79
+ # Lita::Handlers::Github
80
+ config :totp_secret, default: nil
81
+
82
+ # Lita::Handlers::GithubRepo
83
+ config :repo_create_enabled, default: true
84
+ config :repo_rename_enabled, default: true
85
+ config :repo_delete_enabled, default: false
86
+ config :repo_team_add_enabled, default: false
87
+ config :repo_team_rm_enabled, default: false
88
+ config :repo_update_description_enabled, default: true
89
+ config :repo_update_homepage_enabled, default: true
90
+
91
+ # Lita::Handlers::GithubPR
92
+ config :pr_merge_enabled, default: true
93
+
94
+ # Lita::Handlers::GithubOrg
95
+ config :default_org, default: nil
96
+ config :org_team_add_enabled, default: false
97
+ config :org_team_rm_enabled, default: false
98
+ config :org_user_add_enabled, default: false
99
+ config :org_user_rm_enabled, default: false
100
+ config :org_eject_user_enabled, default: false
101
101
 
102
102
  def status(response)
103
103
  status = octo.github_status_last_message
@@ -42,10 +42,11 @@ module Lita
42
42
  :repo_create,
43
43
  command: true,
44
44
  help: {
45
- 'gh repo create PagerDuty/lita-github private:true team:heckman' =>
46
- 'Create the PagerDuty/lita-github repo, make it private, use team with "heckman" slug',
45
+ 'gh repo create PagerDuty/lita-github private:true team:heckman admin:anon' =>
46
+ 'Create the PagerDuty/lita-github repo, make it private,'\
47
+ 'use team with "heckman" slug, with GitHub user "anon" as repo admin',
47
48
  'gh repo new PagerDuty/lita-github' =>
48
- 'create new repo using the default privacy/team settings'
49
+ 'create new repo using the default privacy, team, admin settings'
49
50
  }
50
51
  )
51
52
 
@@ -333,6 +334,7 @@ module Lita
333
334
  opts[:other_teams].each do |team_id|
334
335
  add_team_to_repo(full_name, gh_team(org, team_id))
335
336
  end if opts.key?(:other_teams)
337
+ add_admin_to_repo(full_name, opts[:admin]) if opts.key?(:admin)
336
338
  ensure
337
339
  if repo?(full_name)
338
340
  repo_url = "https://github.com/#{full_name}"
@@ -401,6 +403,14 @@ module Lita
401
403
  return t('repo_team_rm.fail', repo: full_name, team: team[:name])
402
404
  end
403
405
  end
406
+
407
+ def add_admin_to_repo(full_name, user)
408
+ if octo.add_collaborator(full_name, user, permission: 'admin')
409
+ return t('repo_admin_add.pass', repo: full_name, user: user)
410
+ else
411
+ return t('repo_admin_add.fail', repo: full_name, user: user)
412
+ end
413
+ end
404
414
  end
405
415
 
406
416
  Lita.register_handler(GithubRepo)
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
44
44
  s.add_development_dependency 'codeclimate-test-reporter', '~> 0.4', '>= 0.4.0'
45
45
  s.add_development_dependency 'yard', '~> 0.8.7'
46
46
 
47
- s.add_runtime_dependency 'lita', '~> 4.0'
47
+ s.add_runtime_dependency 'lita', '>= 4.0'
48
48
  s.add_runtime_dependency 'octokit', '~> 3.3'
49
49
  s.add_runtime_dependency 'rotp', '~> 2.0'
50
50
  s.add_runtime_dependency 'lita-confirmation'
@@ -0,0 +1,23 @@
1
+ Lita.configure do |config|
2
+ config.robot.log_level = :debug
3
+ config.robot.alias = '!'
4
+ config.redis[:host] = 'redis'
5
+
6
+ # For Github/octokit use
7
+ config.handlers.github.access_token = '<GITHUB ACCESS TOKEN>'
8
+ config.handlers.github.default_org = '<ORGANIZATION NAME>'
9
+ config.handlers.github.default_team_slugs = %w(<TEAM1> <TEAM2> <ETC>)
10
+ config.handlers.github.repo_create_enabled = true
11
+ config.handlers.github.repo_delete_enabled = true
12
+ config.handlers.github.repo_private_default = true
13
+ config.handlers.github.org_team_add_allowed_perms = %w(pull push)
14
+ config.handlers.github.repo_create_enabled = true
15
+ config.handlers.github.repo_delete_enabled = true
16
+ config.handlers.github.pr_merge_enabled = true
17
+ config.handlers.github.repo_team_add_enabled = true
18
+ config.handlers.github.repo_team_rm_enabled = true
19
+ config.handlers.github.repo_update_description_enabled = true
20
+ config.handlers.github.repo_update_homepage_enabled = true
21
+ config.handlers.github.org_team_add_enabled = true
22
+ config.handlers.github.org_team_rm_enabled = true
23
+ end
@@ -53,6 +53,9 @@ en:
53
53
  updated: "The homepage for %{repo} has been updated to: '%{url}'"
54
54
  invalid_url: "The URL provided is not valid: '%{url}'"
55
55
  boom: "An uncaught exception was hit while trying to update the homepage of %{repo}. Is GitHub having issues?"
56
+ repo_admin_add:
57
+ pass: "Added user '%{user}' as admin to %{repo}"
58
+ fail: "Something went wrong trying to add user '%{user}' as admin to %{repo}. Is that user in your organization?"
56
59
  github_pr:
57
60
  method_disabled: "Sorry, this function has either been disabled or not enabled in the config"
58
61
  exception: "An unexpected exception was hit during the GitHub API operation. Please make sure all arguments are proper and try again, or try checking the GitHub status (gh status)"
@@ -18,6 +18,16 @@ require 'rspec'
18
18
  require 'lita/rspec'
19
19
  require 'codeclimate-test-reporter'
20
20
 
21
+ RSpec.configure do |config|
22
+ config.before do
23
+ if ENV['RSPEC_REDIS_HOST']
24
+ Lita.configure do |c|
25
+ c.redis[:host] = ENV['RSPEC_REDIS_HOST']
26
+ end
27
+ end
28
+ end
29
+ end
30
+
21
31
  Lita.version_3_compatibility_mode = false
22
32
 
23
33
  CodeClimate::TestReporter.start
@@ -27,7 +27,7 @@ describe Lita::Handlers::GithubIssues, lita_handler: true do
27
27
 
28
28
  let(:gh_org) { 'GapeDuty' }
29
29
  let(:gh_repo) { 'lita-test' }
30
- let(:github_issues) { Lita::Handlers::GithubIssues.new('robot') }
30
+ let(:github_issues) { Lita::Handlers::GithubIssues.new(robot) }
31
31
 
32
32
  describe '.validate_list_opts' do
33
33
  let(:good_opts) { { state: 'open', sort: 'updated', direction: 'asc' } }
@@ -51,7 +51,7 @@ describe Lita::Handlers::GithubOrg, lita_handler: true do
51
51
  it { is_expected.to route_command('gh org eject GrapeDuty theckman').to(:org_eject_user) }
52
52
  it { is_expected.to route_command('gh org eject theckman').to(:org_eject_user) }
53
53
 
54
- let(:github_org) { Lita::Handlers::GithubOrg.new('robot') }
54
+ let(:github_org) { Lita::Handlers::GithubOrg.new(robot) }
55
55
  let(:disabled_err) { 'Sorry, this function has either been disabled or not enabled in the config' }
56
56
 
57
57
  ####
@@ -33,7 +33,7 @@ describe Lita::Handlers::GithubPR, lita_handler: true do
33
33
  it { is_expected.to route_command('gh pr list GrapeDuty/lita-test').to(:pr_list) }
34
34
  it { is_expected.to route_command('gh pr list lita-test').to(:pr_list) }
35
35
 
36
- let(:github_pr) { Lita::Handlers::GithubPR.new('robot') }
36
+ let(:github_pr) { Lita::Handlers::GithubPR.new(robot) }
37
37
  let(:github_org) { 'GrapeDuty' }
38
38
  let(:github_repo) { 'lita-test' }
39
39
  let(:full_name) { "#{github_org}/#{github_repo}" }
@@ -22,6 +22,7 @@ describe Lita::Handlers::GithubRepo, lita_handler: true do
22
22
  it { is_expected.to route_command('gh repo new GrapeDuty/lita-test').to(:repo_create) }
23
23
  it { is_expected.to route_command('gh repo new lita-test').to(:repo_create) }
24
24
  it { is_expected.to route_command('gh repo new GrapeDuty/lita-test private:true team:heckman').to(:repo_create) }
25
+ it { is_expected.to route_command('gh repo new GrapeDuty/lita-test private:true team:heckman admin:anon').to(:repo_create) }
25
26
  it { is_expected.to route_command('gh repo new GrapeDuty/lita-test private:true randomunparseabletext ').to(:repo_create) }
26
27
 
27
28
  # repo_rename command routing
@@ -76,7 +77,7 @@ describe Lita::Handlers::GithubRepo, lita_handler: true do
76
77
  it { is_expected.to route_command('gh repo update description GrapeDuty/lita-test Some description here').to(:repo_update_router) }
77
78
  it { is_expected.to route_command('gh repo update description lita-test Some description here').to(:repo_update_router) }
78
79
 
79
- let(:github_repo) { Lita::Handlers::GithubRepo.new('robot') }
80
+ let(:github_repo) { Lita::Handlers::GithubRepo.new(robot) }
80
81
  let(:github_org) { 'GrapeDuty' }
81
82
  let(:disabled_reply) { 'Sorry, this function has either been disabled or not enabled in the config' }
82
83
 
@@ -361,6 +362,15 @@ describe Lita::Handlers::GithubRepo, lita_handler: true do
361
362
  .to eql 'Created GrapeDuty/lita-test: https://github.com/GrapeDuty/lita-test'
362
363
  end
363
364
  end
365
+
366
+ context 'when an admin user is given' do
367
+ it 'should add an admin to the repo after creating it' do
368
+ expect(github_repo).to receive(:add_admin_to_repo).with('GrapeDuty/lita-test', 'anon')
369
+ opts = { private: true, team_id: 1, organization: github_org, admin: 'anon'}
370
+ expect(github_repo.send(:create_repo, github_org, 'lita-test', opts))
371
+ .to eql 'Created GrapeDuty/lita-test: https://github.com/GrapeDuty/lita-test'
372
+ end
373
+ end
364
374
  end
365
375
 
366
376
  context 'when repo not created' do
@@ -17,7 +17,7 @@
17
17
  require 'spec_helper'
18
18
 
19
19
  describe Lita::Handlers::Github, lita_handler: true do
20
- let(:github) { Lita::Handlers::Github.new('robot') }
20
+ let(:github) { Lita::Handlers::Github.new(robot) }
21
21
 
22
22
  # status routing
23
23
  it { is_expected.to route_command('gh status').to(:status) }
@@ -33,9 +33,9 @@ describe Lita::Handlers::Github, lita_handler: true do
33
33
  it { is_expected.to route_command('gh whois theckman').to(:whois) }
34
34
  it { is_expected.to route_command('gh user theckman').to(:whois) }
35
35
 
36
- describe '#default_config' do
37
- it 'should set default team to nil' do
38
- expect(Lita.config.handlers.github.default_team_slug).to be_nil
36
+ describe '#config' do
37
+ it 'should set default teams to nil' do
38
+ expect(Lita.config.handlers.github.default_team_slugs).to be_nil
39
39
  end
40
40
 
41
41
  it 'should set repos to private by default' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Heckman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-10 00:00:00.000000000 Z
11
+ date: 2017-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -138,14 +138,14 @@ dependencies:
138
138
  name: lita
139
139
  requirement: !ruby/object:Gem::Requirement
140
140
  requirements:
141
- - - "~>"
141
+ - - ">="
142
142
  - !ruby/object:Gem::Version
143
143
  version: '4.0'
144
144
  type: :runtime
145
145
  prerelease: false
146
146
  version_requirements: !ruby/object:Gem::Requirement
147
147
  requirements:
148
- - - "~>"
148
+ - - ">="
149
149
  - !ruby/object:Gem::Version
150
150
  version: '4.0'
151
151
  - !ruby/object:Gem::Dependency
@@ -205,6 +205,7 @@ files:
205
205
  - LICENSE
206
206
  - README.md
207
207
  - Rakefile
208
+ - docker-compose.yml
208
209
  - lib/lita-github.rb
209
210
  - lib/lita-github/config.rb
210
211
  - lib/lita-github/filters.rb
@@ -220,6 +221,7 @@ files:
220
221
  - lib/lita/handlers/github_pr.rb
221
222
  - lib/lita/handlers/github_repo.rb
222
223
  - lita-github.gemspec
224
+ - lita_config.example.rb
223
225
  - locales/en.yml
224
226
  - spec/spec_helper.rb
225
227
  - spec/unit/lita-github/config_spec.rb
@@ -257,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
257
259
  version: '0'
258
260
  requirements: []
259
261
  rubyforge_project:
260
- rubygems_version: 2.4.5
262
+ rubygems_version: 2.2.0
261
263
  signing_key:
262
264
  specification_version: 4
263
265
  summary: GitHub repo/org management in Lita; handler not ready for production