cocoapods-dev-env 0.2.4 → 0.9.1

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
  SHA256:
3
- metadata.gz: 86ea3266601b7a7b150bcb8ebbdbd61244bb0047551856f28d36144a93ee2d9d
4
- data.tar.gz: 11281a84183572629f5d3291e44f95b30b06aee4a0a032b79beaede2d25f210a
3
+ metadata.gz: 7ca8013b453d1e257cce0f668f9d55b690728054807b87d80307d234e33bb651
4
+ data.tar.gz: 24604dcbcdef57ce2cf10a2a0e376e417e3eb3336664a8dbb086d299ba7822d8
5
5
  SHA512:
6
- metadata.gz: e29f5ea8412543bea24745770796baf459af98efdc84849112bd5be23be36d69a1f5e244b7cbcaea5218085ea41f84b5e994c2d31e6f36ca4472c0ea71787a5b
7
- data.tar.gz: a0eea3c7c4afcc3b0ff08c0486e925c26d9823a67f198cf57dc7f87a6f15b0efb426114b91a944f24968985344685c34de1cbadd2a689a144aaf2bd296189a37
6
+ metadata.gz: 650079c36c495a2a9384972b92a40ffc770031c4158914e54e1e7e69c45e2937b88a3080d5dbb7eaa13b9aaed248aea545cd6383acaef36613f82d684d3ea1d9
7
+ data.tar.gz: 7f30ffe0691428cc7b50ebbfb86c6b3d3d77ede2b6edd657fc3fb7d44b002cfff1735f65c095c3a518a2288760a85c515138a9a8e08d7ebed440740430e2749d
data/README.md CHANGED
@@ -54,6 +54,11 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
54
54
 
55
55
  Bug reports and pull requests are welcome on GitHub at https://github.com/YoudaoMobile/cocoapods-dev-env. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
56
56
 
57
+ 1. How to develop: put gem in your project and exec `bundle exec pod install`
58
+ 2. How to packagae: `rake build`
59
+ 3. How to release: `rake release` or `gem push ./pkg/cocoapods-dev-env-0.2.2.gem`
60
+
61
+
57
62
  ## License
58
63
 
59
64
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -1,7 +1,7 @@
1
1
  module Cocoapods
2
2
  module Dev
3
3
  module Env
4
- VERSION = "0.2.4"
4
+ VERSION = "0.9.1"
5
5
  end
6
6
  end
7
7
  end
@@ -1,6 +1,10 @@
1
1
  Pod::HooksManager.register('cocoapods-dev-env', :pre_install) do |installer|
2
2
  podfile = installer.podfile
3
3
  #puts installer.instance_variables
4
+ # forbidden submodule not cloned
5
+ `
6
+ git submodule update --init --recursive
7
+ `
4
8
  end
5
9
 
6
10
  Pod::HooksManager.register('cocoapods-dev-env', :post_install) do |installer|
@@ -16,6 +20,7 @@ module Pod
16
20
  def self.keyword
17
21
  :dev_env # 'dev'/'beta'/'release'
18
22
  end
23
+ puts "🎉 plugin cocoapods-dev-env loaded 🎉".green
19
24
  end
20
25
  class Podfile
21
26
  class TargetDefinition
@@ -46,7 +51,11 @@ class Podfile
46
51
  Dir.chdir(path)
47
52
  result = `git describe --abbrev=4 HEAD`
48
53
  Dir.chdir(currentDir)
49
- return result.include?(tag)
54
+ if result.include?(tag)
55
+ return true
56
+ else
57
+ return checkTagOrBranchIsEqalToHead(tag, path)
58
+ end
50
59
  end
51
60
 
52
61
  # 这个函数有问题有时候拿不到相同的commit id
@@ -60,13 +69,69 @@ class Podfile
60
69
  return (headCommitID.length > 0 && headCommitID == tagCommitID)
61
70
  end
62
71
 
