gitee-cli 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2e07219311555afe8990344ec33c8e287528fc8f17f0b2f7f4ed88931fad67a1
4
+ data.tar.gz: 547475d996021e24377bdaedd094c6b8343f2ad32e3f33e7fc0050a93d9d1c86
5
+ SHA512:
6
+ metadata.gz: 901af3c3472ce87de5459e2994ae7801ca3518747fc4561ac507eb4e105d51813ccecdeb5802f2a3a5c1fe5ada3c999575a1b843f628c9e0c6d129d0a6d15648
7
+ data.tar.gz: fbebf9dd74cefbfddebb1f95e4519b4c5db843b98ab77eecedf2a94a84afd3e1ed20590c9102039c42be24ac522d5fe694b8cd50b9d76a9ddb6460a0b4a57d32
data/exe/gitee ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ # ---------------------------------------------------------------
3
+ # File : gitee.rb
4
+ # Authors : Aoran Zeng <ccmywish@qq.com>
5
+ # Created on : <2023-04-28>
6
+ # Last modified : <2023-04-29>
7
+ #
8
+ # gitee:
9
+ #
10
+ # Do some Gitee stuff in the command line.
11
+ #
12
+ # ---------------------------------------------------------------
13
+
14
+ require 'gitee-cli'
15
+
16
+ Gitee::CLI.run
@@ -0,0 +1,115 @@
1
+ # ---------------------------------------------------------------
2
+ # File : Rakefile
3
+ # Authors : Aoran Zeng <ccmywish@qq.com>
4
+ # Created on : <2023-04-29>
5
+ # Last modified : <2023-05-01>
6
+ #
7
+ # Rakefile:
8
+ #
9
+ # This file makes use of Rake and handle results of API calls
10
+ #
11
+ # ---------------------------------------------------------------
12
+
13
+ # desc "Print help" # Comment to hide this in help info
14
+ task :help do end # Just an empty task to be specified by default
15
+
16
+ namespace "repo" do
17
+
18
+ desc "Create a repository under your space"
19
+ task :create, [:repo] do |t, repo:|
20
+ res = Gitee::Gitee4CLI::API::Repositories.create(repo)
21
+ if res.successful?
22
+ cont = res.content
23
+ puts "Created successfully! Please visit: #{cont['html_url']}"
24
+ else
25
+ $stderr.puts "Error: " + res.why_failed
26
+ end
27
+ end
28
+
29
+
30
+ desc "Delete the '<user>/<repo>' repository"
31
+ task :delete, [:user, :repo] do |t, user:, repo:|
32
+ res = Gitee::Gitee4CLI::API::Repositories.delete(user,repo)
33
+ if res.successful?
34
+ puts "Deleted successfully!"
35
+ else
36
+ $stderr.puts "Error: " + res.why_failed
37
+ end
38
+ end
39
+
40
+
41
+ desc "Get all branches of a repository"
42
+ task :branches, [:user, :repo] do |t, args|
43
+ user, repo = args.user, args.repo
44
+ res = Gitee::Gitee4CLI::API::Repositories.all_branches(user, repo)
45
+ if res.successful?
46
+ res.content.each do |br|
47
+ puts br['name']
48
+ end
49
+ else
50
+ $stderr.puts "Error: " + res.why_failed
51
+ end
52
+ end
53
+
54
+
55
+ desc "View the repository's README"
56
+ task :view, [:user, :repo] do |t, user:, repo:|
57
+ res = Gitee::Gitee4CLI::API::Repositories.readme(user, repo)
58
+ if res.successful?
59
+ require 'base64'
60
+ require 'tty-markdown'
61
+ # res.content['content'] is UTF-8
62
+ cont = Base64.decode64(res.content['content']) # ASCII-8BIT
63
+ puts TTY::Markdown.parse(cont.force_encoding("UTF-8"))
64
+ puts puts
65
+ puts "View this repository on Gitee: " + Gitee::Gitee4CLI::URL + "#{user}/#{repo}"
66
+ else
67
+ $stderr.puts "Error: " + res.why_failed
68
+ end
69
+ end
70
+
71
+
72
+ desc "List repositories owned by user/organization"
73
+ task :list, [:user] do |t, args|
74
+ user = args.user
75
+ res = Gitee::Gitee4CLI::API::Repositories.list_for_user(user)
76
+ if res.successful?
77
+ # res.content is_a? Array => true
78
+ res.content.each_with_index do |repo, i|
79
+ print "#{i+1}. ".ljust(3), repo['full_name'].ljust(30)
80
+ if star = repo['stargazers_count']
81
+ print ' Star:', star
82
+ end
83
+ if fork = repo['forks_count']
84
+ print ' Fork:', fork
85
+ end
86
+ if lang = repo['language']
87
+ print ' Lang:', lang
88
+ end
89
+ puts
90
+ unless (desc = repo['description']).empty?
91
+ puts
92
+ puts " #{desc}"
93
+ end
94
+ puts puts
95
+ end
96
+ else
97
+ $stderr.puts "Error: " + res.why_failed
98
+ end
99
+ end
100
+
101
+ end
102
+
103
+
104
+ namespace "auth" do
105
+
106
+ desc "Apply for a Gitee access token (temporarily)"
107
+ task :apply do
108
+ puts 'Please visit:', ''
109
+ print ' ', Gitee::Gitee4CLI::API::BASE_URL + '/' + Gitee::Gitee4CLI::API::VERSION + '/swagger'
110
+ puts puts
111
+ end
112
+
113
+ end
114
+
115
+ task default: :help
data/lib/gitee/cli.rb ADDED
@@ -0,0 +1,97 @@
1
+ # ---------------------------------------------------------------
2
+ # File : cli.rb
3
+ # Authors : Aoran Zeng <ccmywish@qq.com>
4
+ # Created on : <2023-04-28>
5
+ # Last modified : <2023-05-01>
6
+ #
7
+ # cli:
8
+ #
9
+ # Comamnd line processing by first hand
10
+ #
11
+ # ---------------------------------------------------------------
12
+
13
+ require 'rake'
14
+
15
+ # Add method for Rake application
16
+ #
17
+ class Rake::Application
18
+ def run_gitee_cli(args)
19
+ opt = ['--rakefile', File.join(__FILE__, '..', 'cli', 'Rakefile') ]
20
+ standard_exception_handling do
21
+ argv = args.push *opt
22
+ init "gitee", argv
23
+ load_rakefile
24
+ top_level
25
+ end
26
+ end
27
+ end
28
+
29
+
30
+ module Gitee
31
+
32
+ module CLI
33
+
34
+ # gitee-cli version
35
+ VERSION = "0.1.0"
36
+
37
+ # Read token from local or environment variable
38
+ #
39
+ # @return [String] access token for Gitee API
40
+ #
41
+ def self.get_token
42
+ if tok = ENV['GITEE_TOKEN']
43
+ return tok
44
+ end
45
+
46
+ token_file = ENV['GITEE_TOKEN_FILE']
47
+ begin
48
+ return File.read(token_file).chomp
49
+ rescue Exception => e
50
+ $stderr.puts "gitee: Error to get Gitee token"
51
+ $stderr.puts e.message
52
+ exit
53
+ end
54
+ end
55
+
56
+ # Parse the commandline and run the program
57
+ #
58
+ # @noreturn
59
+ #
60
+ def self.run
61
+ argv = ARGV.dup
62
+
63
+ help_opts = ['-h', '-H', '--help', 'help']
64
+ version_opts = ['-v', '-V', '--version']
65
+
66
+ if argv.empty?
67
+ puts help_banner
68
+ argv << '-T'
69
+ elsif argv.intersect? help_opts
70
+ argv -= help_opts
71
+ puts help_banner
72
+ argv << '-T'
73
+ elsif argv.intersect? version_opts
74
+ argv -= version_opts
75
+ puts version_banner
76
+ end
77
+
78
+ Rake.application.run_gitee_cli(argv)
79
+ end
80
+
81
+
82
+ def self.version_banner
83
+ "gitee v#{VERSION}: Work with Gitee from the command line."
84
+ end
85
+
86
+
87
+ def self.help_banner
88
+ help = <<~BANNER
89
+ #{version_banner}
90
+
91
+ Usage:
92
+
93
+ BANNER
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,369 @@
1
+ # ---------------------------------------------------------------
2
+ # File : api.rb
3
+ # Authors : Aoran Zeng <ccmywish@qq.com>
4
+ # Created on : <2023-04-28>
5
+ # Last modified : <2023-05-01>
6
+ #
7
+ # api:
8
+ #
9
+ # APIs for Gitee
10
+ #
11
+ # ---------------------------------------------------------------
12
+
13
+ require 'http'
14
+
15
+ module Gitee::Gitee4CLI::API
16
+
17
+ BASE_URL = ::Gitee::Gitee4CLI::URL + '/api' # "https://gitee.com/api"
18
+ VERSION = "v5"
19
+
20
+ # Result type to return to CLI handler
21
+ #
22
+ class Result
23
+
24
+ # @return [String] The content of a successful API call
25
+ #
26
+ attr_reader :content
27
+
28
+ # @return [String] The reason of a failed API call
29
+ #
30
+ attr_reader :why_failed
31
+
32
+ # New a Result object with successful info and its content or failed reason
33
+ #
34
+ # @param [Boolean] successful If the API call succeeded
35
+ # @param [String] generic Content or failed reason
36
+ #
37
+ def initialize(successful, generic)
38
+ @status = successful
39
+ if successful
40
+ @content = generic
41
+ else
42
+ @why_failed = generic
43
+ end
44
+ end
45
+
46
+ def successful?
47
+ @status
48
+ end
49
+
50
+ # A simple Result constructor
51
+ #
52
+ # @return [Result] A new Result object
53
+ #
54
+ # @note I just don't want to write 'new'
55
+ #
56
+ def self.[] arg1, arg2
57
+ new(arg1, arg2)
58
+ end
59
+
60
+ end
61
+
62
+ # Descriptive HTTP status code rather than magic number
63
+ #
64
+ module HttpStatusCode
65
+ # Get successfully
66
+ Ok = 200
67
+ # Post successfully
68
+ Created = 201
69
+ # Delete successfully
70
+ NoContent = 204
71
+ end
72
+
73
+ # Private module to be included to provide common utilities for API modules, e.g. GitData
74
+ #
75
+ # @note Because it will be included, all functions shouldn't be declared as self.xxx
76
+ #
77
+ module CommonUtilities
78
+
79
+ # This is for API modules to directly call rather than spell the whole namespaces
80
+ Reuslt = Gitee::Gitee4CLI::API::Result
81
+
82
+ # Simple wrapper to get token
83
+ #
84
+ # @return [String] Token value
85
+ #
86
+ def get_token
87
+ Gitee::CLI.get_token
88
+ end
89
+
90
+ # Make the request url for an action
91
+ #
92
+ # Out two instance variables
93
+ # 1. `[Status] @status` status
94
+ # 2. `[String] @body` response body string
95
+ #
96
+ # @noparams
97
+ # @noreturn
98
+ #
99
+ # @note This is only called by module functions
100
+ #
101
+ def make_request
102
+ instance_exec {
103
+ url = [BASE_URL, VERSION, @path].join('/')
104
+ # e.g. HTTP.get("http://example.com/resource", :params => {:foo => "bar"})
105
+ res = HTTP.send @action.to_sym, url, :params => @params
106
+
107
+ # require 'irb'
108
+ # binding.irb
109
+
110
+ @status, @body = res.status, res.to_s
111
+ }
112
+ end
113
+
114
+ end
115
+
116
+ # Make it only accessible from inside
117
+ private_constant :CommonUtilities
118
+
119
+ # GitData APIs
120
+ #
121
+ # @see https://gitee.com/api/v5/swagger#/getV5ReposOwnerRepoGitBlobsSha
122
+ #
123
+ module GitData
124
+
125
+ class << self
126
+ include CommonUtilities
127
+ end
128
+
129
+ # Get file Blob
130
+ #
131
+ # @param owner 仓库所属空间地址(企业、组织或个人的地址)
132
+ # @param repo 仓库路径(path)
133
+ # @param sha 文件的 Blob SHA,可通过[获取仓库具体路径下的内容(tree)]API获取
134
+ # @param [Boolean] recursive 赋值为1递归获取目录
135
+ #
136
+ # @return [String] JSON响应体
137
+ #
138
+ # @HTTP [GET] https://gitee.com/api/v5/repos/{owner}/{repo}/git/blobs/{sha}
139
+ #
140
+ def self.blob(owner, repo, sha, recursive = true)
141
+ access_token = get_token
142
+ recursive = recursive ? 1 : 0
143
+ @params = {access_token:, recursive:}
144
+ @path = spirntf "repos/%s/%s/git/blobs/%s", owner, repo, sha
145
+ make_request
146
+ end
147
+
148
+ # Get directory Tree
149
+ #
150
+ # @param [String] owner 仓库所属空间地址(企业、组织或个人的地址)
151
+ # @param [String] repo 仓库路径(path)
152
+ # @param [String] sha 可以是分支名(如master)、Commit或者目录Tree的SHA值
153
+ # @param [Boolean] recursive 赋值为1递归获取目录
154
+ #
155
+ # @return [Result] JSON响应体
156
+ #
157
+ # @HTTP [Get] https://gitee.com/api/v5/repos/{owner}/{repo}/git/trees/{sha}
158
+ #
159
+ # @example [URL] https://gitee.com/api/v5/repos/ccmywish/gitee-cli/git/trees/main?access_token=abc
160
+ #
161
+ def self.tree(owner, repo, sha, recursive = true)
162
+ access_token = get_token
163
+ recursive = recursive ? 1 : 0
164
+ @params = {access_token:, recursive:}
165
+ @path = sprintf "repos/%s/%s/git/trees/%s", owner, repo, sha
166
+ make_request
167
+ end
168
+
169
+ # Get Gitee metrics for a repository
170
+ #
171
+ # @param [String] owner 仓库所属空间地址(企业、组织或个人的地址)
172
+ # @param [String] repo 仓库路径(path)
173
+ #
174
+ # @return [Result] JSON响应体
175
+ #
176
+ # @HTTP [GET] https://gitee.com/api/v5/repos/{owner}/{repo}/git/gitee_metrics
177
+ #
178
+ # @example [URL] https://gitee.com/api/v5/repos/ccmywish/gitee-cli/git/gitee_metrics?access_token=abc
179
+ #
180
+ def self.gitee_metrics(owner, repo)
181
+ access_token = get_token
182
+ @params = {access_token:}
183
+ @path = sprintf "repos/%s/%s/git/gitee_metrics", owner, repo
184
+ @action = 'get'
185
+ make_request
186
+ end
187
+
188
+ end
189
+
190
+
191
+ # Repositories APIs
192
+ #
193
+ # @see https://gitee.com/api/v5/swagger#/getV5ReposOwnerRepoBranches
194
+ #
195
+ module Repositories
196
+
197
+ class << self
198
+ include CommonUtilities
199
+ end
200
+
201
+ # Get all branches
202
+ #
203
+ # @param [String] owner 仓库所属空间地址(企业、组织或个人的地址)
204
+ # @param [String] repo 仓库路径(path)
205
+ #
206
+ # @return [Result] JSON响应体
207
+ #
208
+ # @HTTP [GET] https://gitee.com/api/v5/repos/{owner}/{repo}/branches
209
+ #
210
+ def self.all_branches(owner, repo)
211
+ access_token = get_token
212
+ @params = {access_token:}
213
+ @path = sprintf "repos/%s/%s/branches", owner, repo
214
+ @action = 'get'
215
+ make_request
216
+ if @status.code == 200
217
+ # 'json' is already required somewhere, maybe from 'http.rb'
218
+ Result[true, JSON.parse(@body)]
219
+ else
220
+ Result[false, @status.to_s]
221
+ end
222
+ end
223
+
224
+ # @TODO
225
+ # Create a new branch
226
+ #
227
+ # @param [String] owner 仓库所属空间地址(企业、组织或个人的地址)
228
+ # @param [String] repo 仓库路径(path)
229
+ #
230
+ # @return [Result] JSON响应体
231
+ #
232
+ # @HTTP [POST] https://gitee.com/api/v5/repos/{owner}/{repo}/branches
233
+ #
234
+ def self.new_branch(owner, repo)
235
+ access_token = get_token
236
+ @params = {access_token:}
237
+ @path = sprintf "repos/%s/%s/branches", owner, repo
238
+ make_request
239
+ # TODO: post the request
240
+ end
241
+
242
+ # @TODO
243
+ # Get a branch
244
+ #
245
+ # @param [String] owner 仓库所属空间地址(企业、组织或个人的地址)
246
+ # @param [String] repo 仓库路径(path)
247
+ # @param [String] branch 分支名称
248
+ #
249
+ # @return [Result] JSON响应体
250
+ #
251
+ # @HTTP [GET] https://gitee.com/api/v5/repos/{owner}/{repo}/branches/{branch}
252
+ #
253
+ def self.get_branch(owner, repo, branch)
254
+ access_token = get_token
255
+ @params = {access_token:}
256
+ @path = sprintf "repos/%s/%s/branches/%s", owner, repo, branch
257
+ @action = 'get'
258
+ make_request
259
+ end
260
+
261
+ # Delete a repo
262
+ #
263
+ # @param [String] owner 仓库所属空间地址(企业、组织或个人的地址)
264
+ # @param [String] repo 仓库路径(path)
265
+ #
266
+ # @return [Result] JSON响应体
267
+ #
268
+ # @HTTP [DELETE] https://gitee.com/api/v5/repos/{owner}/{repo}
269
+ #
270
+ def self.delete(owner, repo)
271
+ access_token = get_token
272
+ @params = {access_token:}
273
+ @path = sprintf "repos/%s/%s", owner, repo
274
+ @action = 'delete'
275
+ make_request
276
+ if @status.code == HttpStatusCode::NoContent
277
+ Result[true, nil]
278
+ else
279
+ Result[false, @status.to_s]
280
+ end
281
+ end
282
+
283
+ # @TODO
284
+ # Clear a repo
285
+ #
286
+ # @param [String] owner 仓库所属空间地址(企业、组织或个人的地址)
287
+ # @param [String] repo 仓库路径(path)
288
+ #
289
+ # @return [String] JSON响应体
290
+ #
291
+ # @HTTP [PUT] https://gitee.com/api/v5/repos/{owner}/{repo}/clear
292
+ #
293
+ def self.clear(owner, repo)
294
+ access_token = get_token
295
+ @params = {access_token:}
296
+ @path = sprintf "repos/%s/%s/clear", owner, repo
297
+ @action = 'put'
298
+ make_request
299
+ # TODO put
300
+ end
301
+
302
+ # Make a new repo
303
+ #
304
+ # @param [String] repo 仓库路径(path)
305
+ #
306
+ # @return [Result] JSON响应体
307
+ #
308
+ # @HTTP [POST] https://gitee.com/api/v5/user/repos
309
+ #
310
+ def self.create(repo)
311
+ access_token = get_token
312
+ @params = {access_token:, name: repo}
313
+ @path = "user/repos"
314
+ @action = 'post'
315
+ make_request
316
+ if @status.code == HttpStatusCode::Created
317
+ Result[true, JSON.parse(@body)]
318
+ else
319
+ Result[false, @status.to_s]
320
+ end
321
+ end
322
+
323
+ # Get the README from a repo
324
+ #
325
+ # @param [String] owner 仓库所属空间地址(企业、组织或个人的地址)
326
+ # @param [String] repo 仓库路径(path)
327
+ #
328
+ # @return [Result] JSON响应体
329
+ #
330
+ # @HTTP [GET] https://gitee.com/api/v5/repos/{owner}/{repo}/readme
331
+ #
332
+ def self.readme(owner, repo)
333
+ access_token = get_token
334
+ @params = {access_token:}
335
+ @path = sprintf "repos/%s/%s/readme", owner, repo
336
+ @action = 'get'
337
+ make_request
338
+ if @status.code == HttpStatusCode::Ok
339
+ Result[true, JSON.parse(@body)]
340
+ else
341
+ Result[false, @status.to_s]
342
+ end
343
+ end
344
+
345
+ #
346
+ # List repos from a user
347
+ #
348
+ # @param [<Type>] repo <description>
349
+ #
350
+ # @return [<Type>] <description>
351
+ #
352
+ # @HTTP [GET] https://gitee.com/api/v5/users/{username}/repos
353
+ #
354
+ def self.list_for_user(user)
355
+ access_token = get_token
356
+ @params = {access_token:, per_page: 50} # default per_page set to 50 (max 100)
357
+ @path = sprintf "users/%s/repos", user
358
+ @action = 'get'
359
+ make_request
360
+ if @status.code == HttpStatusCode::Ok
361
+ Result[true, JSON.parse(@body)]
362
+ else
363
+ Result[false, @status.to_s]
364
+ end
365
+ end
366
+
367
+ end
368
+
369
+ end
@@ -0,0 +1,21 @@
1
+ # ---------------------------------------------------------------
2
+ # File : gitee4cli.rb
3
+ # Authors : Aoran Zeng <ccmywish@qq.com>
4
+ # Created on : <2023-04-29>
5
+ # Last modified : <2023-04-29>
6
+ #
7
+ # gitee4cli:
8
+ #
9
+ # Third party Gitee modules for Ruby
10
+ #
11
+ # ---------------------------------------------------------------
12
+
13
+ module Gitee
14
+
15
+ module Gitee4CLI
16
+ URL = "https://gitee.com"
17
+ end
18
+
19
+ end
20
+
21
+ require 'gitee/gitee4cli/api'
data/lib/gitee-cli.rb ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # ---------------------------------------------------------------
3
+ # File : gitee-cli.rb
4
+ # Authors : Aoran Zeng <ccmywish@qq.com>
5
+ # Created on : <2023-04-29>
6
+ # Last modified : <2023-04-29>
7
+ #
8
+ # gitee-cli:
9
+ #
10
+ # Require two lib files
11
+ #
12
+ # ---------------------------------------------------------------
13
+
14
+ require 'gitee/cli'
15
+ require 'gitee/gitee4cli'
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitee-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Aoran Zeng
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-05-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '13.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '13.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: http
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: tty-markdown
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.7'
55
+ description: 'Work with Gitee from the command line.
56
+
57
+ '
58
+ email: ccmywish@qq.com
59
+ executables:
60
+ - gitee
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - exe/gitee
65
+ - lib/gitee-cli.rb
66
+ - lib/gitee/cli.rb
67
+ - lib/gitee/cli/Rakefile
68
+ - lib/gitee/gitee4cli.rb
69
+ - lib/gitee/gitee4cli/api.rb
70
+ homepage: https://gitee.com/ccmywish
71
+ licenses:
72
+ - MIT
73
+ metadata:
74
+ bug_tracker_uri: https://gitee.com/ccmywish
75
+ source_code_uri: https://gitee.com/ccmywish
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 3.1.0
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubygems_version: 3.4.8
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: 'gitee-cli: Gitee command line tools (3rd party client)'
95
+ test_files: []