fastlane-plugin-ci_changelog 0.5.7 → 0.6.0.beta1
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6da83bb912083e4b737cb6ac066502236b26ea5176816f85579ec7b5d13e258a
|
4
|
+
data.tar.gz: cbbaeaafb329e368573e61d65d7774401e5916498a40cb18e26f5d0bb021cf84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 185224c17abe1a12c670e09c112b1f0a07038a91493829e691ab893d5e6ee8d807c542ecbf5d7030284a6825d0898d223b164bdd9b8867ae55ad94a83148a236
|
7
|
+
data.tar.gz: 4d9b8a2eef3d4ba592284bcc2b4e75f305d8c4216a391569fc5ed0c3cd811c2a2e95d3b7c76901a995d9e9a32f7774d786dd0a5473f9a4edddadd34ec8a609e7
|
data/README.md
CHANGED
@@ -53,7 +53,7 @@ Loading documentation for ci_changelog:
|
|
53
53
|
| jenkins_user | the user of jenkins if enabled security | CICL_CHANGELOG_JENKINS_USER | |
|
54
54
|
| jenkins_token | the token or password of jenkins if enabled | CICL_CHANGELOG_JENKINS_TOKEN | |
|
55
55
|
| | security | | |
|
56
|
-
|
|
56
|
+
| gitlab_api_url | the api url of gitlab | CICL_CHANGELOG_GITLAB_API_URL | |
|
57
57
|
| gitlab_private_token | the private token of gitlab | CICL_CHANGELOG_GITLAB_PRIVATE_TOKEN | |
|
58
58
|
+----------------------+----------------------------------------------+-------------------------------------+---------+
|
59
59
|
|
@@ -130,63 +130,27 @@ module Fastlane
|
|
130
130
|
end
|
131
131
|
|
132
132
|
def self.fetch_gitlab_changelog!
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
build_number = ENV['CI_BUILD_ID'].to_i
|
138
|
-
loop do
|
139
|
-
build_url = "#{@params[:gitlab_url]}/api/v3/projects/#{ENV['CI_PROJECT_ID']}/builds/#{build_number}"
|
140
|
-
UI.verbose("Fetching changelog #{build_url}")
|
141
|
-
|
142
|
-
begin
|
143
|
-
res = HTTP.headers('PRIVATE-TOKEN' => @params[:gitlab_private_token]).get(build_url)
|
144
|
-
if res.code == 200
|
145
|
-
build_status, data = Helper::CiChangelogHelper.dump_gitlab_commits(res.body)
|
146
|
-
UI.verbose("- Status #{build_status}")
|
147
|
-
UI.verbose("- Changelog #{data}")
|
148
|
-
|
149
|
-
if build_status == true
|
150
|
-
commits = data if commits.empty?
|
151
|
-
fetch_correct_changelog = true
|
152
|
-
else
|
153
|
-
commits = commits.empty? ? data : commits.concat(data)
|
154
|
-
loop_count += 1
|
155
|
-
end
|
156
|
-
end
|
157
|
-
build_number -= 1
|
158
|
-
|
159
|
-
break if fetch_correct_changelog || build_number <= 0
|
160
|
-
rescue JSON::ParserError => e
|
161
|
-
UI.verbose(e.message)
|
162
|
-
build_number -= 1
|
163
|
-
break if fetch_correct_changelog || build_number <= 0
|
164
|
-
rescue HTTP::Error => e
|
165
|
-
UI.verbose(e.message)
|
166
|
-
UI.verbose(e.backtrace.join("\n"))
|
167
|
-
break
|
168
|
-
end
|
169
|
-
end
|
133
|
+
endpoint = @params[:gitlab_api_url] || ENV['CI_API_V4_URL']
|
134
|
+
private_token = @params[:gitlab_private_token]
|
135
|
+
commits = Helper::CiChangelogHelper.dump_gitlab_commits(endpoint, private_token)
|
170
136
|
|
171
137
|
Helper::CiChangelogHelper.store_sharedvalue(SharedValues::CICL_CHANGELOG, commits.to_json)
|
172
138
|
end
|
173
139
|
|
174
140
|
def self.fetch_gitlab_env!
|
175
141
|
build_url =
|
176
|
-
if ENV['
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
"#{uri.scheme}://#{uri.host}#{url_port}/#{ci_project_namespace}/builds/#{ENV['CI_BUILD_ID']}"
|
142
|
+
if ENV['CI_JOB_URL']
|
143
|
+
# Gitlab >= 11.1, Runner 0.5
|
144
|
+
ENV['CI_JOB_URL']
|
145
|
+
elsif ENV['CI_PROJECT_URL']
|
146
|
+
# Gitlab >= 8.10, Runner 0.5
|
147
|
+
"#{ENV['CI_PROJECT_URL']}/-/jobs/#{ENV['CI_BUILD_ID']}"
|
184
148
|
end
|
185
149
|
|
186
150
|
Helper::CiChangelogHelper.store_sharedvalue(SharedValues::CICL_CI, CICLType::GITLAB_CI)
|
187
151
|
Helper::CiChangelogHelper.store_sharedvalue(SharedValues::CICL_BRANCH, ENV['CI_BUILD_REF_NAME'])
|
188
152
|
Helper::CiChangelogHelper.store_sharedvalue(SharedValues::CICL_COMMIT, ENV['CI_BUILD_REF'])
|
189
|
-
Helper::CiChangelogHelper.store_sharedvalue(SharedValues::CICL_PROJECT_URL, build_url)
|
153
|
+
Helper::CiChangelogHelper.store_sharedvalue(SharedValues::CICL_PROJECT_URL, build_url) if build_url
|
190
154
|
end
|
191
155
|
|
192
156
|
def self.output
|
@@ -228,9 +192,9 @@ module Fastlane
|
|
228
192
|
description: "the token or password of jenkins if enabled security",
|
229
193
|
optional: true,
|
230
194
|
type: String),
|
231
|
-
FastlaneCore::ConfigItem.new(key: :
|
232
|
-
env_name: "
|
233
|
-
description: "the url of gitlab",
|
195
|
+
FastlaneCore::ConfigItem.new(key: :gitlab_api_url,
|
196
|
+
env_name: "CICL_CHANGELOG_GITLAB_API_URL",
|
197
|
+
description: "the api url of gitlab",
|
234
198
|
optional: true,
|
235
199
|
type: String),
|
236
200
|
FastlaneCore::ConfigItem.new(key: :gitlab_private_token,
|
@@ -3,10 +3,6 @@ require 'json'
|
|
3
3
|
module Fastlane
|
4
4
|
module Helper
|
5
5
|
class CiChangelogHelper
|
6
|
-
def self.show_message
|
7
|
-
UI.message("Hello from the ci_changelog plugin helper!")
|
8
|
-
end
|
9
|
-
|
10
6
|
def self.git_commits(last_success_commit)
|
11
7
|
git_logs = `git log --pretty="format:%s - %cn [%ci]" #{last_success_commit}..HEAD`.strip.gsub(' +0800', '')
|
12
8
|
git_logs.split("\n")
|
@@ -35,34 +31,118 @@ module Fastlane
|
|
35
31
|
[result, commits]
|
36
32
|
end
|
37
33
|
|
38
|
-
def self.dump_gitlab_commits(
|
34
|
+
def self.dump_gitlab_commits(endpoint, private_token)
|
35
|
+
project_id = ENV['CI_PROJECT_ID']
|
36
|
+
from, to = fetch_gitlab_compare_commit(endpoint, private_token, project_id)
|
37
|
+
return [] unless from && to
|
38
|
+
|
39
|
+
fetch_gitlab_commits(endpoint, private_token, project_id, from, to)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.fetch_gitlab_compare_commit(endpoint, private_token, project_id)
|
43
|
+
job_name = ENV['CI_JOB_NAME']
|
44
|
+
|
45
|
+
from_commit = nil
|
46
|
+
to_commit = nil
|
47
|
+
|
48
|
+
jobs_url = "#{endpoint}/projects/#{project_id}/jobs"
|
49
|
+
UI.verbose("Fetching jobs url #{jobs_url}")
|
50
|
+
res = res = HTTP.follow
|
51
|
+
.headers('PRIVATE-TOKEN' => private_token)
|
52
|
+
.get(jobs_url)
|
53
|
+
|
54
|
+
jobs = res.parse.select { |job| job['name'] == job_name }
|
55
|
+
|
56
|
+
commits = []
|
57
|
+
jobs.each_with_index do |job, i|
|
58
|
+
commit = job['pipeline']['sha']
|
59
|
+
case job['status']
|
60
|
+
when 'running'
|
61
|
+
to_commit = commit
|
62
|
+
when 'success'
|
63
|
+
if to_commit.nil?
|
64
|
+
to_commit = commit
|
65
|
+
elsif to_commit && from_commit.nil?
|
66
|
+
from_commit = commit
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
[from_commit, to_commit]
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.fetch_gitlab_commit(body)
|
75
|
+
job_name = ENV['CI_JOB_NAME']
|
39
76
|
json = JSON.parse(body)
|
40
|
-
commit =
|
41
|
-
id: json['commit']['id'],
|
42
|
-
date: json['commit']['created_at'],
|
43
|
-
title: json['commit']['title'].strip,
|
44
|
-
message: json['commit']['message'].strip,
|
45
|
-
author: json['commit']['author_name'].strip,
|
46
|
-
email: json['commit']['author_email'].strip
|
47
|
-
}
|
77
|
+
commit = json['pipeline']['sha']
|
48
78
|
|
49
|
-
if json['
|
50
|
-
|
79
|
+
if json['name'] != job_name
|
80
|
+
UI.verbose("No match job name: #{job_name} != #{json['name']}")
|
81
|
+
[false, commit]
|
82
|
+
elsif json['status'] == 'success'
|
83
|
+
[true, commit]
|
51
84
|
else
|
52
|
-
[false,
|
85
|
+
[false, commit]
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.fetch_gitlab_commits(endpoint, private_token, project_id, from, to)
|
90
|
+
compare_url = "#{endpoint}/projects/#{project_id}/repository/compare"
|
91
|
+
params = {
|
92
|
+
from: from,
|
93
|
+
to: to
|
94
|
+
}
|
95
|
+
|
96
|
+
UI.verbose("Fetching commit compare url #{compare_url} with params: #{params}")
|
97
|
+
res = HTTP.follow
|
98
|
+
.headers('PRIVATE-TOKEN' => private_token)
|
99
|
+
.get(compare_url, params: params)
|
100
|
+
|
101
|
+
commits = []
|
102
|
+
if res.code == 200
|
103
|
+
res.parse['commits'].each do |commit|
|
104
|
+
commits << {
|
105
|
+
id: commit['id'],
|
106
|
+
date: commit['created_at'],
|
107
|
+
title: commit['title'].strip,
|
108
|
+
message: commit['title'].strip,
|
109
|
+
author: commit['author_name'].strip,
|
110
|
+
email: commit['author_email'].strip
|
111
|
+
}
|
112
|
+
end
|
53
113
|
end
|
114
|
+
|
115
|
+
commits
|
54
116
|
end
|
55
117
|
|
118
|
+
# def self.dump_gitlab_commits(body)
|
119
|
+
# json = JSON.parse(body)
|
120
|
+
# json['commits'].each_with_object([]) do |commit, obj|
|
121
|
+
# commit = {
|
122
|
+
# id: commit['id'],
|
123
|
+
# date: commit['created_at'],
|
124
|
+
# title: commit['title'].strip,
|
125
|
+
# message: commit['title'].strip,
|
126
|
+
# author: commit['author_name'].strip,
|
127
|
+
# email: commit['author_email'].strip
|
128
|
+
# }
|
129
|
+
|
130
|
+
# obj << commit
|
131
|
+
# end
|
132
|
+
# end
|
133
|
+
|
56
134
|
def self.determine_gitlab_options!(options)
|
57
|
-
|
58
|
-
|
135
|
+
return if options[:gitlab_api_url].to_s.empty? && !ENV['CI_API_V4_URL'].to_s.empty?
|
136
|
+
|
137
|
+
%w(gitlab_api_url gitlab_private_token).each do |key|
|
138
|
+
UI.user_error!("Missing #{key} param or it is an empty value.") unless options.fetch(key.to_sym) && !options[key.to_sym].empty?
|
59
139
|
end
|
60
140
|
end
|
61
141
|
|
62
142
|
def self.determine_jenkins_options!(options)
|
63
143
|
if determine_jenkins_basic_auth?
|
64
144
|
%w(jenkins_user jenkins_token).each do |key|
|
65
|
-
UI.user_error!("Missing #{key} param or empty value.") unless options.fetch(key.to_sym) && !options[key.to_sym].empty?
|
145
|
+
UI.user_error!("Missing #{key} param or it is an empty value.") unless options.fetch(key.to_sym) && !options[key.to_sym].empty?
|
66
146
|
end
|
67
147
|
end
|
68
148
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-ci_changelog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- icyleaf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -135,11 +135,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
135
|
version: '0'
|
136
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
|
-
- - "
|
138
|
+
- - ">"
|
139
139
|
- !ruby/object:Gem::Version
|
140
|
-
version:
|
140
|
+
version: 1.3.1
|
141
141
|
requirements: []
|
142
|
-
rubygems_version: 3.0.
|
142
|
+
rubygems_version: 3.0.6
|
143
143
|
signing_key:
|
144
144
|
specification_version: 4
|
145
145
|
summary: Automate generate changelog between previous build failed and the latest
|