72
+ def checkGitStatusAndPush(pod_name)
73
+ output = `git status -s`
74
+ puts output
75
+ if output.length == 0
76
+ output = `git status`
77
+ if output.include?("push")
78
+ ret = system("git push")
79
+ if ret != true
80
+ raise "💔 #{pod_name.yellow} push 失败"
81
+ end
82
+ end
83
+ else
84
+ raise "💔 #{pod_name.yellow} 有未提交的数据"
85
+ end
86
+ end
87
+
88
+ def addGitTagAndPush(tag, pod_name)
89
+ ret = system("git tag #{tag}")
90
+ if ret == true
91
+ ret = system("git push origin #{tag}")
92
+ if ret != true
93
+ raise "💔 #{pod_name.yellow} push tag 失败"
94
+ end
95
+ end
96
+ return ret
97
+ end
98
+
99
+ def inputNeedJumpForReson(str)
100
+ puts str
101
+ puts '是(Y), 否(N)'
102
+ input = STDIN.gets
103
+ if input[0,1] == "Y"
104
+ return true
105
+ else
106
+ return false
107
+ end
108
+ end
109
+
110
+ def getUserRepoAddress()
111
+ if podfile.sources.size == 0
112
+ raise "💔 发布release必须配置仓库的地址, e.g.: source 'https://github.com/CocoaPods/Specs.git'"
113
+ end
114
+ index = nil
115
+ begin
116
+ UI.puts "\n\n⌨️ 请输入要发布到的cocoapods仓库序号, 按回车确认: ".yellow
117
+ num = 1
118
+ podfile.sources.each do |source|
119
+ UI.puts "#{num.to_s.yellow}. #{source.green}"
120
+ num += 1
121
+ end
122
+ index = STDIN.gets.to_i - 1
123
+ end until (index >= 0 && index < podfile.sources.size)
124
+ source = podfile.sources[index]
125
+ return source
126
+ end
127
+
63
128
  ## --- option for setting using prebuild framework ---
64
129
  def parse_pod_dev_env(name, requirements)
65
130
  options = requirements.last
66
131
  pod_name = Specification.root_name(name)
67
132
  last_options = $processedPodsOptions[pod_name]
68
133
  if (last_options != nil)
69
- UI.puts "####### #{name} use last_options: #{last_options}"
134
+ UI.message "#{name.green} use last_options: #{last_options.to_s.green}"
70
135
  if options != nil && options.is_a?(Hash)
71
136
  requirements[requirements.length - 1] = last_options
72
137
  else
@@ -80,7 +145,7 @@ class Podfile
80
145
  if dev_env == nil
81
146
  return
82
147
  end
83
- UI.puts "####### proccess dev-env for pod #{name} env: #{dev_env}"
148
+ UI.message "pod #{name.green} dev-env: #{dev_env.green}"
84
149
  git = options.delete(:git)
85
150
  branch = options.delete(:branch)
86
151
  tag = options.delete(:tag)
@@ -88,57 +153,49 @@ class Podfile
88
153
  if path == nil
89
154
  path = "./developing_pods/#{pod_name}"
90
155
  end
156
+ if git == nil || git.length == 0
157
+ raise "💔 #{pod_name.yellow} 未定义:git => 'xxx'库地址"
158
+ end
159
+ if branch == nil || branch.length == 0
160
+ raise "💔 #{pod_name.yellow} 未定义:branch => 'xxx'"
161
+ end
162
+ if tag == nil || tag.length == 0
163
+ raise "💔 #{pod_name.yellow} 未定义:tag => 'xxx', tag 将会作为 dev模式下载最新代码检查的依据,beta模式引用的tag 以及 release模式引用的版本号"
164
+ end
91
165
  if dev_env == 'dev'
92
166
  # 开发模式,使用path方式引用本地的submodule git库
93
167
  if !File.directory?(path)
94
- UI.puts "####### add submodule for #{pod_name}"
168
+ UI.puts "add submodule for #{pod_name.green}".yellow
169
+ # TODO 这个命令要想办法展示实际报错信息
95
170
  `git submodule add --force -b #{branch} #{git} #{path}`
96
171
 
97
172
  if !checkTagIsEqualToHead(tag, path) && !checkTagIsEqualToHead("#{tag}_beta", path)
98
- raise "#{pod_name} branch:#{branch} 与 tag:#{tag}[_beta] 内容不同步,请自行确认所用分支和tag后重新执行 pod install"
173
+ raise "💔 #{pod_name.yellow} branch:#{branch.yellow} 与 tag:#{tag.yellow}[_beta] 内容不同步,请自行确认所用分支和tag后重新执行 pod install"
99
174
  end
100
175
  end
101
176
  options[:path] = path
102
177
  if requirements.length >= 2
103
178
  requirements.delete_at(0)
104
179
  end
105
- UI.puts "####### enabled dev-mode for #{pod_name}"
180
+ UI.message "enabled #{"dev".green}-mode for #{pod_name.green}"
106
181
  elsif dev_env == 'beta'
107
182
  # Beta模式,使用tag引用远端git库的代码
108
183
  tag = "#{tag}_beta"
109
184
  if File.directory?(path)
110
185
  # 从Dev模式刚刚切换过来,需要打tag并且push
