fastlane-plugin-semantic_release 1.12.0 → 1.18.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 801ae7e90c09769c435f3aa1640323338ff7b343d3005427208f371f2cd06711
4
- data.tar.gz: '0790c9a548fd4d4bd59409bf659b488af3db65cfb098683dac62658b36b866c4'
3
+ metadata.gz: bfdd6b224d265922b3de9f42697de102ceacca38c4222e21295ace3e695c204c
4
+ data.tar.gz: cd348da86de7b4eba45d92672b67f6ce2af63ddd441b0a6d187296c9c9a5f8e4
5
5
  SHA512:
6
- metadata.gz: c8527660760ffa383de7ff51baa708323da17ed33a7d601becc88375f4ad789ee6d4b99970995b42ae010a6a8f976b661fd53c22dd522bef8d0df30d3fc091bd
7
- data.tar.gz: 6935fab5c02ffa2cb63d6d5fde4a7012e4abd800263059265c75c2f29155d179af8a960e11ebb146a329cc6c7af44ae52dc8718da04ba1b7309a566fc80767c8
6
+ metadata.gz: 6f91ea3be74683aeca782926fd80ca13e6f43ba1a6814cc89f76c055cc3e0b57183f885fc47ee97bfaac6cd8592cb02d0c1298ed57885ca4464801b5e8bbdcb6
7
+ data.tar.gz: e7d77b750b04093063de46eb83ba151b4a600e990c8e3e14bf97e5c0e548262f0a515b3b348a643de6fdf6877198889a2a0947947079579cf80233cfa19bc2fe
@@ -6,6 +6,7 @@ module Fastlane
6
6
  module SharedValues
7
7
  RELEASE_ANALYZED = :RELEASE_ANALYZED
8
8
  RELEASE_IS_NEXT_VERSION_HIGHER = :RELEASE_IS_NEXT_VERSION_HIGHER
9
+ RELEASE_IS_NEXT_VERSION_COMPATIBLE_WITH_CODEPUSH = :RELEASE_IS_NEXT_VERSION_COMPATIBLE_WITH_CODEPUSH
9
10
  RELEASE_LAST_TAG_HASH = :RELEASE_LAST_TAG_HASH
10
11
  RELEASE_LAST_VERSION = :RELEASE_LAST_VERSION
11
12
  RELEASE_NEXT_MAJOR_VERSION = :RELEASE_NEXT_MAJOR_VERSION
@@ -40,47 +41,85 @@ module Fastlane
40
41
  commits.split("|>")
41
42
  end
42
43
 
43
- def self.is_releasable(params)
44
- # Hash of the commit where is the last version
45
- # If the tag is not found we are taking HEAD as reference
46
- hash = 'HEAD'
47
- # Default last version
48
- version = '0.0.0'
44
+ def self.get_beginning_of_next_sprint(params)
45
+ # command to get first commit
46
+ git_command = "git rev-list --max-parents=0 HEAD"
49
47
 
50
- tag = get_last_tag(
51
- match: params[:match],
52
- debug: params[:debug]
53
- )
48
+ tag = get_last_tag(match: params[:match], debug: params[:debug])
54
49
 
50
+ # if tag doesn't exist it get's first commit or fallback tag (v*.*.*)
55
51
  if tag.empty?
56
- UI.message("First commit of the branch is taken as a begining of next release")
52
+ UI.message("It couldn't match tag for #{params[:match]}. Check if first commit can be taken as a beginning of next release")
57
53
  # If there is no tag found we taking the first commit of current branch
58
- hash = Actions.sh('git rev-list --max-parents=0 HEAD', log: params[:debug]).chomp
59
- else
60
- # Tag's format is v2.3.4-5-g7685948
61
- # See git describe man page for more info
62
- tag_name = tag.split('-')[0...-2].join('-').strip
63
- parsed_version = tag_name.match(params[:tag_version_match])
64
-
65
- if parsed_version.nil?
66
- UI.user_error!("Error while parsing version from tag #{tag_name} by using tag_version_match - #{params[:tag_version_match]}. Please check if the tag contains version as you expect and if you are using single brackets for tag_version_match parameter.")
54
+ hash_lines = Actions.sh("#{git_command} | wc -l", log: params[:debug]).chomp
55
+
56
+ if hash_lines.to_i == 1
57
+ UI.message("First commit of the branch is taken as a begining of next release")
58
+ return {
59
+ # here we know this command will return 1 line
60
+ hash: Actions.sh(git_command, log: params[:debug]).chomp
61
+ }
67
62
  end
68
63
 
