git-version-bump 0.18.0 → 0.18.0.7.g2e0c3c4

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: 80ff2d2ad4a6b5c8ea81891a9004d97507f4d9075081638034e319cd9ddccb81
4
- data.tar.gz: ea24000b5f002ae3f3369cd41bff4b31c91c7dfd32a88d1ae45cfa6ce0648114
3
+ metadata.gz: 32795b930c87e8796ae34c50d42703165e8dc083d4fa4e6cd19763f49f71d78a
4
+ data.tar.gz: bdf0755443972b724acb3be0cf0b677cc5a698f52533ec9afe8c47dd35ec5553
5
5
  SHA512:
6
- metadata.gz: 837115664720c3e410e3f07b9111a81bad5451fcf81ca76c4b6255d387a4ce802098c2fe178157eaddf01fb5d67cc62dd744027f73f8c5c387e34fb363ecb840
7
- data.tar.gz: 1f9b8a018b2c8d54bd0eea72d65578d6fe28f799a32579e2397e22ffddcce2335c530d0db5ba96627e1987d0133407a58f9141477eb6e3cbe29b74ffc2ba8754
6
+ metadata.gz: 3e97d8fd061b44c0f841c435f303930eacf1834acfb555c3b69f5ab7cfc918b678fa452e4f5ce1b8b0b780d5f01546226791a0fa45ad6985fc252d7c9cd63d5e
7
+ data.tar.gz: 82f01e33ed949be7ad11a544a24a44383e8f01896b67ff242c955287ea7ea51987e43c7afb9727afd026c63bce78bf0d06b3729016c8af5e4ca429d4ed832d53
@@ -0,0 +1,33 @@
1
+ name: "Release to RubyGems"
2
+ on:
3
+ push:
4
+ branch: [main]
5
+ release:
6
+ types: [created]
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ upload:
11
+ runs-on: ubuntu-latest
12
+ name: "Upload gem"
13
+
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+ with:
17
+ fetch-depth: 0
18
+
19
+ - name: Install ruby
20
+ uses: ruby/setup-ruby@v1
21
+ with:
22
+ ruby-version: '2.7'
23
+ bundler-cache: true
24
+
25
+ - name: Workaround for https://github.com/actions/checkout/issues/290
26
+ run: |
27
+ git fetch --force --tags
28
+
29
+ - name: Do The Needful
30
+ env:
31
+ GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
32
+ run: |
33
+ bundle exec rake release:rubygem_push
@@ -1,8 +1,33 @@
1
1
  module GitVersionBump
2
- VERSION = GVB.version
3
- MAJOR_VERSION = GVB.major_version
4
- MINOR_VERSION = GVB.minor_version
5
- PATCH_VERSION = GVB.patch_version
6
- INTERNAL_REVISION = GVB.internal_revision
7
- DATE = GVB.date
2
+ def self.VERSION
3
+ GVB.version
4
+ end
5
+
6
+ def self.MAJOR_VERSION
7
+ GVB.major_version
8
+ end
9
+
10
+ def self.MINOR_VERSION
11
+ GVB.minor_version
12
+ end
13
+
14
+ def self.PATCH_VERSION
15
+ GVB.patch_version
16
+ end
17
+
18
+ def self.INTERNAL_REVISION
19
+ GVB.internal_revision
20
+ end
21
+
22
+ def self.DATE
23
+ GVB.date
24
+ end
25
+
26
+ def self.const_missing(c)
27
+ if self.respond_to?(c) && c =~ /\A[A-Z_]+\z/
28
+ public_send c
29
+ else
30
+ super
31
+ end
32
+ end
8
33
  end
@@ -15,34 +15,21 @@ module GitVersionBump
15
15
  end
16
16
 
17
17
  VERSION_TAG_GLOB = 'v[0-9]*.[0-9]*.*[0-9]'
18
+ private_constant :VERSION_TAG_GLOB
18
19
 
19
20
  DEVNULL = Gem.win_platform? ? "NUL" : "/dev/null"
21
+ private_constant :DEVNULL
20
22
 
21
- def self.version(use_local_git=false, include_lite_tags=false)
22
- git_cmd = ["git", "-C", git_dir(use_local_git), "describe", "--dirty=.1.dirty.#{Time.now.strftime("%Y%m%d.%H%M%S")}", "--match=#{VERSION_TAG_GLOB}"]
23
- git_cmd << "--tags" if include_lite_tags
24
-
25
- begin
26
- run_command(git_cmd, "getting current version descriptor").
27
- strip.
28
- gsub(/^v/, '').
29
- gsub('-', '.')
30
- rescue CommandFailure
31
- # git failed us; we're either not in a git repo or else we've never
32
- # tagged anything before.
33
-
34
- # Are we in a git repo with no tags? If so, try to use the gemspec
35
- # and if that fails then abort
36
- begin
37
- gem_version(use_local_git)
38
- rescue VersionUnobtainable
39
- "0.0.0.1.ENOTAG"
40
- end
23
+ def self.version(use_local_dir=false, include_lite_tags=false)
24
+ if use_local_dir
25
+ repo_version(true, include_lite_tags)
26
+ else
27
+ gem_version || repo_version(false, include_lite_tags)
41
28
  end