111
- UI.puts "####### gen beta env for #{pod_name}"
112
- if tag == nil || tag.length == 0
113
- raise "#{pod_name} 未定义tag"
114
- end
186
+ UI.puts "release beta-version for #{pod_name.green}".yellow
115
187
  currentDir = Dir.pwd
116
188
  Dir.chdir(path)
117
- output = `git status -s`
118
- puts output
119
- if output.length == 0
120
- output = `git status`
121
- if output.include?("push")
122
- ret = system("git push")
123
- if ret != true
124
- raise "#{pod_name} push 失败"
125
- end
126
- end
127
- else
128
- raise "有未提交的数据"
129
- end
189
+ checkGitStatusAndPush(pod_name)
130
190
  ## TODO:: 检查tag版本号与podspec里的版本号是否一致
131
- ret = system("git tag #{tag}")
132
- if ret == true
133
- ret = system("git push origin #{tag}")
134
- if ret != true
135
- raise "#{pod_name} push tag 失败"
136
- end
137
- else
191
+ ret = addGitTagAndPush(tag, pod_name)
192
+ if ret != true
138
193
  if checkTagOrBranchIsEqalToHead(tag, "./")
139
- UI.puts "#{pod_name} 没做任何调整,切换回beta"
194
+ UI.puts "#{pod_name.green} 没做任何调整,切换回beta"
140
195
  else
141
- raise "#{pod_name} tag:#{tag} 已存在, 请确认已经手动修改tag版本号"
196
+ if !inputNeedJumpForReson("是否跳过beta发布并删除本地submodule(直接引用远端库)")
197
+ raise "💔 #{pod_name.yellow} tag:#{tag.yellow} 已存在, 请确认已经手动修改tag版本号"
198
+ end
142
199
  end
143
200
  end
144
201
  Dir.chdir(currentDir)
@@ -149,15 +206,45 @@ class Podfile
149
206
  if requirements.length >= 2
150
207
  requirements.delete_at(0)
151
208
  end
152
- UI.puts "####### enabled beta-mode for #{pod_name}"
209
+ UI.message "enabled #{"beta".green}-mode for #{pod_name.green}"
153
210
  elsif dev_env == 'release'
154
211
  # Release模式,直接使用远端对应的版本
155
- # 需要考虑从dev直接跳跃到release的情况,需要谨慎处理,给予报错或执行两次的操作
156
212
  if File.directory?(path)
213
+ UI.puts "release release-version for #{pod_name.green}".yellow
214
+ currentDir = Dir.pwd
215
+ Dir.chdir(path)
216
+ ret = system("pod lib lint --allow-warnings")
217
+ if ret != true
218
+ raise "💔 #{pod_name.yellow} lint 失败"
219
+ end
220
+ checkGitStatusAndPush(pod_name)
221
+ ## TODO:: 检查tag版本号与podspec里的版本号是否一致
222
+ ret = addGitTagAndPush(tag, pod_name)
223
+ if ret == false
224
+ if checkTagOrBranchIsEqalToHead(tag, "./")
225
+ UI.puts "#{pod_name.green} 已经打过tag".yellow
226
+ else
227
+ raise "💔 #{pod_name.yellow} tag:#{tag.yellow} 已存在, 请确认已经手动修改tag版本号"
228
+ end
229
+ end
230
+ ## TODO:: 发布到的目标库名称需要用变量设置
231
+ repoAddrs = getUserRepoAddress()
232
+ cmd = "pod repo push #{repoAddrs} #{pod_name}.podspec --allow-warnings"
233
+ ret = system(cmd)
234
+ if ret != true
235
+ raise "💔 #{pod_name.yellow} 发布失败"
236
+ end
237
+ ## 到最后统一执行,判断如果当次release过
238
+ `pod repo update`
239
+ Dir.chdir(currentDir)
157
240
  checkAndRemoveSubmodule(path)
158
241
  end
242
+ if requirements.length < 2
243
+ requirements.insert(0, "#{tag}")
244
+ end
245
+ UI.message "enabled #{"release".green}-mode for #{pod_name.green}"
159
246
  else
160
- raise ":dev_env 必须要设置成 dev/beta/release之一,不接受其他值"
247
+ raise "💔 :dev_env 必须要设置成 dev/beta/release之一,不接受其他值"
161
248
  end
162
249
  $processedPodsOptions[pod_name] = options
163
250
  requirements.pop if options.empty?
@@ -174,4 +261,4 @@ class Podfile
174
261
  end
175
262
  end
176
263
  end
177
- end
264
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-dev-env
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - 吴锡苗
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-15 00:00:00.000000000 Z
11
+ date: 2019-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler