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.
- checksums.yaml +7 -0
- data/.gitignore +57 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +21 -0
- data/README.md +194 -0
- data/Rakefile +9 -0
- data/bin/gitomator-clone-repos +21 -0
- data/bin/gitomator-console +19 -0
- data/bin/gitomator-disable-ci +24 -0
- data/bin/gitomator-enable-ci +24 -0
- data/bin/gitomator-make-access-permissions +72 -0
- data/bin/gitomator-make-repos +45 -0
- data/bin/gitomator-make-teams +20 -0
- data/bin/setup +8 -0
- data/gitomator.gemspec +28 -0
- data/lib/gitomator/console.rb +54 -0
- data/lib/gitomator/context.rb +132 -0
- data/lib/gitomator/exceptions.rb +21 -0
- data/lib/gitomator/service/ci.rb +35 -0
- data/lib/gitomator/service/git.rb +48 -0
- data/lib/gitomator/service/hosting.rb +204 -0
- data/lib/gitomator/service/tagging.rb +99 -0
- data/lib/gitomator/service.rb +64 -0
- data/lib/gitomator/service_provider/git_shell.rb +68 -0
- data/lib/gitomator/service_provider/hosting_local.rb +103 -0
- data/lib/gitomator/task/base_repos_task.rb +88 -0
- data/lib/gitomator/task/clone_repos.rb +61 -0
- data/lib/gitomator/task/config/repos_config.rb +117 -0
- data/lib/gitomator/task/config/team_config.rb +57 -0
- data/lib/gitomator/task/enable_disable_ci.rb +56 -0
- data/lib/gitomator/task/make_repos.rb +86 -0
- data/lib/gitomator/task/setup_team.rb +63 -0
- data/lib/gitomator/task/update_repo_access_permissions.rb +42 -0
- data/lib/gitomator/task.rb +48 -0
- data/lib/gitomator/util/repo/name_resolver.rb +68 -0
- data/lib/gitomator/util/script_util.rb +69 -0
- data/lib/gitomator/version.rb +3 -0
- data/lib/gitomator.rb +61 -0
- 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
|
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: []
|