42
29
  end
43
30
 
44
- def self.major_version(use_local_git=false, include_lite_tags=false)
45
- ver = version(use_local_git, include_lite_tags)
31
+ def self.major_version(use_local_dir=false, include_lite_tags=false)
32
+ ver = version(use_local_dir, include_lite_tags)
46
33
  v = ver.split('.')[0]
47
34
 
48
35
  unless v =~ /^[0-9]+$/
@@ -53,8 +40,8 @@ module GitVersionBump
53
40
  return v.to_i
54
41
  end
55
42
 
56
- def self.minor_version(use_local_git=false, include_lite_tags=false)
57
- ver = version(use_local_git, include_lite_tags)
43
+ def self.minor_version(use_local_dir=false, include_lite_tags=false)
44
+ ver = version(use_local_dir, include_lite_tags)
58
45
  v = ver.split('.')[1]
59
46
 
60
47
  unless v =~ /^[0-9]+$/
@@ -65,8 +52,8 @@ module GitVersionBump
65
52
  return v.to_i
66
53
  end
67
54
 
68
- def self.patch_version(use_local_git=false, include_lite_tags=false)
69
- ver = version(use_local_git, include_lite_tags)
55
+ def self.patch_version(use_local_dir=false, include_lite_tags=false)
56
+ ver = version(use_local_dir, include_lite_tags)
70
57
  v = ver.split('.')[2]
71
58
 
72
59
  unless v =~ /^[0-9]+$/
@@ -77,34 +64,15 @@ module GitVersionBump
77
64
  return v.to_i
78
65
  end
79
66
 
80
- def self.internal_revision(use_local_git=false, include_lite_tags=false)
81
- version(use_local_git, include_lite_tags).split('.', 4)[3].to_s
67
+ def self.internal_revision(use_local_dir=false, include_lite_tags=false)
68
+ version(use_local_dir, include_lite_tags).split('.', 4)[3].to_s
82
69
  end
83
70
 
84
- def self.date(use_local_git=false)
85
- # Are we in a git tree?
86
- begin
87
- try_command(["git", "-C", git_dir(use_local_git), "status"])
88
-
89
- if dirty_tree?(git_dir(use_local_git))
90
- Time.now.strftime("%F")
91
- else
92
- # Clean tree. Date of last commit is needed.
93
- (run_command(["git", "-C", git_dir(use_local_git), "show", "--no-show-signature", "--format=format:%cd", "--date=short"], "getting date of last commit").lines.first || "").strip
94
- end
95
- rescue CommandFailure
96
- # Presumably not in a git tree
97
- if use_local_git
98
- raise RuntimeError,
99
- "GVB.date(use_local_git=true) called from non-git location"
100
- end
101
-
102
- if spec = caller_gemspec
103
- spec.date.strftime("%F")
104
- else
105
- raise RuntimeError,
106
- "GVB.date called from mysterious, non-gem location."
107
- end
71
+ def self.date(use_local_dir=false, include_lite_tags = false)
72
+ if use_local_dir
73
+ repo_date(true, include_lite_tags)
74
+ else
75
+ gem_date || repo_date(false, include_lite_tags)
108
76
  end
109
77
  end
110
78
 
@@ -186,46 +154,47 @@ module GitVersionBump
186
154
  # version. Since hashes are hex, we're boned. Sorry about that. Don't
187
155
  # make builds off a branch, basically.
188
156
  #
189
- def self.commit_date_version(use_local_git = false)
190
- commit_dates = run_command(["git", "-C", git_dir(use_local_git), "log", "--no-show-signature", "--format=%at"], "getting dates of all commits").
157
+ def self.commit_date_version(use_local_dir = false)
158
+ if use_local_dir
159
+ commit_date_version_string(true)
160
+ else
161
+ gem_version || commit_date_version_string(false)
162
+ end
163
+ end
164
+
165
+ def self.commit_date_version_string(use_local_dir = false)
166
+ commit_dates = run_command(["git", "-C", git_dir(use_local_dir).to_s, "log", "--no-show-signature", "--format=%at"], "getting dates of all commits").
191
167
  split("\n").
