keep_up 0.11.0 → 0.12.1
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 +4 -4
- data/CHANGELOG.md +17 -0
- data/README.md +8 -2
- data/lib/keep_up/bundle.rb +32 -27
- data/lib/keep_up/updater.rb +9 -17
- data/lib/keep_up/version.rb +1 -1
- metadata +20 -24
- data/lib/keep_up/dependency_set.rb +0 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ed5c16ea1ed8ecc539d89c938b5e542e744b47e2c12ee0f99e132788b3d62fab
|
|
4
|
+
data.tar.gz: 692eaba69bec68833f8f7c6878c170cf2481bcfe86c2a6c35504bdb9a5f0cd21
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1a6f80d68a3e08515f6ae25e5225e471b0789a26fd875d16477bf27147ebfb6bb64a54affb0a942047c77201f619a7ecc7ecf8b9730dc23c8e43c0b5405b0eac
|
|
7
|
+
data.tar.gz: 6619f3875a4949bb12d08f8d9f89b4c20452eb5dab79dd8d31f79a009a0c011e60291dad8462106ea62e5574f47116df8fa913444edca2d69692cd24b7b04159
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.12.1 / 2026-01-30
|
|
4
|
+
|
|
5
|
+
* Support Ruby 4.0 and loosen Bundler dependency ([#128] by [mvz])
|
|
6
|
+
|
|
7
|
+
[#128]: https://github.com/mvz/keep_up/pull/128
|
|
8
|
+
|
|
9
|
+
## 0.12.0 / 2025-10-24
|
|
10
|
+
|
|
11
|
+
* Support Ruby 3.2 through 3.4, dropping support for Ruby 2.7, 3.0 and 3.1
|
|
12
|
+
([#107], [#117] and [#122] by [mvz])
|
|
13
|
+
* Drop support for Bundler 1.x ([#115] by [mvz])
|
|
14
|
+
|
|
15
|
+
[#107]: https://github.com/mvz/keep_up/pull/107
|
|
16
|
+
[#115]: https://github.com/mvz/keep_up/pull/115
|
|
17
|
+
[#117]: https://github.com/mvz/keep_up/pull/117
|
|
18
|
+
[#122]: https://github.com/mvz/keep_up/pull/122
|
|
19
|
+
|
|
3
20
|
## 0.11.0 / 2023-09-22
|
|
4
21
|
|
|
5
22
|
* Drop support for Ruby 2.6 ([#102] by [mvz])
|
data/README.md
CHANGED
|
@@ -7,7 +7,9 @@ Automatically update your dependencies.
|
|
|
7
7
|
KeepUp is not intended to be part of your application's bundle. You should
|
|
8
8
|
install it yourself as:
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
```bash
|
|
11
|
+
$ gem install keep_up
|
|
12
|
+
```
|
|
11
13
|
|
|
12
14
|
## Basic Usage
|
|
13
15
|
|
|
@@ -19,7 +21,9 @@ Gemfile.lock is not up-to-date.
|
|
|
19
21
|
|
|
20
22
|
Run `keep_up` in your project directory:
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
```bash
|
|
25
|
+
$ keep_up
|
|
26
|
+
```
|
|
23
27
|
|
|
24
28
|
KeepUp will proceed to update your dependencies one by one, committing each
|
|
25
29
|
change if updating the bundle is succesful.
|
|
@@ -72,5 +76,7 @@ the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
|
|
72
76
|
|
|
73
77
|
## License
|
|
74
78
|
|
|
79
|
+
Copyright © 2016–2026 [Matijs van Zuijlen](http://www.matijs.net)
|
|
80
|
+
|
|
75
81
|
The gem is available as open source under the terms of the
|
|
76
82
|
[MIT License](http://opensource.org/licenses/MIT).
|
data/lib/keep_up/bundle.rb
CHANGED
|
@@ -3,23 +3,22 @@
|
|
|
3
3
|
require_relative "gemfile_filter"
|
|
4
4
|
require_relative "gemspec_filter"
|
|
5
5
|
require_relative "dependency"
|
|
6
|
-
require_relative "dependency_set"
|
|
7
6
|
|
|
8
7
|
module KeepUp
|
|
9
8
|
# A Gemfile with its current set of locked dependencies.
|
|
10
9
|
class Bundle
|
|
11
10
|
OUTDATED_MATCHER =
|
|
12
|
-
/([^ ]*) \(newest ([^,]*), installed ([^,]*)(?:, requested (.*))?\)
|
|
11
|
+
/([^ ]*) \(newest ([^,]*), installed ([^,]*)(?:, requested (.*))?\)/
|
|
13
12
|
UPDATE_MATCHER =
|
|
14
|
-
/(?:Using|Installing|Fetching) ([^ ]*) ([^ ]*)(?: \(was (.*)\))
|
|
13
|
+
/(?:Using|Installing|Fetching) ([^ ]*) ([^ ]*)(?: \(was (.*)\))?/
|
|
15
14
|
|
|
16
15
|
def initialize(runner:, local:)
|
|
17
16
|
@runner = runner
|
|
18
17
|
@local = local
|
|
19
18
|
end
|
|
20
19
|
|
|
21
|
-
def
|
|
22
|
-
@
|
|
20
|
+
def outdated_dependencies
|
|
21
|
+
@outdated_dependencies ||=
|
|
23
22
|
begin
|
|
24
23
|
command = "bundle outdated --parseable#{" --local" if @local}"
|
|
25
24
|
lines = run_filtered command, OUTDATED_MATCHER
|
|
@@ -29,27 +28,31 @@ module KeepUp
|
|
|
29
28
|
end
|
|
30
29
|
end
|
|
31
30
|
|
|
32
|
-
def dependency_set
|
|
33
|
-
@dependency_set ||= DependencySet.new(dependencies)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
31
|
def check?
|
|
37
32
|
_, status = @runner.run2 "bundle check"
|
|
38
33
|
status == 0
|
|
39
34
|
end
|
|
40
35
|
|
|
36
|
+
def update_dependency(dependency)
|
|
37
|
+
specification = updated_specification_for(dependency)
|
|
38
|
+
spec_update = find_specification_update(specification)
|
|
39
|
+
spec_result =
|
|
40
|
+
update_gemspec_contents(spec_update) ||
|
|
41
|
+
update_gemfile_contents(spec_update)
|
|
42
|
+
lock_result = update_lockfile(specification, dependency.locked_version)
|
|
43
|
+
[spec_result, lock_result]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
41
48
|
def update_gemfile_contents(update)
|
|
42
|
-
update = dependency_set.find_specification_update(update)
|
|
43
49
|
return unless update
|
|
44
50
|
|
|
45
51
|
update if GemfileFilter.apply_to_file("Gemfile", update)
|
|
46
52
|
end
|
|
47
53
|
|
|
48
54
|
def update_gemspec_contents(update)
|
|
49
|
-
return unless gemspec_name
|
|
50
|
-
|
|
51
|
-
update = dependency_set.find_specification_update(update)
|
|
52
|
-
return unless update
|
|
55
|
+
return unless update && gemspec_name
|
|
53
56
|
|
|
54
57
|
update if GemspecFilter.apply_to_file(gemspec_name, update)
|
|
55
58
|
end
|
|
@@ -69,23 +72,18 @@ module KeepUp
|
|
|
69
72
|
nil
|
|
70
73
|
end
|
|
71
74
|
|
|
72
|
-
|
|
75
|
+
def updated_specification_for(dependency)
|
|
76
|
+
Gem::Specification.new(dependency.name, dependency.newest_version)
|
|
77
|
+
end
|
|
73
78
|
|
|
74
79
|
def gemspec
|
|
75
|
-
@gemspec ||=
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
eval File.read(gemspec_name), nil, gemspec_path
|
|
79
|
-
end
|
|
80
|
+
@gemspec ||= if gemspec_name
|
|
81
|
+
eval File.read(gemspec_name), nil, File.expand_path(gemspec_name)
|
|
82
|
+
end
|
|
80
83
|
end
|
|
81
84
|
|
|
82
85
|
def gemspec_dependencies
|
|
83
|
-
@gemspec_dependencies ||=
|
|
84
|
-
if gemspec
|
|
85
|
-
gemspec.dependencies
|
|
86
|
-
else
|
|
87
|
-
[]
|
|
88
|
-
end
|
|
86
|
+
@gemspec_dependencies ||= gemspec&.dependencies || []
|
|
89
87
|
end
|
|
90
88
|
|
|
91
89
|
def build_dependency(name, newest, version, requirement)
|
|
@@ -102,7 +100,7 @@ module KeepUp
|
|
|
102
100
|
end
|
|
103
101
|
|
|
104
102
|
def fetch_gemspec_dependency_requirements(name)
|
|
105
|
-
dep = gemspec_dependencies.find {
|
|
103
|
+
dep = gemspec_dependencies.find { _1.name == name }
|
|
106
104
|
return unless dep
|
|
107
105
|
|
|
108
106
|
dep.requirements_list
|
|
@@ -112,6 +110,13 @@ module KeepUp
|
|
|
112
110
|
@gemspec_name ||= Dir.glob("*.gemspec").first
|
|
113
111
|
end
|
|
114
112
|
|
|
113
|
+
def find_specification_update(update)
|
|
114
|
+
current_dependency = outdated_dependencies.find { _1.name == update.name }
|
|
115
|
+
return if !current_dependency || current_dependency.matches_spec?(update)
|
|
116
|
+
|
|
117
|
+
current_dependency.generalize_specification(update)
|
|
118
|
+
end
|
|
119
|
+
|
|
115
120
|
def run_filtered(command, regexp)
|
|
116
121
|
result = @runner.run command
|
|
117
122
|
lines = result.split("\n").reject(&:empty?)
|
data/lib/keep_up/updater.rb
CHANGED
|
@@ -16,9 +16,9 @@ module KeepUp
|
|
|
16
16
|
|
|
17
17
|
def run
|
|
18
18
|
possible_updates.each do |update|
|
|
19
|
-
|
|
20
|
-
if
|
|
21
|
-
version_control.commit_changes
|
|
19
|
+
updated_dependency = apply_updated_dependency update
|
|
20
|
+
if updated_dependency
|
|
21
|
+
version_control.commit_changes updated_dependency
|
|
22
22
|
else
|
|
23
23
|
version_control.revert_changes
|
|
24
24
|
end
|
|
@@ -26,7 +26,7 @@ module KeepUp
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def possible_updates
|
|
29
|
-
bundle.
|
|
29
|
+
bundle.outdated_dependencies
|
|
30
30
|
.select { |dep| filter.call dep }
|
|
31
31
|
.select { |dep| updateable_dependency? dep }.uniq
|
|
32
32
|
end
|
|
@@ -35,15 +35,11 @@ module KeepUp
|
|
|
35
35
|
|
|
36
36
|
def apply_updated_dependency(dependency)
|
|
37
37
|
report_intent dependency
|
|
38
|
+
spec_result, lock_result = *bundle.update_dependency(dependency)
|
|
39
|
+
final_result = spec_result || lock_result if lock_result
|
|
38
40
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
update = bundle.update_gemspec_contents(specification)
|
|
42
|
-
update2 = bundle.update_gemfile_contents(specification)
|
|
43
|
-
update ||= update2
|
|
44
|
-
result = bundle.update_lockfile(specification, dependency.locked_version)
|
|
45
|
-
report_result specification, result
|
|
46
|
-
update || result if result
|
|
41
|
+
report_result dependency, lock_result
|
|
42
|
+
final_result
|
|
47
43
|
end
|
|
48
44
|
|
|
49
45
|
def report_intent(dependency)
|
|
@@ -54,7 +50,7 @@ module KeepUp
|
|
|
54
50
|
if result
|
|
55
51
|
@out.puts "Updated #{dependency.name} to #{result.version}"
|
|
56
52
|
else
|
|
57
|
-
@out.puts "Failed updating #{dependency.name} to #{dependency.
|
|
53
|
+
@out.puts "Failed updating #{dependency.name} to #{dependency.newest_version}"
|
|
58
54
|
end
|
|
59
55
|
end
|
|
60
56
|
|
|
@@ -63,9 +59,5 @@ module KeepUp
|
|
|
63
59
|
newest_version = dependency.newest_version
|
|
64
60
|
newest_version > locked_version
|
|
65
61
|
end
|
|
66
|
-
|
|
67
|
-
def updated_specification_for(dependency)
|
|
68
|
-
Gem::Specification.new(dependency.name, dependency.newest_version)
|
|
69
|
-
end
|
|
70
62
|
end
|
|
71
63
|
end
|
data/lib/keep_up/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: keep_up
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.12.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matijs van Zuijlen
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: bundler
|
|
@@ -16,48 +15,48 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - ">="
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '2.0'
|
|
20
19
|
- - "<"
|
|
21
20
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '
|
|
21
|
+
version: '5.0'
|
|
23
22
|
type: :runtime
|
|
24
23
|
prerelease: false
|
|
25
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
25
|
requirements:
|
|
27
26
|
- - ">="
|
|
28
27
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: '
|
|
28
|
+
version: '2.0'
|
|
30
29
|
- - "<"
|
|
31
30
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
31
|
+
version: '5.0'
|
|
33
32
|
- !ruby/object:Gem::Dependency
|
|
34
33
|
name: aruba
|
|
35
34
|
requirement: !ruby/object:Gem::Requirement
|
|
36
35
|
requirements:
|
|
37
36
|
- - "~>"
|
|
38
37
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '2.
|
|
38
|
+
version: '2.3'
|
|
40
39
|
type: :development
|
|
41
40
|
prerelease: false
|
|
42
41
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
42
|
requirements:
|
|
44
43
|
- - "~>"
|
|
45
44
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '2.
|
|
45
|
+
version: '2.3'
|
|
47
46
|
- !ruby/object:Gem::Dependency
|
|
48
47
|
name: cucumber
|
|
49
48
|
requirement: !ruby/object:Gem::Requirement
|
|
50
49
|
requirements:
|
|
51
50
|
- - "~>"
|
|
52
51
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '
|
|
52
|
+
version: '10.0'
|
|
54
53
|
type: :development
|
|
55
54
|
prerelease: false
|
|
56
55
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
56
|
requirements:
|
|
58
57
|
- - "~>"
|
|
59
58
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '
|
|
59
|
+
version: '10.0'
|
|
61
60
|
- !ruby/object:Gem::Dependency
|
|
62
61
|
name: rake
|
|
63
62
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -106,56 +105,56 @@ dependencies:
|
|
|
106
105
|
requirements:
|
|
107
106
|
- - "~>"
|
|
108
107
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: '1.
|
|
108
|
+
version: '1.80'
|
|
110
109
|
type: :development
|
|
111
110
|
prerelease: false
|
|
112
111
|
version_requirements: !ruby/object:Gem::Requirement
|
|
113
112
|
requirements:
|
|
114
113
|
- - "~>"
|
|
115
114
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: '1.
|
|
115
|
+
version: '1.80'
|
|
117
116
|
- !ruby/object:Gem::Dependency
|
|
118
117
|
name: rubocop-packaging
|
|
119
118
|
requirement: !ruby/object:Gem::Requirement
|
|
120
119
|
requirements:
|
|
121
120
|
- - "~>"
|
|
122
121
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: 0.
|
|
122
|
+
version: 0.6.0
|
|
124
123
|
type: :development
|
|
125
124
|
prerelease: false
|
|
126
125
|
version_requirements: !ruby/object:Gem::Requirement
|
|
127
126
|
requirements:
|
|
128
127
|
- - "~>"
|
|
129
128
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: 0.
|
|
129
|
+
version: 0.6.0
|
|
131
130
|
- !ruby/object:Gem::Dependency
|
|
132
131
|
name: rubocop-performance
|
|
133
132
|
requirement: !ruby/object:Gem::Requirement
|
|
134
133
|
requirements:
|
|
135
134
|
- - "~>"
|
|
136
135
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: '1.
|
|
136
|
+
version: '1.25'
|
|
138
137
|
type: :development
|
|
139
138
|
prerelease: false
|
|
140
139
|
version_requirements: !ruby/object:Gem::Requirement
|
|
141
140
|
requirements:
|
|
142
141
|
- - "~>"
|
|
143
142
|
- !ruby/object:Gem::Version
|
|
144
|
-
version: '1.
|
|
143
|
+
version: '1.25'
|
|
145
144
|
- !ruby/object:Gem::Dependency
|
|
146
145
|
name: rubocop-rspec
|
|
147
146
|
requirement: !ruby/object:Gem::Requirement
|
|
148
147
|
requirements:
|
|
149
148
|
- - "~>"
|
|
150
149
|
- !ruby/object:Gem::Version
|
|
151
|
-
version: '
|
|
150
|
+
version: '3.7'
|
|
152
151
|
type: :development
|
|
153
152
|
prerelease: false
|
|
154
153
|
version_requirements: !ruby/object:Gem::Requirement
|
|
155
154
|
requirements:
|
|
156
155
|
- - "~>"
|
|
157
156
|
- !ruby/object:Gem::Version
|
|
158
|
-
version: '
|
|
157
|
+
version: '3.7'
|
|
159
158
|
- !ruby/object:Gem::Dependency
|
|
160
159
|
name: simplecov
|
|
161
160
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -188,7 +187,6 @@ files:
|
|
|
188
187
|
- lib/keep_up/application.rb
|
|
189
188
|
- lib/keep_up/bundle.rb
|
|
190
189
|
- lib/keep_up/dependency.rb
|
|
191
|
-
- lib/keep_up/dependency_set.rb
|
|
192
190
|
- lib/keep_up/file_filter.rb
|
|
193
191
|
- lib/keep_up/gemfile_filter.rb
|
|
194
192
|
- lib/keep_up/gemspec_filter.rb
|
|
@@ -204,7 +202,6 @@ licenses:
|
|
|
204
202
|
metadata:
|
|
205
203
|
homepage_uri: https://github.com/mvz/keep_up
|
|
206
204
|
rubygems_mfa_required: 'true'
|
|
207
|
-
post_install_message:
|
|
208
205
|
rdoc_options: []
|
|
209
206
|
require_paths:
|
|
210
207
|
- lib
|
|
@@ -212,15 +209,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
212
209
|
requirements:
|
|
213
210
|
- - ">="
|
|
214
211
|
- !ruby/object:Gem::Version
|
|
215
|
-
version: 2.
|
|
212
|
+
version: 3.2.0
|
|
216
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
214
|
requirements:
|
|
218
215
|
- - ">="
|
|
219
216
|
- !ruby/object:Gem::Version
|
|
220
217
|
version: '0'
|
|
221
218
|
requirements: []
|
|
222
|
-
rubygems_version:
|
|
223
|
-
signing_key:
|
|
219
|
+
rubygems_version: 4.0.3
|
|
224
220
|
specification_version: 4
|
|
225
221
|
summary: Automatically update your dependencies
|
|
226
222
|
test_files: []
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module KeepUp
|
|
4
|
-
# Set of dependencies with their current locked versions.
|
|
5
|
-
class DependencySet
|
|
6
|
-
attr_reader :dependencies
|
|
7
|
-
|
|
8
|
-
def initialize(dependencies)
|
|
9
|
-
@dependencies = dependencies
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def find_specification_update(update)
|
|
13
|
-
current_dependency = dependencies.find { |it| it.name == update.name }
|
|
14
|
-
return if !current_dependency || current_dependency.matches_spec?(update)
|
|
15
|
-
|
|
16
|
-
current_dependency.generalize_specification(update)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|