peak_flow_utils 0.1.23 → 0.1.25

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: 9048d1e1a96016821fd59947326d5e5b9abda317db387afbce0e1567a0264601
4
- data.tar.gz: d894ee6368c44aff6d17d290442a9c601ad97769ebf346296900c1a7064f628b
3
+ metadata.gz: b9305168103103b720ed0d20a835b4e6459b15ff40a1823fee5ae1dea74bd231
4
+ data.tar.gz: 25a145324e7c4bcfe85e5cf2e2d7a22e70c32a24b2dd797037b316ef108720ad
5
5
  SHA512:
6
- metadata.gz: bef1b06f54c3d4ffacde80d3c0617b6f2e87f0a9d07f78ab4fa80c4b946d3b080f6a7fbe85429d155546f609ffef716b1e7db5dff001c33d62d21e3599fd30ec
7
- data.tar.gz: de385c67f451639fe26011427bcdf54606468c4777f4c49706fcf642602a018c5d25abf73c07fd582c27dc05a1f6b6c07a93a826eba6784763e86d7ce6d8f557
6
+ metadata.gz: 248161e864a5530e6446a670a0d8647b9846654de41fe880d3bb00cd6eddaa5131fbcfea0b9c01012790764b025b5a54b6ce0ce679aa6a9dac46e5251a65fab7
7
+ data.tar.gz: c125d6c89b8c8c9f3a2366532f67756912db5335c5ee3738fc9efd48516f8e580caf3b51dac2626fcb69bd17ed2320a10ffbca90fc279b6040d8024c8b85cf15
data/Rakefile CHANGED
@@ -4,6 +4,7 @@ rescue LoadError
4
4
  puts "You must `gem install bundler` and `bundle install` to run rake tasks"
5
5
  end
6
6
 
7
+ require "logger"
7
8
  require "rdoc/task"
8
9
 
9
10
  RDoc::Task.new(:rdoc) do |rdoc|
@@ -21,6 +22,8 @@ load "rails/tasks/statistics.rake"
21
22
 
22
23
  require "bundler/gem_tasks"
23
24
 
25
+ load File.expand_path("lib/tasks/release.rake", __dir__)
26
+
24
27
  if Rails.env.development? || Rails.env.test?
25
28
  require "best_practice_project"
26
29
  BestPracticeProject.load_tasks
@@ -37,22 +37,18 @@ class PeakFlowUtils::Notifier
37
37
  random_id = ::SecureRandom.hex(16)
38
38
 
39
39
  ::PeakFlowUtils::Notifier.current.mutex.synchronize do
40
- raise "'parameters' was nil?" if ::PeakFlowUtils::Notifier.current.parameters.value.nil?
40
+ current_parameters = ::PeakFlowUtils::Notifier.current.parameters.value
41
+ raise "'parameters' was nil?" if current_parameters.nil?
41
42
 
42
- parameters_with = ::PeakFlowUtils::Notifier.current.parameters.value.clone
43
- parameters_with[random_id] = parameters
44
-
45
- ::PeakFlowUtils::Notifier.current.parameters.value = parameters_with
43
+ current_parameters[random_id] = parameters
46
44
  end
47
45
 
48
46
  begin
49
47
  yield
50
48
  ensure
51
49
  ::PeakFlowUtils::Notifier.current.mutex.synchronize do
52
- parameters_without = ::PeakFlowUtils::Notifier.current.parameters.value.clone
53
- parameters_without.delete(random_id)
54
-
55
- ::PeakFlowUtils::Notifier.current.parameters.value = parameters_without
50
+ current_parameters = ::PeakFlowUtils::Notifier.current.parameters.value
51
+ current_parameters.delete(random_id)
56
52
  end
57
53
  end
58
54
  end
@@ -1,3 +1,3 @@
1
1
  module PeakFlowUtils
2
- VERSION = "0.1.23".freeze
2
+ VERSION = "0.1.25".freeze
3
3
  end
@@ -0,0 +1,172 @@
1
+ require "English"
2
+ require "fileutils"
3
+ require "pathname"
4
+ require "rubygems/version"
5
+ require "shellwords"
6
+
7
+ class PeakFlowUtilsRubygemsRelease
8
+ VERSION_FILE = Pathname.new(File.expand_path("../peak_flow_utils/version.rb", __dir__)) unless const_defined?(:VERSION_FILE)
9
+
10
+ def call
11
+ ensure_clean_worktree!
12
+ checkout_master!
13
+ fetch!
14
+ merge!
15
+
16
+ next_version = determine_next_version
17
+
18
+ bump_version!(next_version)
19
+ commit!(next_version)
20
+ push!
21
+ gem_file = build_gem!(next_version)
22
+ push_gem!(gem_file)
23
+ delete_gem_file!(gem_file)
24
+ rescue StandardError
25
+ warn "Release failed."
26
+ raise
27
+ end
28
+
29
+ private
30
+
31
+ def ensure_clean_worktree!
32
+ dirty_entries = git_status_lines.grep_v(%r{\A\?\? peak_flow_utils-[^/]+\.gem\z})
33
+ return if dirty_entries.empty?
34
+
35
+ raise "Working tree must be clean before releasing:\n#{dirty_entries.join("\n")}"
36
+ end
37
+
38
+ def checkout_master!
39
+ run!("git", "checkout", "master")
40
+ end
41
+
42
+ def fetch!
43
+ run!("git", "fetch", remote_name)
44
+ end
45
+
46
+ def merge!
47
+ run!("git", "merge", "--ff-only", "#{remote_name}/master")
48
+ end
49
+
50
+ def determine_next_version
51
+ requested_version || bumped_version
52
+ end
53
+
54
+ def requested_version
55
+ version = ENV["VERSION"]&.strip
56
+ return if version.to_s.empty?
57
+
58
+ Gem::Version.new(version)
59
+ version
60
+ end
61
+
62
+ def bumped_version
63
+ case bump_type
64
+ when "major"
65
+ [version_segments[0] + 1, 0, 0].join(".")
66
+ when "minor"
67
+ [version_segments[0], version_segments[1] + 1, 0].join(".")
68
+ when "patch"
69
+ [version_segments[0], version_segments[1], version_segments[2] + 1].join(".")
70
+ else
71
+ raise "Unsupported BUMP=#{bump_type.inspect}. Use patch, minor, major, or VERSION=x.y.z."
72
+ end
73
+ end
74
+
75
+ def version_segments
76
+ @version_segments ||= begin
77
+ segments = Gem::Version.new(current_version).segments
78
+ segments << 0 while segments.length < 3
79
+ segments
80
+ end
81
+ end
82
+
83
+ def current_version
84
+ @current_version ||= VERSION_FILE.read[/VERSION = "([^"]+)"/, 1] || raise("Could not find current version")
85
+ end
86
+
87
+ def bump_version!(next_version)
88
+ raise "Next version must differ from current version" if next_version == current_version
89
+
90
+ VERSION_FILE.write(
91
+ VERSION_FILE.read.sub(
92
+ /VERSION = "[^"]+"/,
93
+ %(VERSION = "#{next_version}")
94
+ )
95
+ )
96
+
97
+ run!("bundle", "install")
98
+ run!("git", "add", VERSION_FILE.to_s, "Gemfile.lock")
99
+ end
100
+
101
+ def commit!(next_version)
102
+ run!("git", "commit", "-m", "Release #{next_version}")
103
+ end
104
+
105
+ def push!
106
+ run!("git", "push", remote_name, "master")
107
+ end
108
+
109
+ def build_gem!(next_version)
110
+ gem_file = "peak_flow_utils-#{next_version}.gem"
111
+ run!("gem", "build", "peak_flow_utils.gemspec")
112
+ gem_file
113
+ end
114
+
115
+ def push_gem!(gem_file)
116
+ run!("gem", "push", gem_file)
117
+ end
118
+
119
+ def delete_gem_file!(gem_file)
120
+ FileUtils.rm_f(gem_file)
121
+ end
122
+
123
+ def git_status_lines
124
+ capture!("git", "status", "--porcelain").split("\n").reject(&:empty?)
125
+ end
126
+
127
+ def bump_type
128
+ ENV.fetch("BUMP", "patch")
129
+ end
130
+
131
+ def remote_name
132
+ ENV.fetch("REMOTE", "origin")
133
+ end
134
+
135
+ def capture!(*command)
136
+ output = `#{command.map { |part| Shellwords.escape(part) }.join(" ")}`
137
+ raise "Command failed: #{command.join(' ')}" unless $CHILD_STATUS&.success?
138
+
139
+ output
140
+ end
141
+
142
+ def run!(*command)
143
+ return if system(*command)
144
+
145
+ raise "Command failed: #{command.join(' ')}"
146
+ end
147
+ end
148
+
149
+ namespace :release do
150
+ desc "Release a patch version from master by fetching, fast-forward merging, bumping version, pushing, and publishing"
151
+ task patch: :environment do
152
+ ENV["BUMP"] = "patch"
153
+ PeakFlowUtilsRubygemsRelease.new.call
154
+ end
155
+
156
+ desc "Release a minor version from master by fetching, fast-forward merging, bumping version, pushing, and publishing"
157
+ task minor: :environment do
158
+ ENV["BUMP"] = "minor"
159
+ PeakFlowUtilsRubygemsRelease.new.call
160
+ end
161
+
162
+ desc "Release a major version from master by fetching, fast-forward merging, bumping version, pushing, and publishing"
163
+ task major: :environment do
164
+ ENV["BUMP"] = "major"
165
+ PeakFlowUtilsRubygemsRelease.new.call
166
+ end
167
+
168
+ desc "Release the gem from master by fetching, fast-forward merging, bumping version, pushing, and publishing"
169
+ task rubygems: :environment do
170
+ PeakFlowUtilsRubygemsRelease.new.call
171
+ end
172
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peak_flow_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.23
4
+ version: 0.1.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - kaspernj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-01-11 00:00:00.000000000 Z
11
+ date: 2026-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -175,6 +175,7 @@ files:
175
175
  - lib/peak_flow_utils/thread_callbacks_patch.rb
176
176
  - lib/peak_flow_utils/version.rb
177
177
  - lib/tasks/peak_flow_utils_tasks.rake
178
+ - lib/tasks/release.rake
178
179
  homepage: https://github.com/kaspernj/peak_flow_utils
179
180
  licenses:
180
181
  - MIT