gitomator 0.1.1

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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +57 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +13 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +194 -0
  8. data/Rakefile +9 -0
  9. data/bin/gitomator-clone-repos +21 -0
  10. data/bin/gitomator-console +19 -0
  11. data/bin/gitomator-disable-ci +24 -0
  12. data/bin/gitomator-enable-ci +24 -0
  13. data/bin/gitomator-make-access-permissions +72 -0
  14. data/bin/gitomator-make-repos +45 -0
  15. data/bin/gitomator-make-teams +20 -0
  16. data/bin/setup +8 -0
  17. data/gitomator.gemspec +28 -0
  18. data/lib/gitomator/console.rb +54 -0
  19. data/lib/gitomator/context.rb +132 -0
  20. data/lib/gitomator/exceptions.rb +21 -0
  21. data/lib/gitomator/service/ci.rb +35 -0
  22. data/lib/gitomator/service/git.rb +48 -0
  23. data/lib/gitomator/service/hosting.rb +204 -0
  24. data/lib/gitomator/service/tagging.rb +99 -0
  25. data/lib/gitomator/service.rb +64 -0
  26. data/lib/gitomator/service_provider/git_shell.rb +68 -0
  27. data/lib/gitomator/service_provider/hosting_local.rb +103 -0
  28. data/lib/gitomator/task/base_repos_task.rb +88 -0
  29. data/lib/gitomator/task/clone_repos.rb +61 -0
  30. data/lib/gitomator/task/config/repos_config.rb +117 -0
  31. data/lib/gitomator/task/config/team_config.rb +57 -0
  32. data/lib/gitomator/task/enable_disable_ci.rb +56 -0
  33. data/lib/gitomator/task/make_repos.rb +86 -0
  34. data/lib/gitomator/task/setup_team.rb +63 -0
  35. data/lib/gitomator/task/update_repo_access_permissions.rb +42 -0
  36. data/lib/gitomator/task.rb +48 -0
  37. data/lib/gitomator/util/repo/name_resolver.rb +68 -0
  38. data/lib/gitomator/util/script_util.rb +69 -0
  39. data/lib/gitomator/version.rb +3 -0
  40. data/lib/gitomator.rb +61 -0
  41. metadata +173 -0
@@ -0,0 +1,48 @@
1
+ require 'gitomator'
2
+
3
+
4
+ module Gitomator
5
+ class BaseTask
6
+
7
+ attr_accessor :logger
8
+ attr_reader :context
9
+
10
+ #
11
+ # @param context [Gitomator::Context]
12
+ #
13
+ def initialize(context)
14
+ @context = context
15
+ end
16
+
17
+
18
+ #
19
+ # Subclasses should override this method
20
+ #
21
+ def run
22
+ raise "Unimplemented"
23
+ end
24
+
25
+
26
+ def logger
27
+ @logger ||= Gitomator::Util::create_logger()
28
+ end
29
+
30
+ def git
31
+ context.git
32
+ end
33
+
34
+ def hosting
35
+ context.hosting
36
+ end
37
+
38
+ def tagging
39
+ context.tagging
40
+ end
41
+
42
+ def ci
43
+ context.ci
44
+ end
45
+
46
+
47
+ end
48
+ end
@@ -0,0 +1,68 @@
1
+ module Gitomator
2
+ module Util
3
+ module Repo
4
+
5
+ #
6
+ # Convenience class dealing with repo names of the format
7
+ # `NAMESPACE/REPO:BRANCH`.
8
+ #
9
+ class NameResolver
10
+
11
+ attr_reader :default_namespace
12
+
13
+ def initialize(default_namespace=nil)
14
+ @default_namespace = default_namespace
15
+ end
16
+
17
+
18
+ def full_name(repo_name)
19
+ namespace, name = tokenize(repo_name)
20
+ if namespace.nil?
21
+ return name
22
+ else
23
+ return "#{namespace}/#{name}"
24
+ end
25
+ end
26
+
27
+ def namespace(name)
28
+ tokenize(name)[0]
29
+ end
30
+
31
+ def name_only(name)
32
+ tokenize(name)[1]
33
+ end
34
+
35
+ def branch(name)
36
+ tokenize(name)[2]
37
+ end
38
+
39
+ #
40
+ # Given a string of the format "namespace/name:branch", return an array
41
+ # with three strings:
42
+ # 1. Namespace
43
+ # 2. Repo-name
44
+ # 3. branch
45
+ #
46
+ # If the namespace is missing, self's default namespace will be used.
47
+ #
48
+ # @param name [String] - The name of the repo in the format "namespace/name:branch".
49
+ #
50
+ def tokenize(name)
51
+ m = /^([\w-]+\/)?([\w-]+)(\:[\w-]+)?$/.match(name)
52
+
53
+ raise "Invalid repo name, '#{name}'." if m.nil?
54
+
55
+ namespace = m[1] || @default_namespace
56
+ namespace = namespace.gsub('/', '') unless namespace.nil?
57
+ repo = m[2]
58
+ branch = m[3]
59
+ branch = branch.gsub(':', '') unless branch.nil?
60
+
61
+ return [namespace, repo, branch]
62
+ end
63
+
64
+
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,69 @@
1
+ require 'trollop'
2
+ require 'gitomator/version'
3
+
4
+
5
+ module Gitomator
6
+ module ScriptUtil
7
+
8
+ DEFAULT_CONTEXT_ENV_VAR_NAME = 'GITOMATOR_CONTEXT'
9
+
10
+ def self.default_context_file
11
+ return ENV[DEFAULT_CONTEXT_ENV_VAR_NAME] || File.expand_path('~/.gitomator')
12
+ end
13
+
14
+ #---------------------------------------------------------------------------
15
+
16
+ class DefaultOptionParser < Trollop::Parser
17
+
18
+ def initialize(help_text)
19
+ super()
20
+ banner "#{help_text}\nOptions:"
21
+ version "Gitomator #{Gitomator::VERSION} (c) 2016 Joey Freund"
22
+
23
+ context_description = "YAML configuration for various service providers (e.g. GitHub hosting, or Travis CI)."
24
+ unless ENV[DEFAULT_CONTEXT_ENV_VAR_NAME]
25
+ context_description += "\nYou can override the default configuration file by setting the #{DEFAULT_CONTEXT_ENV_VAR_NAME} environment variable."
26
+ end
27
+
28
+ opt :context,
29
+ context_description ,
30
+ :type => :string,
31
+ :default => ScriptUtil::default_context_file
32
+ end
33
+
34
+
35
+ def parse(args)
36
+ return { :context => ScriptUtil::default_context_file }.merge(
37
+ Trollop::with_standard_exception_handling(self) { super(args) }
38
+ )
39
+ end
40
+
41
+ end
42
+
43
+ #---------------------------------------------------------------------------
44
+
45
+ #
46
+ # @param task [Gitomator::Task::*] An object with a run() method.
47
+ #
48
+ def self.run_task(task)
49
+ begin
50
+ task.run
51
+ rescue => e
52
+ abort "ERROR: #{e}.\n\n#{e.backtrace.join("\n\t")}"
53
+ end
54
+ end
55
+
56
+ #
57
+ # @param tasks [Array<Gitomator::Task::*>]
58
+ #
59
+ def self.run_tasks(tasks)
60
+ begin
61
+ tasks.each { |task| task.run }
62
+ rescue => e
63
+ abort "ERROR: #{e}.\n\n#{e.backtrace.join("\n\t")}"
64
+ end
65
+ end
66
+
67
+
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ module Gitomator
2
+ VERSION = "0.1.1"
3
+ end
data/lib/gitomator.rb ADDED
@@ -0,0 +1,61 @@
1
+ require "gitomator/version"
2
+
3
+ module Gitomator
4
+
5
+ module Util
6
+
7
+
8
+
9
+ #
10
+ # Given a config file (path to file, or an object that responds to :read),
11
+ # do that ERB+YAML thing, and return a Hash.
12
+ #
13
+ # @param config [String/File]
14
+ # @return Hash
15
+ #
16
+ def self.load_config(config)
17
+ require 'erb'
18
+ require 'yaml'
19
+
20
+ if config.respond_to? :read
21
+ YAML::load(ERB.new(config.read).result)
22
+ else
23
+ YAML::load(ERB.new(File.read(config)).result)
24
+ end
25
+ end
26
+
27
+
28
+
29
+ def self.create_logger(config = {})
30
+ gem 'logger'; require 'logger'
31
+
32
+ if config.nil?
33
+ return Logger.new(STDOUT)
34
+ end
35
+
36
+ output = STDOUT
37
+ case config['output']
38
+ when nil
39
+ output = STDOUT
40
+ when 'STDOUT'
41
+ output = STDOUT
42
+ when 'STDERR'
43
+ output = STDERR
44
+ when 'NULL' || 'OFF' # Write the dev/null (i.e. logging is off)
45
+ output = File.open(File::NULL, "w")
46
+ else
47
+ output = File.open(config['output'], "a")
48
+ end
49
+
50
+ lgr = Logger.new(output)
51
+ if config['level']
52
+ lgr.level = Logger.const_get(config['level'])
53
+ end
54
+ return lgr
55
+ end
56
+
57
+
58
+
59
+ end
60
+
61
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitomator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Joey Freund
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: trollop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.1'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 2.1.2
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '2.1'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 2.1.2
75
+ - !ruby/object:Gem::Dependency
76
+ name: logger
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.2'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 1.2.8
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '1.2'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 1.2.8
95
+ description:
96
+ email:
97
+ - joeyfreund@gmail.com
98
+ executables:
99
+ - gitomator-clone-repos
100
+ - gitomator-console
101
+ - gitomator-disable-ci
102
+ - gitomator-enable-ci
103
+ - gitomator-make-access-permissions
104
+ - gitomator-make-repos
105
+ - gitomator-make-teams
106
+ - setup
107
+ extensions: []
108
+ extra_rdoc_files: []
109
+ files:
110
+ - ".gitignore"
111
+ - ".ruby-gemset"
112
+ - ".ruby-version"
113
+ - Gemfile
114
+ - LICENSE.txt
115
+ - README.md
116
+ - Rakefile
117
+ - bin/gitomator-clone-repos
118
+ - bin/gitomator-console
119
+ - bin/gitomator-disable-ci
120
+ - bin/gitomator-enable-ci
121
+ - bin/gitomator-make-access-permissions
122
+ - bin/gitomator-make-repos
123
+ - bin/gitomator-make-teams
124
+ - bin/setup
125
+ - gitomator.gemspec
126
+ - lib/gitomator.rb
127
+ - lib/gitomator/console.rb
128
+ - lib/gitomator/context.rb
129
+ - lib/gitomator/exceptions.rb
130
+ - lib/gitomator/service.rb
131
+ - lib/gitomator/service/ci.rb
132
+ - lib/gitomator/service/git.rb
133
+ - lib/gitomator/service/hosting.rb
134
+ - lib/gitomator/service/tagging.rb
135
+ - lib/gitomator/service_provider/git_shell.rb
136
+ - lib/gitomator/service_provider/hosting_local.rb
137
+ - lib/gitomator/task.rb
138
+ - lib/gitomator/task/base_repos_task.rb
139
+ - lib/gitomator/task/clone_repos.rb
140
+ - lib/gitomator/task/config/repos_config.rb
141
+ - lib/gitomator/task/config/team_config.rb
142
+ - lib/gitomator/task/enable_disable_ci.rb
143
+ - lib/gitomator/task/make_repos.rb
144
+ - lib/gitomator/task/setup_team.rb
145
+ - lib/gitomator/task/update_repo_access_permissions.rb
146
+ - lib/gitomator/util/repo/name_resolver.rb
147
+ - lib/gitomator/util/script_util.rb
148
+ - lib/gitomator/version.rb
149
+ homepage: https://github.com/gitomator/gitomator
150
+ licenses:
151
+ - MIT
152
+ metadata: {}
153
+ post_install_message:
154
+ rdoc_options: []
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ required_rubygems_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ requirements: []
168
+ rubyforge_project:
169
+ rubygems_version: 2.6.2
170
+ signing_key:
171
+ specification_version: 4
172
+ summary: Automation tools for Git repo organizations.
173
+ test_files: []