tuya-ci-core 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/tuyacicore +0 -0
- data/lib/tuya/ci/core/config/config_gitlab.rb +2 -0
- data/lib/tuya/ci/core/config/config_modules.rb +109 -0
- data/lib/tuya/ci/core/config/odm_config_modules.rb +56 -0
- data/lib/tuya/ci/core/config.rb +21 -0
- data/lib/tuya/ci/core/dependencies/node/podfile_lock_analyse.rb +119 -0
- data/lib/tuya/ci/core/dependencies/node/podfile_lock_node.rb +39 -0
- data/lib/tuya/ci/core/dependencies/podfile_lock.rb +39 -0
- data/lib/tuya/ci/core/dependencies.rb +40 -0
- data/lib/tuya/ci/core/download.rb +11 -0
- data/lib/tuya/ci/core/executable.rb +2 -0
- data/lib/tuya/ci/core/git/gitlab/gitlab_odm.rb +143 -0
- data/lib/tuya/ci/core/git.rb +98 -33
- data/lib/tuya/ci/core/language_update.rb +17 -0
- data/lib/tuya/ci/core/odm_build.rb +246 -0
- data/lib/tuya/ci/core/podfile.rb +21 -3
- data/lib/tuya/ci/core/podspec.rb +39 -9
- data/lib/tuya/ci/core/repo_release_ci.rb +44 -0
- data/lib/tuya/ci/core/spec/odm/spec_odm.rb +48 -0
- data/lib/tuya/ci/core/spec/release/repo_release.rb +67 -0
- data/lib/tuya/ci/core/spec/release/repo_release_git.rb +27 -0
- data/lib/tuya/ci/core/template/template_configurator.rb +54 -15
- data/lib/tuya/ci/core/template.rb +10 -4
- data/lib/tuya/ci/core/util/file.rb +39 -0
- data/lib/tuya/ci/core/version.rb +1 -1
- data/lib/tuya/ci/core.rb +28 -2
- metadata +32 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c318fd664d9d6a7dd4f535615ec6172e638c3a2
|
4
|
+
data.tar.gz: 8e1005fc9d1ee413438a0ddd0483d066e26cdc82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7e3dd4eb3ec40f61eb7d2669a5ccca253783d054c50fe87de7c33564beb52444b5af009fc444dbc930ccd8e200e93b60e79d986ee3c893115cc9b4afd3f8621
|
7
|
+
data.tar.gz: 7b8be9fa7634b4a53cd0c73dc5ef0bb31312d0fef7080135503565262658f849f11a1cf455b3ef928d0aa1754048bf61662fd726f75bbbfa10c0d5080373348a
|
data/bin/tuyacicore
CHANGED
File without changes
|
@@ -0,0 +1,109 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
module TYCiCore
|
3
|
+
class ConfigModules
|
4
|
+
|
5
|
+
attr_accessor :config_path, :advance_fields, :pod_path
|
6
|
+
|
7
|
+
def initialize(config_path="./config_modules.json", advance_fields="{}", pod_path="./Pods/")
|
8
|
+
@config_path = config_path
|
9
|
+
@advance_fields = advance_fields
|
10
|
+
@pod_path = pod_path
|
11
|
+
end
|
12
|
+
|
13
|
+
def config_hash
|
14
|
+
content = File.read @config_path
|
15
|
+
hash = JSON content
|
16
|
+
hash
|
17
|
+
end
|
18
|
+
|
19
|
+
def modules_in_pods
|
20
|
+
result = []
|
21
|
+
pod_directories = Dir["#{@pod_path}*"].reject{|o| not File.directory?(o)}
|
22
|
+
pod_directories.each do |folder|
|
23
|
+
name = folder.gsub(/\s+/,'').split('/')[-1]
|
24
|
+
if module?(name) && name!="Target Support Files"
|
25
|
+
result.push(name)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
def setup_modules
|
32
|
+
|
33
|
+
puts "Setup #{@config_path} at #{@pod_path}".green
|
34
|
+
|
35
|
+
modules = modules_in_pods
|
36
|
+
|
37
|
+
advance_json = JSON.parse(@advance_fields)
|
38
|
+
advance_json["modules"] = modules
|
39
|
+
|
40
|
+
advance_json_pretty = JSON.pretty_generate(advance_json)
|
41
|
+
fh = File.new(@config_path, "w")
|
42
|
+
fh.puts advance_json_pretty
|
43
|
+
fh.close
|
44
|
+
end
|
45
|
+
|
46
|
+
def module?(name)
|
47
|
+
# find_command = "find #{pod_path} -iname #{name}Impl.h"
|
48
|
+
# # puts("find_command is #{find_command}")
|
49
|
+
# find_command_result = Action.sh find_command
|
50
|
+
# # puts("find_command_result is #{find_command_result}")
|
51
|
+
# if find_command_result.length > 0
|
52
|
+
# return true
|
53
|
+
# else
|
54
|
+
# return module_lib?(name)
|
55
|
+
# end
|
56
|
+
commands = %W(#{pod_path} -iname #{name}Impl.h)
|
57
|
+
result = EXE.exe('find', commands)
|
58
|
+
|
59
|
+
if result.length > 0
|
60
|
+
true
|
61
|
+
else
|
62
|
+
module_lib?(name)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def module_lib?(name)
|
67
|
+
|
68
|
+
puts "Name is #{name}".green
|
69
|
+
|
70
|
+
lib_path = "#{@pod_path}#{name}/#{name}*/lib#{name}.a"
|
71
|
+
|
72
|
+
puts "File_path is #{lib_path}".yellow
|
73
|
+
|
74
|
+
libs_path_result = Dir.glob(lib_path)
|
75
|
+
|
76
|
+
puts("The path is#{libs_path_result}")
|
77
|
+
|
78
|
+
if libs_path_result.length > 0
|
79
|
+
|
80
|
+
file_path = libs_path_result[0]
|
81
|
+
# find_command = "nm -gU #{file_path} | grep '_OBJC_CLASS_\\$_#{name}Impl'"
|
82
|
+
#
|
83
|
+
exists_impl = true
|
84
|
+
# find_command_result = Action.sh(
|
85
|
+
# find_command,
|
86
|
+
# error_callback: ->(result) {
|
87
|
+
# exists_impl = false
|
88
|
+
# }
|
89
|
+
# )
|
90
|
+
|
91
|
+
# TODO exist?
|
92
|
+
commands = %W(-gU #{file_path} | grep '_OBJC_CLASS_\\$_#{name}Impl')
|
93
|
+
|
94
|
+
find_result = EXE.exe('nm', commands)
|
95
|
+
|
96
|
+
if exists_impl && !find_result.empty?
|
97
|
+
puts "Static lib #{name} has #{name}mpl".green
|
98
|
+
true
|
99
|
+
else
|
100
|
+
puts "Static lib #{name} can not find #{name}mpl".red
|
101
|
+
false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
false
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'tuya/ci/core/config/config_modules'
|
2
|
+
|
3
|
+
module TYCiCore
|
4
|
+
class ODMConfigModules < ConfigModules
|
5
|
+
|
6
|
+
attr_accessor :content
|
7
|
+
|
8
|
+
def initialize(config_path="./config_modules.json", pod_path="./Pods/")
|
9
|
+
@config_path = config_path
|
10
|
+
@pod_path = pod_path
|
11
|
+
@content = config_hash
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_mix(key, value)
|
15
|
+
mix = @content["mixMap"]
|
16
|
+
if mix.nil? || mix.empty?
|
17
|
+
mix = Hash[key => value]
|
18
|
+
else
|
19
|
+
mix[key]=value
|
20
|
+
end
|
21
|
+
@content["mixMap"]=mix
|
22
|
+
end
|
23
|
+
|
24
|
+
# def add_mix(mixHash)
|
25
|
+
# mix = @content["mixMap"]
|
26
|
+
# if mix.nil? || mix.empty?
|
27
|
+
# mix = mixHash
|
28
|
+
# else
|
29
|
+
# mix = mix.merge(mixHash)
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
|
33
|
+
def remove_mix(key)
|
34
|
+
@content["mixMap"].delete(key)
|
35
|
+
end
|
36
|
+
|
37
|
+
def update_config(key, value)
|
38
|
+
@content[key]=value
|
39
|
+
end
|
40
|
+
|
41
|
+
def setup_modules # 根据 pod目录生成 modules
|
42
|
+
puts "ODM Setup #{@config_path} at #{@pod_path}".green
|
43
|
+
|
44
|
+
modules = modules_in_pods
|
45
|
+
|
46
|
+
@content["modules"] = modules
|
47
|
+
end
|
48
|
+
|
49
|
+
def save(target=@config_path)
|
50
|
+
file_content = JSON.pretty_generate(@content)
|
51
|
+
fh = File.new(target, "w")
|
52
|
+
fh << file_content
|
53
|
+
fh.close
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module TYCiCore
|
2
|
+
class Config
|
3
|
+
def initialize(path)
|
4
|
+
raise "Can not find config at : #{path}" unless File.exist? path
|
5
|
+
@content = File.read path
|
6
|
+
@content_json = JSON @content
|
7
|
+
end
|
8
|
+
|
9
|
+
def value(key)
|
10
|
+
eval("@content_json" << key.split('.').map { |i| "[\"" + i + "\"]" }.join)
|
11
|
+
end
|
12
|
+
|
13
|
+
def method_missing(name)
|
14
|
+
if @content_json.has_key? name.to_s
|
15
|
+
@content_json[name.to_s]
|
16
|
+
else
|
17
|
+
super.method_missing name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
module TYCiCore
|
2
|
+
class TYPodAnalyse
|
3
|
+
attr_accessor :pods_hash, :pod_nodes_hash, :podfile_lock
|
4
|
+
def initialize(podfile_lock)
|
5
|
+
@pods_hash = Hash.new
|
6
|
+
@pod_nodes_hash = Hash.new
|
7
|
+
@podfile_lock = podfile_lock
|
8
|
+
podfile_lock.all_pods.each do |pod|
|
9
|
+
pod_item = TYPodItem.new pod
|
10
|
+
pod_item.dependency_list = @podfile_lock.pods[pod]
|
11
|
+
@pods_hash[pod] = pod_item
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def sorted_pods
|
16
|
+
trees
|
17
|
+
dep_tree
|
18
|
+
diplomatic_pods
|
19
|
+
end
|
20
|
+
|
21
|
+
def trees
|
22
|
+
@podfile_lock.all_pods.each do |pod_name|
|
23
|
+
pod_item = @pods_hash[pod_name]
|
24
|
+
unless pod_item.dependency
|
25
|
+
@pod_nodes_hash[pod_name] = tree_build TYPodNode.new, pod_item
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def tree_build(root_node, root_item)
|
31
|
+
root_node.add_pod_item root_item
|
32
|
+
root_item.dependency = true
|
33
|
+
if root_item.dependency_list
|
34
|
+
root_item.dependency_list.each do |item|
|
35
|
+
child_item = @pods_hash[item]
|
36
|
+
if child_item
|
37
|
+
child_node = @pod_nodes_hash[child_item.name]
|
38
|
+
if child_node
|
39
|
+
unless child_node.parent
|
40
|
+
@pod_nodes_hash.delete child_node.pod_item.name
|
41
|
+
root_node.join_node child_node
|
42
|
+
end
|
43
|
+
else
|
44
|
+
child_node = TYPodNode.new
|
45
|
+
root_node.join_node tree_build(child_node, child_item)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
root_node
|
51
|
+
end
|
52
|
+
|
53
|
+
def dep_tree
|
54
|
+
@pods_hash.keys.each do |name|
|
55
|
+
child_node = @pod_nodes_hash[name]
|
56
|
+
dep_node child_node
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def dep_node(node)
|
61
|
+
if !node || !node.nodes || node.nodes.size == 0
|
62
|
+
return 0
|
63
|
+
end
|
64
|
+
dep = []
|
65
|
+
node.nodes.keys.each do |name|
|
66
|
+
child_node = node.nodes[name]
|
67
|
+
dep.push((dep_node child_node) + 1)
|
68
|
+
end
|
69
|
+
max_dep = dep.max
|
70
|
+
node.node_dep = max_dep
|
71
|
+
node.node_dep
|
72
|
+
end
|
73
|
+
|
74
|
+
def sort_nodes
|
75
|
+
@pod_nodes_hash.sort_by do |k, v|
|
76
|
+
v.node_dep
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def diplomatic_pods
|
81
|
+
sort_nodes
|
82
|
+
pods_ = []
|
83
|
+
@pod_nodes_hash.keys.each do |key|
|
84
|
+
pods_ << (level_order_node @pod_nodes_hash[key])
|
85
|
+
end
|
86
|
+
pods_hash = Hash.new
|
87
|
+
pods_.each do |pods|
|
88
|
+
order = pods_hash[pods.size]
|
89
|
+
if order
|
90
|
+
order.pods = order.pods + pods
|
91
|
+
else
|
92
|
+
pods_hash[pods.size] = TYPodOrder.new pods.size, pods
|
93
|
+
end
|
94
|
+
end
|
95
|
+
pods_keys_sort = pods_hash.keys.sort.reverse
|
96
|
+
result = []
|
97
|
+
pods_keys_sort.each do |key|
|
98
|
+
pods = pods_hash[key].pods
|
99
|
+
result += pods
|
100
|
+
end
|
101
|
+
result.uniq
|
102
|
+
end
|
103
|
+
|
104
|
+
def level_order_node(node)
|
105
|
+
result = []
|
106
|
+
queue = []
|
107
|
+
queue.push node
|
108
|
+
while queue.size > 0 do
|
109
|
+
target_node = queue[0]
|
110
|
+
queue.delete_at 0
|
111
|
+
result.insert 0,target_node.pod_item.name
|
112
|
+
target_node.nodes.keys.each do |key_node|
|
113
|
+
queue.push target_node.nodes[key_node] if target_node.nodes[key_node]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
result.uniq
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module TYCiCore
|
2
|
+
class TYPodNode
|
3
|
+
|
4
|
+
attr_accessor :node_dep, :parent, :nodes, :pod_item
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@node_dep = 0
|
8
|
+
@parent = ''
|
9
|
+
@nodes = Hash.new
|
10
|
+
@pod_item = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def join_node(node)
|
14
|
+
node.parent = @pod_item.name
|
15
|
+
nodes[node.pod_item.name] = node
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_pod_item(item)
|
19
|
+
@pod_item = item if item
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class TYPodItem
|
24
|
+
attr_accessor :name, :dependency, :dependency_list
|
25
|
+
def initialize(name)
|
26
|
+
@name = name
|
27
|
+
@dependency = false
|
28
|
+
@dependency_list = nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class TYPodOrder
|
33
|
+
attr_accessor :pods, :group
|
34
|
+
def initialize(order, pods)
|
35
|
+
@group = order
|
36
|
+
@pods = pods
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module TYCiCore
|
2
|
+
|
3
|
+
class TYPodFileLock
|
4
|
+
attr_accessor :all_pods, :pods
|
5
|
+
|
6
|
+
def initialize(text)
|
7
|
+
all_pods_temp = text.scan /^\s+(\w+-*\w+): [0-9a-zA-Z]*$/
|
8
|
+
|
9
|
+
@all_pods = []
|
10
|
+
|
11
|
+
all_pods_temp.each do |pod|
|
12
|
+
@all_pods << pod[0]
|
13
|
+
end
|
14
|
+
|
15
|
+
@pods = Hash.new
|
16
|
+
@all_pods.each do |pod|
|
17
|
+
pod_dependencies = []
|
18
|
+
pod_scan = text.scan /^\s{2}-\s+#{pod}\s+.*:((\n\s{4}-\s+.*)*)/
|
19
|
+
pod_scan.each do |pod_item|
|
20
|
+
if pod_item.size > 0
|
21
|
+
item = pod_item[0]
|
22
|
+
item.gsub!(/\n/, '')
|
23
|
+
item.split(' - ').each do |item_content|
|
24
|
+
if item_content != ""
|
25
|
+
item_content_clean = item_content.gsub!(/\s\(.*\s.*\)/, '')
|
26
|
+
if item_content_clean
|
27
|
+
pod_dependencies.push item_content_clean
|
28
|
+
else
|
29
|
+
pod_dependencies.push item_content
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
@pods[pod] = pod_dependencies if pod_dependencies.size > 0
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module TYCiCore
|
2
|
+
class TYDependencies
|
3
|
+
|
4
|
+
attr_accessor :path, :content
|
5
|
+
|
6
|
+
def initialize(path)
|
7
|
+
@path = path
|
8
|
+
@content = ''
|
9
|
+
end
|
10
|
+
|
11
|
+
def sort_pods(pods)
|
12
|
+
if File.exist? @path
|
13
|
+
lock_pods = analysis
|
14
|
+
pods_hash = Hash.new
|
15
|
+
pods.each do |pod|
|
16
|
+
pods_hash[pod["name"]] = pod
|
17
|
+
end
|
18
|
+
result = []
|
19
|
+
lock_pods.each do |lock_pod|
|
20
|
+
if pods_hash.keys.include? lock_pod
|
21
|
+
result.push pods_hash[lock_pod]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
result
|
25
|
+
else
|
26
|
+
puts "Can not find file: #{@path}".red
|
27
|
+
pods
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def analysis
|
32
|
+
content = File.read @path
|
33
|
+
|
34
|
+
podfile_lock = TYPodFileLock.new content
|
35
|
+
|
36
|
+
analysis = TYPodAnalyse.new podfile_lock
|
37
|
+
analysis.sorted_pods
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module TYCiCore
|
2
|
+
class TYDownload
|
3
|
+
def self.download(url, name, path='./')
|
4
|
+
puts "Start download : #{url}"
|
5
|
+
data=open(url){|f|f.read}
|
6
|
+
puts "Saving #{path}#{name}"
|
7
|
+
open("#{path}#{name}","wb"){|f|f.write(data)}
|
8
|
+
FileUtils.pwd << "/#{name}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
module TYCiCore
|
2
|
+
class GitlabODM
|
3
|
+
|
4
|
+
attr_accessor :config, :name, :path, :visibility
|
5
|
+
|
6
|
+
def initialize (config, path, visibility, username, password, email)
|
7
|
+
@config = config
|
8
|
+
@path = path
|
9
|
+
@visibility = visibility
|
10
|
+
|
11
|
+
@username = username
|
12
|
+
@password = password
|
13
|
+
@email = email
|
14
|
+
|
15
|
+
@group_id = ""
|
16
|
+
@user_id = ""
|
17
|
+
|
18
|
+
@hook_project_ios = ""
|
19
|
+
@hook_project_android = ""
|
20
|
+
@hook_project_id_ios = ""
|
21
|
+
@hook_project_id_android = ""
|
22
|
+
@hook_project_url_ios = ""
|
23
|
+
@hook_project_url_android = ""
|
24
|
+
end
|
25
|
+
|
26
|
+
def odm
|
27
|
+
|
28
|
+
if create_group
|
29
|
+
if create_user
|
30
|
+
if add_user_group
|
31
|
+
add_project_group
|
32
|
+
get_project_id
|
33
|
+
add_project_hook @hook_project_id_ios, @config.hook_ios
|
34
|
+
add_project_hook @hook_project_id_android, @config.hook_android
|
35
|
+
|
36
|
+
TYCiCore::Git.git_delete_temp_path @hook_project_ios
|
37
|
+
TYCiCore::Git.git_delete_temp_path @hook_project_android
|
38
|
+
|
39
|
+
puts "odm create gitlab group json is:[start:success:end]".green
|
40
|
+
else
|
41
|
+
puts 'ODM add user to group failed'.red
|
42
|
+
puts "odm create gitlab group json is:[start:failed:end]".red
|
43
|
+
end
|
44
|
+
else
|
45
|
+
puts 'ODM create user failed'.red
|
46
|
+
puts "odm create gitlab group json is:[start:failed:end]".red
|
47
|
+
return false
|
48
|
+
end
|
49
|
+
else
|
50
|
+
puts 'ODM create group failed'.red
|
51
|
+
puts "odm create gitlab group json is:[start:failed:end]".red
|
52
|
+
return false
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
def create_group
|
58
|
+
puts 'ODM create group ...'.green
|
59
|
+
result = `curl #{@config.host}/api/#{@config.version}/groups -X POST -d "private_token=#{@config.private_token}&name=#{@path}&path=#{@path}&visibility=#{@visibility}"`
|
60
|
+
json = JSON result
|
61
|
+
@group_id = json["id"]
|
62
|
+
|
63
|
+
result_bool = not_empty?(json["name"]) && not_empty?(json["web_url"])
|
64
|
+
puts json unless result_bool
|
65
|
+
result_bool
|
66
|
+
end
|
67
|
+
|
68
|
+
def create_user
|
69
|
+
puts 'ODM create user ...'.green
|
70
|
+
result = `curl #{@config.host}/api/v4/users?private_token=#{@config.private_token} -X POST -d "name=#{@username}&username=#{@username}&password=#{@password}&email=#{@email}&skip_confirmation=true"`
|
71
|
+
|
72
|
+
json = JSON result
|
73
|
+
@user_id = json["id"]
|
74
|
+
|
75
|
+
result_bool = not_empty?(json["state"]) && not_empty?(json["created_at"])
|
76
|
+
puts json unless result_bool
|
77
|
+
result_bool
|
78
|
+
end
|
79
|
+
|
80
|
+
def add_user_group
|
81
|
+
puts 'ODM add user to group ...'.green
|
82
|
+
result = `curl #{@config.host}/api/v4/groups/#{@group_id}/members?private_token=#{@config.private_token} -X POST -d "id=#{@group_id}&user_id=#{@user_id}&access_level=50"`
|
83
|
+
json = JSON result
|
84
|
+
|
85
|
+
result_bool = not_empty?(json["state"]) && not_empty?(json["username"])
|
86
|
+
puts json unless result_bool
|
87
|
+
result_bool
|
88
|
+
end
|
89
|
+
|
90
|
+
def add_project_group
|
91
|
+
|
92
|
+
@hook_project_android = "#{path}Repository"
|
93
|
+
@hook_project_ios = "#{path}Specs"
|
94
|
+
|
95
|
+
@hook_project_url_ios = "#{@config.host}/#{path}/#{@hook_project_ios}.git"
|
96
|
+
@hook_project_url_android = "#{@config.host}/#{path}/#{@hook_project_android}.git"
|
97
|
+
|
98
|
+
TYCiCore::Git.git_create_empty_repos @hook_project_ios, @hook_project_url_ios
|
99
|
+
TYCiCore::Git.git_create_empty_repos @hook_project_android, @hook_project_url_android
|
100
|
+
end
|
101
|
+
|
102
|
+
def get_project_id
|
103
|
+
puts 'ODM get project id in group'.green
|
104
|
+
|
105
|
+
result = `curl #{@config.host}/api/v4/groups/#{@group_id}/projects?private_token=#{@config.private_token}&id=#{@group_id}`
|
106
|
+
|
107
|
+
json = JSON result
|
108
|
+
|
109
|
+
get_project_id_temp json, 0
|
110
|
+
get_project_id_temp json, 1
|
111
|
+
|
112
|
+
puts "Project iOS id is: #{@hook_project_id_ios}, android id is #{@hook_project_id_android}"
|
113
|
+
end
|
114
|
+
|
115
|
+
def get_project_id_temp(json, index)
|
116
|
+
temp_name = json[index]['name']
|
117
|
+
temp_id = json[index]['id']
|
118
|
+
if temp_name == @hook_project_android
|
119
|
+
@hook_project_id_android = temp_id
|
120
|
+
else
|
121
|
+
@hook_project_id_ios = temp_id
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def add_project_hook(id, url)
|
126
|
+
puts "ODM add hook url:#{url} to project #{id}".green
|
127
|
+
result = `curl #{@config.host}/api/v4/projects/#{id}/hooks?private_token=#{@config.private_token} -X POST -d "id=#{id}&url=#{url}&push_events=true"`
|
128
|
+
json = JSON result
|
129
|
+
puts json
|
130
|
+
end
|
131
|
+
|
132
|
+
def not_empty?(str)
|
133
|
+
if str.nil?
|
134
|
+
return false
|
135
|
+
else
|
136
|
+
if str.empty?
|
137
|
+
return false
|
138
|
+
end
|
139
|
+
return true
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|