69
- version = parsed_version[0]
70
- # Get a hash of last version tag
71
- hash = get_last_tag_hash(
72
- tag_name: tag_name,
73
- debug: params[:debug]
74
- )
64
+ unless params[:prevent_tag_fallback]
65
+ # neither matched tag and first hash could be used - as fallback we try vX.Y.Z
66
+ UI.message("It couldn't match tag for #{params[:match]} and couldn't use first commit. Check if tag vX.Y.Z can be taken as a begining of next release")
67
+ tag = get_last_tag(match: "v*", debug: params[:debug])
68
+ end
69
+
70
+ # even fallback tag doesn't work
71
+ if tag.empty?
72
+ return false
73
+ end
74
+ end
75
+
76
+ # Tag's format is v2.3.4-5-g7685948
77
+ # See git describe man page for more info
78
+ tag_name = tag.split('-')[0...-2].join('-').strip
79
+ parsed_version = tag_name.match(params[:tag_version_match])
80
+
81
+ if parsed_version.nil?
82
+ UI.user_error!("Error while parsing version from tag #{tag_name} by using tag_version_match - #{params[:tag_version_match]}. Please check if the tag contains version as you expect and if you are using single brackets for tag_version_match parameter.")
83
+ end
84
+
85
+ version = parsed_version[0]
86
+ # Get a hash of last version tag
87
+ hash = get_last_tag_hash(
88
+ tag_name: tag_name,
89
+ debug: params[:debug]
90
+ )
91
+
92
+ UI.message("Found a tag #{tag_name} associated with version #{version}")
93
+
94
+ return {
95
+ hash: hash,
96
+ version: version
97
+ }
98
+ end
99
+
100
+ def self.is_releasable(params)
101
+ # Hash of the commit where is the last version
102
+ beginning = get_beginning_of_next_sprint(params)
75
103
 
76
- UI.message("Found a tag #{tag_name} associated with version #{version}")
104
+ unless beginning
105
+ UI.error('It could not find a begining of this sprint. How to fix this:')
106
+ UI.error('-- ensure there is only one commit with --max-parents=0 (this command should return one line: "git rev-list --max-parents=0 HEAD")')
107
+ UI.error('-- tell us explicitely where the release starts by adding tag like this: vX.Y.Z (where X.Y.Z is version from which it starts computing next version number)')
108
+ return false
77
109
  end
78
110
 
111
+ # Default last version
112
+ version = beginning[:version] || '0.0.0'
113
+ # If the tag is not found we are taking HEAD as reference
114
+ hash = beginning[:hash] || 'HEAD'
115
+
79
116
  # converts last version string to the int numbers
80
117
  next_major = (version.split('.')[0] || 0).to_i
81
118
  next_minor = (version.split('.')[1] || 0).to_i
82
119
  next_patch = (version.split('.')[2] || 0).to_i
83
120
 
121
+ is_next_version_compatible_with_codepush = true
122
+
84
123
  # Get commits log between last version and head
85
124
  splitted = get_commits_from_hash(
86
125
  hash: hash,
@@ -103,13 +142,11 @@ module Fastlane
103
142
  pattern: format_pattern
104
143
  )
105
144
 
106
- unless commit[:scope].nil?
107
- # if this commit has a scope, then we need to inspect to see if that is one of the scopes we're trying to exclude
108
- scope = commit[:scope]
109
- scopes_to_ignore = params[:ignore_scopes]
110
- # if it is, we'll skip this commit when bumping versions
111
- next if scopes_to_ignore.include?(scope) #=> true
112
- end
145
+ next if Helper::SemanticReleaseHelper.should_exclude_commit(
146
+ commit_scope: commit[:scope],
147
+ include_scopes: params[:include_scopes],
148
+ ignore_scopes: params[:ignore_scopes]
149
+ )
113
150
 
114
151
  if commit[:release] == "major" || commit[:is_breaking_change]
115
152
  next_major += 1
@@ -122,6 +159,10 @@ module Fastlane
122
159
  next_patch += 1
123
160
  end
124
161
 
162
+ unless commit[:is_codepush_friendly]
163
+ is_next_version_compatible_with_codepush = false
164
+ end
165
+
125
166
  next_version = "#{next_major}.#{next_minor}.#{next_patch}"
126
167
  UI.message("#{next_version}: #{subject}") if params[:show_version_path]
127
168
  end
@@ -132,6 +173,7 @@ module Fastlane
132
173
 
133
174
  Actions.lane_context[SharedValues::RELEASE_ANALYZED] = true
134
175
  Actions.lane_context[SharedValues::RELEASE_IS_NEXT_VERSION_HIGHER] = is_next_version_releasable
176
+ Actions.lane_context[SharedValues::RELEASE_IS_NEXT_VERSION_COMPATIBLE_WITH_CODEPUSH] = is_next_version_compatible_with_codepush
135
177
  # Last release analysis
136
178
  Actions.lane_context[SharedValues::RELEASE_LAST_TAG_HASH] = hash
137
179
  Actions.lane_context[SharedValues::RELEASE_LAST_VERSION] = version
@@ -148,7 +190,7 @@ module Fastlane
148
190
  end
149
191
 
150
192
  def self.is_codepush_friendly(params)
151
- git_command = 'git rev-list --max-parents=0 HEAD'
193
+ git_command = "git rev-list --max-parents=0 HEAD"
152
194
  # Begining of the branch is taken for codepush analysis