192
168
  map { |l| Time.at(Integer(l)).strftime("%Y%m%d") }
193
169
 
194
- if $? == 0
195
- # We got a log; calculate our version number and we're done.
196
- version_date = commit_dates.first
197
- commit_count = commit_dates.select { |d| d == version_date }.length - 1
198
- dirty_suffix = if dirty_tree?
199
- ".dirty.#{Time.now.strftime("%Y%m%d.%H%M%S")}"
200
- else
201
- ""
202
- end
203
-
204
- return "0.#{version_date}.#{commit_count}#{dirty_suffix}"
170
+ version_date = commit_dates.first
171
+ commit_count = commit_dates.select { |d| d == version_date }.length - 1
172
+ dirty_suffix = if dirty_tree?
173
+ ".dirty.#{Time.now.strftime("%Y%m%d.%H%M%S")}"
174
+ else
175
+ ""
205
176
  end
206
177
 
207
- # git failed us; either we're not in a git repo or else it's a git
208
- # repo that's not got any commits.
209
-
210
- # Are we in a git repo with no commits? If so, try to use the gemspec
211
- # and if that fails then abort
212
- begin
213
- return gem_version(use_local_git)
214
- rescue VersionUnobtainable
178
+ return "0.#{version_date}.#{commit_count}#{dirty_suffix}"
179
+ rescue CommandFailure => ex
180
+ p :GVB_CDVS_CMD_FAIL, ex.output if debug?
181
+ if ex.output =~ /fatal: your current branch .* does not have any commits yet/
215
182
  return "0.0.0.1.ENOCOMMITS"
183
+ else
184
+ raise VersionUnobtainable, "Could not get commit date-based version from git repository at #{git_dir(use_local_dir)}"
216
185
  end
217
186
  end
218
187
 
219
- private
220
-
221
188
  def self.git_available?
222
189
  try_command(["git", "--version"])
223
190
  end
191
+ private_class_method :git_available?
224
192
 
225
193
  def self.dirty_tree?(dir='.')
226
194
  # Are we in a dirty, dirty tree?
227
- ! run_command(["git", "-C", dir, "status", "--porcelain"], "checking for tree cleanliness").empty?
195
+ ! run_command(["git", "-C", dir.to_s, "status", "--porcelain"], "checking for tree cleanliness").empty?
228
196
  end
197
+ private_class_method :dirty_tree?
229
198
 
230
199
  # Execute a command, specified as an array.
231
200
  #
@@ -245,7 +214,7 @@ module GitVersionBump
245
214
  p :GVB_CMD, desc, cmd
246
215
  end
247
216
 
248
- out, status = Open3.capture2e(*cmd)
217
+ out, status = Open3.capture2e({"LC_MESSAGES" => "C"}, *cmd)
249
218
 
250
219
  if status.exitstatus != 0
251
220
  raise CommandFailure.new("Failed while #{desc}", out, status.exitstatus)
@@ -253,6 +222,7 @@ module GitVersionBump
253
222
  out
254
223
  end
255
224
  end
225
+ private_class_method :run_command
256
226
 
257
227
  # Execute a command, and return whether it succeeded or failed.
258
228
  #
@@ -264,6 +234,7 @@ module GitVersionBump
264
234
  false
265
235
  end
266
236
  end
237
+ private_class_method :try_command
267
238
 
268
239
  def self.caller_file
269
240
  # Who called us? Because this method gets called from other methods
@@ -275,8 +246,9 @@ module GitVersionBump
275
246
  map(&:path).
276
247
  tap { |c| p :CALLER_LOCATIONS, c if debug? }.
277
248
  find { |l| l != __FILE__ }
278
- ).realpath.to_s rescue nil
249
+ ).realpath rescue nil
279
250
  end
251
+ private_class_method :caller_file
280
252
 
281
253
  def self.caller_gemspec
282
254
  cf = caller_file or return nil
@@ -302,54 +274,75 @@ module GitVersionBump
302
274
  end
303
275
  end.compact!
304
276
 
305
- if search_dirs.find { |d| cf.index(d) == 0 }
277
+ if search_dirs.find { |d| cf.to_s.index(d) == 0 }
306
278
  return spec
307
279
  end
308
280
  end
309
281
 
310
- raise VersionUnobtainable,
311
- "Unable to find gemspec for caller file #{cf}"
282
+ if debug?
283
+ p :GVB_NO_GEMSPEC, cf
284
+ end
285
+
286
+ nil
312
287
  end
288
+ private_class_method :caller_gemspec
313
289
 
314
- def self.gem_version(use_local_git = false)
315
- if use_local_git
316
- raise VersionUnobtainable,
317
- "Unable to determine version from local git repo. This should never happen."
318
- end
290
+ def self.gem_version
291
+ caller_gemspec&.version&.to_s
292
+ end
293
+ private_class_method :gem_version
319
294
 
320
- if spec = caller_gemspec
321
- return spec.version.to_s
322
- else
323
- # If we got here, something went *badly* wrong -- presumably, we
324
- # weren't called from within a loaded gem, and so we've got *no*
325
- # idea what's going on. Time to bail!
326
- if git_available?
327
- raise VersionUnobtainable,
328
- "GVB.version(#{use_local_git.inspect}) failed, and I really don't know why."
295
+ def self.gem_date
296
+ caller_gemspec&.date&.strftime("%F")
297
+ end
298
+ private_class_method :gem_version
299
+
300
+ def self.repo_version(use_local_dir, include_lite_tags)
301
+ git_cmd = ["git", "-C", git_dir(use_local_dir).to_s, "describe", "--dirty=.1.dirty.#{Time.now.strftime("%Y%m%d.%H%M%S")}", "--match=#{VERSION_TAG_GLOB}"]
302
+ git_cmd << "--tags" if include_lite_tags
303
+
304
+ begin
305
+ run_command(git_cmd, "getting current version descriptor").
306
+ strip.
307
+ gsub(/^v/, '').
308
+ gsub('-', '.')
309
+ rescue CommandFailure => ex
310
+ p :GVB_REPO_VERSION_FAILURE, ex.output if debug?
311
+ if ex.output =~ /fatal: No names found, cannot describe anything/
312
+ # aka "no tags, bro"
313
+ "0.0.0.1.ENOTAG"
329
314
  else
330
- raise VersionUnobtainable,
331
- "GVB.version(#{use_local_git.inspect}) failed; perhaps you need to install git?"
315
+ raise VersionUnobtainable, "Could not get version from gemspec or git repository at #{git_dir(use_local_dir)}"
332
316
  end
333
317
  end
334
318
  end
319
+ private_class_method :repo_version
335
320
 
336
- def self.git_dir(use_local_git = false)
337
- if use_local_git
338
- unless git_available?
339
- raise RuntimeError,
340
- "Cannot use git-version-bump with use_local_git, as git is not installed"
341
- end
321
+ def self.repo_date(use_local_dir, include_lite_tags)
322
+ if dirty_tree?(git_dir(use_local_dir))
323
+ Time.now.strftime("%F")
324
+ else
325
+ # Clean tree. Date of last commit is needed.
326
+ (run_command(["git", "-C", git_dir(use_local_dir).to_s, "show", "--no-show-signature", "--format=format:%cd", "--date=short"], "getting date of last commit").lines.first || "").strip
327
+ end
328
+ rescue CommandFailure
329
+ raise VersionUnobtainable, "Could not get commit date from git repository at #{git_dir(use_local_dir)}"
330
+ end
331
+ private_class_method :repo_date
342
332
 
333
+ def self.git_dir(use_local_dir = false)
334
+ if use_local_dir
343
335
  Dir.pwd
344
336
  else
345
- File.dirname(caller_file) rescue nil || Dir.pwd
346
- end.tap { |d| p :GVB_GIT_DIR, use_local_git, d if debug? }
337
+ caller_file&.dirname || Dir.pwd
338
+ end.tap { |d| p :GVB_GIT_DIR, use_local_dir, d if debug? }
347
339
  end
348
340
  private_class_method :git_dir
349
341
 
350
342
  def self.debug?
351
343
  ENV.key?("GVB_DEBUG")
352
344
  end
345
+ private_class_method :debug?
353
346
  end
354
347
 
355
348
  GVB = GitVersionBump unless defined? GVB
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-version-bump
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.18.0.7.g2e0c3c4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Palmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-05 00:00:00.000000000 Z
11
+ date: 2023-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github-release
@@ -74,6 +74,7 @@ extensions: []
74
74
  extra_rdoc_files:
75
75
  - README.md
76
76
  files:
77
+ - ".github/workflows/release.yml"
77
78
  - ".gitignore"
78
79
  - Gemfile
79
80
  - LICENCE
@@ -98,11 +99,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
99
  version: 2.1.0
99
100
  required_rubygems_version: !ruby/object:Gem::Requirement
100
101
  requirements:
101
- - - ">="
102
+ - - ">"
102
103
  - !ruby/object:Gem::Version
103
- version: '0'
104
+ version: 1.3.1
104
105
  requirements: []
105
- rubygems_version: 3.2.5
106
+ rubygems_version: 3.1.6
106
107
  signing_key:
107
108
  specification_version: 4
108
109
  summary: Manage your app version entirely via git tags