153
195
  hash_lines = Actions.sh("#{git_command} | wc -l", log: params[:debug]).chomp
154
196
  hash = Actions.sh(git_command, log: params[:debug]).chomp
@@ -273,6 +315,20 @@ module Fastlane
273
315
  description: "To parse version number from tag name",
274
316
  default_value: '\d+\.\d+\.\d+'
275
317
  ),
318
+ FastlaneCore::ConfigItem.new(
319
+ key: :prevent_tag_fallback,
320
+ description: "Prevent tag from falling back to vX.Y.Z when there is no match",
321
+ default_value: false,
322
+ type: Boolean,
323
+ optional: true
324
+ ),
325
+ FastlaneCore::ConfigItem.new(
326
+ key: :include_scopes,
327
+ description: "To only include certain scopes when calculating releases",
328
+ default_value: [],
329
+ type: Array,
330
+ optional: true
331
+ ),
276
332
  FastlaneCore::ConfigItem.new(
277
333
  key: :ignore_scopes,
278
334
  description: "To ignore certain scopes when calculating releases",
@@ -303,6 +359,7 @@ module Fastlane
303
359
  [
304
360
  ['RELEASE_ANALYZED', 'True if commits were analyzed.'],
305
361
  ['RELEASE_IS_NEXT_VERSION_HIGHER', 'True if next version is higher then last version'],
362
+ ['RELEASE_IS_NEXT_VERSION_COMPATIBLE_WITH_CODEPUSH', 'True if next version is compatible with codepush'],
306
363
  ['RELEASE_LAST_TAG_HASH', 'Hash of commit that is tagged as a last version'],
307
364
  ['RELEASE_LAST_VERSION', 'Last version number - parsed from last tag.'],
308
365
  ['RELEASE_NEXT_MAJOR_VERSION', 'Major number of the next version'],
@@ -35,7 +35,7 @@ module Fastlane
35
35
  hash: last_tag_hash,
36
36
  debug: params[:debug]
37
37
  )
38
- parsed = parse_commits(commits)
38
+ parsed = parse_commits(commits, params)
39
39
 
40
40
  commit_url = params[:commit_url]
41
41
  format = params[:format]
@@ -172,7 +172,7 @@ module Fastlane
172
172
  end
173
173
  end
174
174
 
175
- def self.parse_commits(commits)
175
+ def self.parse_commits(commits, params)
176
176
  parsed = []
177
177
  # %s|%b|%H|%h|%an|%at
178
178
  format_pattern = lane_context[SharedValues::CONVENTIONAL_CHANGELOG_ACTION_FORMAT_PATTERN]
@@ -185,6 +185,12 @@ module Fastlane
185
185
  pattern: format_pattern
186
186
  )
187
187
 
188
+ next if Helper::SemanticReleaseHelper.should_exclude_commit(
189
+ commit_scope: commit[:scope],
190
+ include_scopes: params[:include_scopes],
191
+ ignore_scopes: params[:ignore_scopes]
192
+ )
193
+
188
194
  commit[:hash] = splitted[2]
189
195
  commit[:short_hash] = splitted[3]
190
196
  commit[:author_name] = splitted[4]
@@ -273,6 +279,20 @@ module Fastlane
273
279
  type: Boolean,
274
280
  optional: true
275
281
  ),
282
+ FastlaneCore::ConfigItem.new(
283
+ key: :include_scopes,
284
+ description: "To only include certain scopes when calculating releases",
285
+ default_value: [],
286
+ type: Array,
287
+ optional: true
288
+ ),
289
+ FastlaneCore::ConfigItem.new(
290
+ key: :ignore_scopes,
291
+ description: "To ignore certain scopes when calculating releases",
292
+ default_value: [],
293
+ type: Array,
294
+ optional: true
295
+ ),
276
296
  FastlaneCore::ConfigItem.new(
277
297
  key: :debug,
278
298
  description: "True if you want to log out a debug info",
@@ -20,6 +20,20 @@ module Fastlane
20
20
  Actions.sh(command, log: params[:debug]).chomp
21
21
  end
22
22
 
23
+ def self.should_exclude_commit(params)
24
+ commit_scope = params[:commit_scope]
25
+ scopes_to_include = params[:include_scopes]
26
+ scopes_to_ignore = params[:ignore_scopes]
27
+
28
+ unless scopes_to_include.empty?
29
+ return !scopes_to_include.include?(commit_scope)
30
+ end
31
+
32
+ unless commit_scope.nil?
33
+ return scopes_to_ignore.include?(commit_scope)
34
+ end
35
+ end
36
+
23
37
  def self.parse_commit(params)
24
38
  commit_subject = params[:commit_subject].strip
25
39
  commit_body = params[:commit_body]
@@ -1 +1 @@
1
- module Fastlane module SemanticRelease VERSION = "1.12.0" end end
1
+ module Fastlane module SemanticRelease VERSION = "1.18.0" end end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-semantic_release
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jiří Otáhal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-28 00:00:00.000000000 Z
11
+ date: 2022-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry