nomono 1.0.8 → 1.1.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +91 -2
- data/LICENSE.md +1 -1
- data/README.md +34 -15
- data/lib/nomono/resolver.rb +64 -2
- data/lib/nomono/version.rb +4 -1
- data/sig/nomono.rbs +4 -0
- data.tar.gz.sig +0 -0
- metadata +42 -40
- metadata.gz.sig +0 -0
- data/AGPL-3.0-only.md +0 -235
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -275
- data/FUNDING.md +0 -70
- data/RUBOCOP.md +0 -71
- data/SECURITY.md +0 -21
- data/certs/pboling.pem +0 -27
- data/sig/nomono/version.rbs +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2230196c44321a0295b6d424a5e55705829fb34dabd9a2ba330cfe957aa16aa7
|
|
4
|
+
data.tar.gz: 4df38075d47663488924162ddbfbd1c506b0b284b6daa566aa030833835c25b0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0e7dcbeaf613752a03e3053dcf9434630e48b09eadab66ea957d268cdbb90d0f6acf1553fcc534899d88e52efb741dd362233b8ef25f2595aa165a155de32e88
|
|
7
|
+
data.tar.gz: '08af5e9260fe967953f166e716415336703cd3219bc37e7c94363a1e7205c2fe3a5482dfd2bdf5df6b30533076c5db848603a89c54c35fede6859b1dc19a3ac2'
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,89 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.1.1] - 2026-07-28
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.1.1][1.1.1t]
|
|
36
|
+
- COVERAGE: 94.31% -- 116/123 lines in 7 files
|
|
37
|
+
- BRANCH COVERAGE: 86.67% -- 39/45 branches in 7 files
|
|
38
|
+
- 25.00% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- kettle-jem-template-20260726-001 - Projects now include YARD lint
|
|
43
|
+
configuration and documentation dependencies so documentation issues fail
|
|
44
|
+
before generated docs are refreshed.
|
|
45
|
+
|
|
46
|
+
- kettle-jem-template-20260727-001 - Spec harness documentation now lists the
|
|
47
|
+
RSpec helpers provided by `kettle-test`.
|
|
48
|
+
|
|
49
|
+
### Changed
|
|
50
|
+
|
|
51
|
+
- kettle-jem-template-20260725-001 - Release pull request branches beginning
|
|
52
|
+
with `feature/release` now run JRuby and TruffleRuby workflows.
|
|
53
|
+
- kettle-jem-template-20260725-002 - Version specs now use `anonymous_loader` to
|
|
54
|
+
cover `version.rb` without redefining constants, or are removed when version
|
|
55
|
+
specs are not managed for the project.
|
|
56
|
+
|
|
57
|
+
- kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
|
|
58
|
+
setup-ruby-flash planning and can prepare appraisal-only jobs without
|
|
59
|
+
installing the main Gemfile bundle.
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- kettle-jem-template-20260726-002 - Generated version files now document their
|
|
64
|
+
version namespace and constants, reducing warning-only YARD lint output.
|
|
65
|
+
|
|
66
|
+
- kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
|
|
67
|
+
QLTY, and Codecov as optional, so provider outages do not fail CI when local
|
|
68
|
+
coverage thresholds still pass.
|
|
69
|
+
- kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
|
|
70
|
+
same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
|
|
71
|
+
installs are not reported as project lint debt.
|
|
72
|
+
|
|
73
|
+
## [1.1.0] - 2026-07-22
|
|
74
|
+
|
|
75
|
+
- TAG: [v1.1.0][1.1.0t]
|
|
76
|
+
- COVERAGE: 97.56% -- 120/123 lines in 7 files
|
|
77
|
+
- BRANCH COVERAGE: 86.67% -- 39/45 branches in 7 files
|
|
78
|
+
- 12.50% documented
|
|
79
|
+
|
|
80
|
+
### Added
|
|
81
|
+
|
|
82
|
+
- Added opt-in path alias normalization so local sibling paths can be rewritten
|
|
83
|
+
to a configured canonical spelling before Bundler writes them to lockfiles.
|
|
84
|
+
|
|
85
|
+
### Changed
|
|
86
|
+
|
|
87
|
+
- kettle-jem-template-20260716-001 - Shim gemspec manifests now include
|
|
88
|
+
`LICENSE.md` instead of nonexistent `LICENSE.txt`.
|
|
89
|
+
- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
|
|
90
|
+
repository-only files by default to reduce downstream distro packaging churn.
|
|
91
|
+
|
|
92
|
+
- kettle-jem-template-20260720-001 - Generated READMEs can now render
|
|
93
|
+
template-managed corporate sponsor logos from project or family config.
|
|
94
|
+
- kettle-jem-template-20260720-002 - Generated development Gemfiles now use the
|
|
95
|
+
released `tree_sitter_language_pack` gem 1.13.3 or newer by default.
|
|
96
|
+
- kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
|
|
97
|
+
config now uses the installed `smorg-rb` Ruby driver name.
|
|
98
|
+
- kettle-jem-template-20260720-004 - Generated multi-engine workflow files now
|
|
99
|
+
omit JRuby and TruffleRuby jobs when project config declares MRI-only engines.
|
|
100
|
+
- kettle-jem-template-20260720-005 - Generated README Support & Community rows
|
|
101
|
+
now include a RubyForum help badge.
|
|
102
|
+
|
|
103
|
+
### Fixed
|
|
104
|
+
|
|
105
|
+
- Documented why `nomono` uses an explicit Gemfile loader instead of the
|
|
106
|
+
Bundler plugin DSL or RubyGems plugin autoload hooks, and simplified
|
|
107
|
+
`nomono`'s own local Gemfiles to load the local Bundler integration directly.
|
|
108
|
+
|
|
109
|
+
- Addressed review feedback by keeping split license detail links pointed at
|
|
110
|
+
the source repository, keeping `tree_sitter_language_pack` in the templating
|
|
111
|
+
dependency path only, and regenerating YARD documentation.
|
|
112
|
+
|
|
113
|
+
- Local modular Gemfiles now load `nomono/bundler` with the normal Bundler
|
|
114
|
+
require path so RuboCop Gradual style checks pass under appraisal bundles.
|
|
115
|
+
|
|
33
116
|
## [1.0.8] - 2026-07-13
|
|
34
117
|
|
|
35
118
|
- TAG: [v1.0.8][1.0.8t]
|
|
@@ -82,7 +165,7 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
82
165
|
### Fixed
|
|
83
166
|
|
|
84
167
|
- Corrected OpenCollective funding metadata to use the `kettle-dev` collective.
|
|
85
|
-
- Updated the default local workspace root from `$HOME/src/kettle-
|
|
168
|
+
- Updated the default local workspace root from `$HOME/src/kettle-dev` to
|
|
86
169
|
`$HOME/src/my`.
|
|
87
170
|
|
|
88
171
|
## [1.0.4] - 2026-06-14
|
|
@@ -178,7 +261,13 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
178
261
|
- TAG: [v1.0.0][1.0.0t]
|
|
179
262
|
- 12.50% documented
|
|
180
263
|
|
|
181
|
-
[Unreleased]: https://github.com/kettle-dev/nomono/compare/v1.
|
|
264
|
+
[Unreleased]: https://github.com/kettle-dev/nomono/compare/v1.1.1...HEAD
|
|
265
|
+
[1.1.1]: https://github.com/kettle-dev/nomono/compare/v1.1.0...v1.1.1
|
|
266
|
+
[1.1.1t]: https://github.com/kettle-dev/nomono/releases/tag/v1.1.1
|
|
267
|
+
[1.1.0]: https://github.com/kettle-dev/nomono/compare/v1.0.9...v1.1.0
|
|
268
|
+
[1.1.0t]: https://github.com/kettle-dev/nomono/releases/tag/v1.1.0
|
|
269
|
+
[1.0.9]: https://github.com/kettle-dev/nomono/compare/v1.0.8...v1.0.9
|
|
270
|
+
[1.0.9t]: https://github.com/kettle-dev/nomono/releases/tag/v1.0.9
|
|
182
271
|
[1.0.8]: https://github.com/kettle-dev/nomono/compare/v1.0.7...v1.0.8
|
|
183
272
|
[1.0.8t]: https://github.com/kettle-dev/nomono/releases/tag/v1.0.8
|
|
184
273
|
[1.0.7]: https://github.com/kettle-dev/nomono/compare/v1.0.6...v1.0.7
|
data/LICENSE.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This project is made available under the following license.
|
|
4
4
|
Choose the option that best fits your use case:
|
|
5
5
|
|
|
6
|
-
- [AGPL-3.0-only](AGPL-3.0-only.md)
|
|
6
|
+
- [AGPL-3.0-only](https://github.com/kettle-dev/nomono/blob/main/AGPL-3.0-only.md)
|
|
7
7
|
|
|
8
8
|
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
|
|
9
9
|
|
data/README.md
CHANGED
|
@@ -40,8 +40,8 @@ Use `require "nomono/bundler"` from Gemfiles or modular Gemfiles; this is the ex
|
|
|
40
40
|
| Works with Truffle Ruby | [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
|
|
41
41
|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
42
42
|
| Works with MRI Ruby 3 | [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
|
|
43
|
-
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
|
44
|
-
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on
|
|
43
|
+
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
|
44
|
+
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
|
|
45
45
|
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
|
|
46
46
|
| Compliance | [![License: AGPL-3.0-only][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
|
|
47
47
|
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
|
|
@@ -139,16 +139,17 @@ Nomono has an *environment contract*. By default (`prefix: "NOMONO_GEMS"`):
|
|
|
139
139
|
- Any other value — treated as an explicit workspace root path (`/absolute/path` used as-is; relative path prepended with `$HOME`)
|
|
140
140
|
- `NOMONO_GEMS_VENDORED_GEMS` (or legacy `VENDORED_GEMS`) is a comma-delimited list of gem names resolved from a vendor directory. This is **independent** of `NOMONO_GEMS_DEV` — it applies when you have vendored copies of specific gems that should override both the workspace and released versions.
|
|
141
141
|
- `NOMONO_GEMS_VENDOR_GEM_DIR` (or legacy `VENDOR_GEM_DIR`) is the base path of the vendor directory used for gems listed in `NOMONO_GEMS_VENDORED_GEMS`. Defaults to `$workspace_root/vendor`. This is **not** an alternative form of the workspace root — it only affects vendored gems.
|
|
142
|
+
- `NOMONO_GEMS_PATH_ALIASES` (or global fallback `NOMONO_PATH_ALIASES`) is a comma-delimited list of `source=canonical` absolute path aliases. Each pair must resolve to the same real directory. Matching local gem paths are rewritten to the canonical spelling before Bundler receives them, preventing `Gemfile.lock` churn from equivalent paths such as `/var/home/...` and `/home/...`.
|
|
142
143
|
- `NOMONO_GEMS_DEBUG` enables debug output from nomono.
|
|
143
144
|
|
|
144
145
|
### Examples
|
|
145
146
|
|
|
146
|
-
For example, in the `kettle-dev` family of gems, which nomono is a part of, the parameters used are `prefix: "
|
|
147
|
+
For example, in the `kettle-dev` family of gems, which nomono is a part of, the parameters used are `prefix: "KETTLE_DEV"`, `path_env: "KETTLE_DEV_DEV"`.
|
|
147
148
|
This means that the following is true:
|
|
148
149
|
|
|
149
|
-
- `
|
|
150
|
-
- `
|
|
151
|
-
- `
|
|
150
|
+
- `KETTLE_DEV_DEV=false` (or unset) — released gems from configured gem server (CI / single-gem development default)
|
|
151
|
+
- `KETTLE_DEV_DEV=true` — local sibling gems from `$HOME/src/kettle-dev/<gem>` (recommended for full-workspace development)
|
|
152
|
+
- `KETTLE_DEV_DEV=/custom/path` — local sibling gems from `/custom/path/<gem>` (non-standard workspace layout only)
|
|
152
153
|
|
|
153
154
|
You can override the env variable names via options. Here is an example for use with rubocop-lts gems:
|
|
154
155
|
|
|
@@ -172,10 +173,10 @@ when they are enabled:
|
|
|
172
173
|
```ruby
|
|
173
174
|
source "https://gem.coop"
|
|
174
175
|
|
|
175
|
-
if ENV.fetch("
|
|
176
|
+
if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false").zero?
|
|
176
177
|
gem "kettle-dev", "~> 2.2", ">= 2.2.15"
|
|
177
178
|
gem "kettle-test", "~> 2.0", ">= 2.0.6"
|
|
178
|
-
gem "kettle-soup-cover", "~> 3.0
|
|
179
|
+
gem "kettle-soup-cover", "~> 3.0", ">= 3.0.1"
|
|
179
180
|
else
|
|
180
181
|
eval_gemfile "gemfiles/modular/local.gemfile"
|
|
181
182
|
end
|
|
@@ -188,8 +189,11 @@ require "nomono/bundler"
|
|
|
188
189
|
|
|
189
190
|
eval_nomono_gems(
|
|
190
191
|
gems: %w[kettle-dev kettle-test kettle-soup-cover],
|
|
191
|
-
prefix: "
|
|
192
|
-
path_env: "
|
|
192
|
+
prefix: "KETTLE_DEV",
|
|
193
|
+
path_env: "KETTLE_DEV_DEV",
|
|
194
|
+
path_aliases: {
|
|
195
|
+
"/var/home/pboling" => "/home/pboling"
|
|
196
|
+
},
|
|
193
197
|
vendored_gems_env: "VENDORED_GEMS",
|
|
194
198
|
vendor_gem_dir_env: "VENDOR_GEM_DIR",
|
|
195
199
|
debug_env: "KETTLE_DEV_DEBUG"
|
|
@@ -198,9 +202,22 @@ eval_nomono_gems(
|
|
|
198
202
|
|
|
199
203
|
This is the pattern generated by `kettle-jem`: the Gemfile remains readable,
|
|
200
204
|
and nomono owns the path normalization for sibling repositories. When
|
|
201
|
-
`
|
|
205
|
+
`KETTLE_DEV_DEV=false` or is unset, the modular local override is skipped and
|
|
202
206
|
Bundler resolves released gems normally.
|
|
203
207
|
|
|
208
|
+
`nomono` uses an explicit `require "nomono/bundler"` loader instead of the
|
|
209
|
+
Bundler plugin DSL. Bundler plugins are installed extensions for Bundler
|
|
210
|
+
commands, source handlers, and lifecycle hooks; `nomono` only needs to install
|
|
211
|
+
Gemfile macros while Bundler is evaluating a Gemfile. The root Gemfile should
|
|
212
|
+
declare the compatible `nomono` version, and modular local Gemfiles should fail
|
|
213
|
+
normally if that loader is unavailable or incompatible.
|
|
214
|
+
|
|
215
|
+
`nomono` also avoids RubyGems plugin autoload hooks for this path. Those hooks
|
|
216
|
+
are appropriate for gems that must globally patch RubyGems or Bundler before
|
|
217
|
+
dependency resolution can work. Local sibling overrides do not need cold-boot
|
|
218
|
+
global patches: the root Gemfile installs `nomono`, and the ENV-gated modular
|
|
219
|
+
Gemfile explicitly loads the macros only when it needs them.
|
|
220
|
+
|
|
204
221
|
## 🔐 Security
|
|
205
222
|
|
|
206
223
|
See [SECURITY.md][🔐security].
|
|
@@ -286,7 +303,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
|
|
|
286
303
|
|
|
287
304
|
## 📄 License
|
|
288
305
|
|
|
289
|
-
The gem is available under the following license: [AGPL-3.0-only](AGPL-3.0-only.md).
|
|
306
|
+
The gem is available under the following license: [AGPL-3.0-only](https://github.com/kettle-dev/nomono/blob/main/AGPL-3.0-only.md).
|
|
290
307
|
See [LICENSE.md][📄license] for details.
|
|
291
308
|
|
|
292
309
|
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
|
|
@@ -356,6 +373,8 @@ Thanks for RTFM. ☺️
|
|
|
356
373
|
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
|
|
357
374
|
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
|
|
358
375
|
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
376
|
+
[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
377
|
+
[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
|
|
359
378
|
|
|
360
379
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
361
380
|
[⛳️gem-namespace]: https://github.com/kettle-dev/nomono
|
|
@@ -401,7 +420,7 @@ Thanks for RTFM. ☺️
|
|
|
401
420
|
[📜src-gl]: https://gitlab.com/kettle-dev/nomono
|
|
402
421
|
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
|
|
403
422
|
[📜src-cb]: https://codeberg.org/kettle-dev/nomono
|
|
404
|
-
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=
|
|
423
|
+
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
|
|
405
424
|
[📜src-gh]: https://github.com/kettle-dev/nomono
|
|
406
425
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
407
426
|
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
@@ -485,12 +504,12 @@ Thanks for RTFM. ☺️
|
|
|
485
504
|
[📌gitmoji]: https://gitmoji.dev
|
|
486
505
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
487
506
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
488
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
507
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.123-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
489
508
|
[🔐security]: https://github.com/kettle-dev/nomono/blob/main/SECURITY.md
|
|
490
509
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
491
510
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
492
511
|
[📄license]: LICENSE.md
|
|
493
|
-
[📄license-ref]: AGPL-3.0-only.md
|
|
512
|
+
[📄license-ref]: https://github.com/kettle-dev/nomono/blob/main/AGPL-3.0-only.md
|
|
494
513
|
[📄license-img]: https://img.shields.io/badge/License-AGPL--3.0--only-259D6C.svg
|
|
495
514
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-x
|
|
496
515
|
[📄license-compat-img]: https://img.shields.io/badge/Apache_Incompatible:_Category_X-%E2%9C%97-C0392B.svg?style=flat&logo=Apache
|
data/lib/nomono/resolver.rb
CHANGED
|
@@ -12,7 +12,7 @@ module Nomono
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def gems(gems:, prefix: "NOMONO_GEMS", allowlist: gems, path_env: nil, vendored_gems_env: nil, vendor_gem_dir_env: nil,
|
|
15
|
-
debug_env: nil, root: ["src", "my"], strict: true)
|
|
15
|
+
debug_env: nil, path_aliases: nil, path_aliases_env: nil, root: ["src", "my"], strict: true, **_options)
|
|
16
16
|
requested = normalize_gems(gems)
|
|
17
17
|
allowed = normalize_gems(allowlist)
|
|
18
18
|
requested.each { |gem_name| validate_gem_name!(gem_name, allowed, strict: strict) }
|
|
@@ -25,10 +25,13 @@ module Nomono
|
|
|
25
25
|
vendored = parse_vendored(fetch_with_fallback(vendored_gems_env || "#{prefix}_VENDORED_GEMS", "", "VENDORED_GEMS"), allowed)
|
|
26
26
|
vendor_dir_value = fetch_with_fallback(vendor_gem_dir_env || "#{prefix}_VENDOR_GEM_DIR", File.join(dev_root, "vendor"), "VENDOR_GEM_DIR")
|
|
27
27
|
vendor_dir = absolutize(vendor_dir_value)
|
|
28
|
+
aliases = normalize_path_aliases(
|
|
29
|
+
path_aliases || fetch_with_fallback(path_aliases_env || "#{prefix}_PATH_ALIASES", "", "NOMONO_PATH_ALIASES")
|
|
30
|
+
)
|
|
28
31
|
|
|
29
32
|
gem_paths = requested.each_with_object({}) do |gem_name, memo|
|
|
30
33
|
base = vendored.include?(gem_name) ? vendor_dir : dev_root
|
|
31
|
-
memo[gem_name] = File.join(base, gem_name)
|
|
34
|
+
memo[gem_name] = normalize_path_alias(File.join(base, gem_name), aliases)
|
|
32
35
|
end
|
|
33
36
|
|
|
34
37
|
debug_key = debug_env || "#{prefix}_DEBUG"
|
|
@@ -86,6 +89,65 @@ module Nomono
|
|
|
86
89
|
join_home(path)
|
|
87
90
|
end
|
|
88
91
|
|
|
92
|
+
def normalize_path_aliases(value)
|
|
93
|
+
aliases = case value
|
|
94
|
+
when nil
|
|
95
|
+
[]
|
|
96
|
+
when Hash
|
|
97
|
+
value.map { |source, canonical| [source.to_s, canonical.to_s] }
|
|
98
|
+
when Array
|
|
99
|
+
value.map do |entry|
|
|
100
|
+
unless entry.respond_to?(:to_ary) && entry.to_ary.size == 2
|
|
101
|
+
raise Error, "path aliases must be configured as source=canonical pairs"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
entry.to_ary.map(&:to_s)
|
|
105
|
+
end
|
|
106
|
+
else
|
|
107
|
+
value.to_s.split(",").map do |entry|
|
|
108
|
+
next if entry.strip.empty?
|
|
109
|
+
|
|
110
|
+
source, canonical = entry.split("=", 2).map { |part| part.to_s.strip }
|
|
111
|
+
[source, canonical]
|
|
112
|
+
end.compact
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
aliases.map do |source, canonical|
|
|
116
|
+
validate_path_alias!(source, canonical)
|
|
117
|
+
[strip_trailing_slash(source), strip_trailing_slash(canonical)]
|
|
118
|
+
end.sort_by { |source, _canonical| -source.length }
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def validate_path_alias!(source, canonical)
|
|
122
|
+
if source.to_s.empty? || canonical.to_s.empty?
|
|
123
|
+
raise Error, "path aliases must be configured as source=canonical pairs"
|
|
124
|
+
end
|
|
125
|
+
unless source.start_with?("/") && canonical.start_with?("/")
|
|
126
|
+
raise Error, "path aliases must use absolute paths"
|
|
127
|
+
end
|
|
128
|
+
return if File.realpath(source) == File.realpath(canonical)
|
|
129
|
+
|
|
130
|
+
raise Error, "path alias #{source}=#{canonical} does not resolve to the same directory"
|
|
131
|
+
rescue SystemCallError => e
|
|
132
|
+
raise Error, "path alias #{source}=#{canonical} cannot be verified: #{e.message}"
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def normalize_path_alias(path, aliases)
|
|
136
|
+
aliases.each do |source, canonical|
|
|
137
|
+
next unless path == source || path.start_with?("#{source}/")
|
|
138
|
+
|
|
139
|
+
return "#{canonical}#{path.delete_prefix(source)}"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
path
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def strip_trailing_slash(path)
|
|
146
|
+
path = path.dup
|
|
147
|
+
path.chop! while path.end_with?("/")
|
|
148
|
+
path
|
|
149
|
+
end
|
|
150
|
+
|
|
89
151
|
def join_home(*segments)
|
|
90
152
|
File.join(home, *segments)
|
|
91
153
|
end
|
data/lib/nomono/version.rb
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Nomono
|
|
4
|
+
# Version namespace for this gem.
|
|
4
5
|
module Version
|
|
5
|
-
|
|
6
|
+
# Current gem version.
|
|
7
|
+
VERSION = "1.1.1"
|
|
6
8
|
end
|
|
9
|
+
# Current gem version exposed at the traditional constant location.
|
|
7
10
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
8
11
|
end
|
data/sig/nomono.rbs
CHANGED
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nomono
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -46,7 +46,7 @@ dependencies:
|
|
|
46
46
|
version: '2.3'
|
|
47
47
|
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: 2.3.
|
|
49
|
+
version: 2.3.7
|
|
50
50
|
type: :development
|
|
51
51
|
prerelease: false
|
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -56,7 +56,7 @@ dependencies:
|
|
|
56
56
|
version: '2.3'
|
|
57
57
|
- - ">="
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: 2.3.
|
|
59
|
+
version: 2.3.7
|
|
60
60
|
- !ruby/object:Gem::Dependency
|
|
61
61
|
name: bundler-audit
|
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -105,26 +105,46 @@ dependencies:
|
|
|
105
105
|
- - ">="
|
|
106
106
|
- !ruby/object:Gem::Version
|
|
107
107
|
version: 1.0.4
|
|
108
|
+
- !ruby/object:Gem::Dependency
|
|
109
|
+
name: anonymous_loader
|
|
110
|
+
requirement: !ruby/object:Gem::Requirement
|
|
111
|
+
requirements:
|
|
112
|
+
- - "~>"
|
|
113
|
+
- !ruby/object:Gem::Version
|
|
114
|
+
version: '0.1'
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: 0.1.3
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0.1'
|
|
125
|
+
- - ">="
|
|
126
|
+
- !ruby/object:Gem::Version
|
|
127
|
+
version: 0.1.3
|
|
108
128
|
- !ruby/object:Gem::Dependency
|
|
109
129
|
name: appraisal2
|
|
110
130
|
requirement: !ruby/object:Gem::Requirement
|
|
111
131
|
requirements:
|
|
112
132
|
- - "~>"
|
|
113
133
|
- !ruby/object:Gem::Version
|
|
114
|
-
version: '3.
|
|
134
|
+
version: '3.2'
|
|
115
135
|
- - ">="
|
|
116
136
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: 3.
|
|
137
|
+
version: 3.2.0
|
|
118
138
|
type: :development
|
|
119
139
|
prerelease: false
|
|
120
140
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
141
|
requirements:
|
|
122
142
|
- - "~>"
|
|
123
143
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '3.
|
|
144
|
+
version: '3.2'
|
|
125
145
|
- - ">="
|
|
126
146
|
- !ruby/object:Gem::Version
|
|
127
|
-
version: 3.
|
|
147
|
+
version: 3.2.0
|
|
128
148
|
- !ruby/object:Gem::Dependency
|
|
129
149
|
name: kettle-test
|
|
130
150
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -134,7 +154,7 @@ dependencies:
|
|
|
134
154
|
version: '2.0'
|
|
135
155
|
- - ">="
|
|
136
156
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: 2.0.
|
|
157
|
+
version: 2.0.15
|
|
138
158
|
type: :development
|
|
139
159
|
prerelease: false
|
|
140
160
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -144,27 +164,27 @@ dependencies:
|
|
|
144
164
|
version: '2.0'
|
|
145
165
|
- - ">="
|
|
146
166
|
- !ruby/object:Gem::Version
|
|
147
|
-
version: 2.0.
|
|
167
|
+
version: 2.0.15
|
|
148
168
|
- !ruby/object:Gem::Dependency
|
|
149
169
|
name: turbo_tests2
|
|
150
170
|
requirement: !ruby/object:Gem::Requirement
|
|
151
171
|
requirements:
|
|
152
172
|
- - "~>"
|
|
153
173
|
- !ruby/object:Gem::Version
|
|
154
|
-
version: '3.
|
|
174
|
+
version: '3.2'
|
|
155
175
|
- - ">="
|
|
156
176
|
- !ruby/object:Gem::Version
|
|
157
|
-
version: 3.
|
|
177
|
+
version: 3.2.3
|
|
158
178
|
type: :development
|
|
159
179
|
prerelease: false
|
|
160
180
|
version_requirements: !ruby/object:Gem::Requirement
|
|
161
181
|
requirements:
|
|
162
182
|
- - "~>"
|
|
163
183
|
- !ruby/object:Gem::Version
|
|
164
|
-
version: '3.
|
|
184
|
+
version: '3.2'
|
|
165
185
|
- - ">="
|
|
166
186
|
- !ruby/object:Gem::Version
|
|
167
|
-
version: 3.
|
|
187
|
+
version: 3.2.3
|
|
168
188
|
- !ruby/object:Gem::Dependency
|
|
169
189
|
name: ruby-progressbar
|
|
170
190
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -188,7 +208,7 @@ dependencies:
|
|
|
188
208
|
version: '1.0'
|
|
189
209
|
- - ">="
|
|
190
210
|
- !ruby/object:Gem::Version
|
|
191
|
-
version: 1.0.
|
|
211
|
+
version: 1.0.7
|
|
192
212
|
type: :development
|
|
193
213
|
prerelease: false
|
|
194
214
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -198,7 +218,7 @@ dependencies:
|
|
|
198
218
|
version: '1.0'
|
|
199
219
|
- - ">="
|
|
200
220
|
- !ruby/object:Gem::Version
|
|
201
|
-
version: 1.0.
|
|
221
|
+
version: 1.0.7
|
|
202
222
|
- !ruby/object:Gem::Dependency
|
|
203
223
|
name: gitmoji-regex
|
|
204
224
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -208,7 +228,7 @@ dependencies:
|
|
|
208
228
|
version: '2.0'
|
|
209
229
|
- - ">="
|
|
210
230
|
- !ruby/object:Gem::Version
|
|
211
|
-
version: 2.0.
|
|
231
|
+
version: 2.0.6
|
|
212
232
|
type: :development
|
|
213
233
|
prerelease: false
|
|
214
234
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -218,35 +238,18 @@ dependencies:
|
|
|
218
238
|
version: '2.0'
|
|
219
239
|
- - ">="
|
|
220
240
|
- !ruby/object:Gem::Version
|
|
221
|
-
version: 2.0.
|
|
241
|
+
version: 2.0.6
|
|
222
242
|
description: 1️⃣ Provides nomono_gems and eval_nomono_gems to standardize local multi-repo
|
|
223
243
|
dependency wiring in Gemfiles.
|
|
224
244
|
email:
|
|
225
245
|
- floss@galtzo.com
|
|
226
246
|
executables: []
|
|
227
247
|
extensions: []
|
|
228
|
-
extra_rdoc_files:
|
|
229
|
-
- CHANGELOG.md
|
|
230
|
-
- CITATION.cff
|
|
231
|
-
- CODE_OF_CONDUCT.md
|
|
232
|
-
- CONTRIBUTING.md
|
|
233
|
-
- FUNDING.md
|
|
234
|
-
- LICENSE.md
|
|
235
|
-
- README.md
|
|
236
|
-
- RUBOCOP.md
|
|
237
|
-
- SECURITY.md
|
|
248
|
+
extra_rdoc_files: []
|
|
238
249
|
files:
|
|
239
|
-
- AGPL-3.0-only.md
|
|
240
250
|
- CHANGELOG.md
|
|
241
|
-
- CITATION.cff
|
|
242
|
-
- CODE_OF_CONDUCT.md
|
|
243
|
-
- CONTRIBUTING.md
|
|
244
|
-
- FUNDING.md
|
|
245
251
|
- LICENSE.md
|
|
246
252
|
- README.md
|
|
247
|
-
- RUBOCOP.md
|
|
248
|
-
- SECURITY.md
|
|
249
|
-
- certs/pboling.pem
|
|
250
253
|
- lib/nomono.rb
|
|
251
254
|
- lib/nomono/bundler.rb
|
|
252
255
|
- lib/nomono/core.rb
|
|
@@ -255,16 +258,15 @@ files:
|
|
|
255
258
|
- lib/nomono/version.rb
|
|
256
259
|
- lib/nomono/version_gem.rb
|
|
257
260
|
- sig/nomono.rbs
|
|
258
|
-
- sig/nomono/version.rbs
|
|
259
261
|
homepage: https://github.com/kettle-dev/nomono
|
|
260
262
|
licenses:
|
|
261
263
|
- AGPL-3.0-only
|
|
262
264
|
metadata:
|
|
263
265
|
homepage_uri: https://nomono.galtzo.com/
|
|
264
|
-
source_code_uri: https://github.com/kettle-dev/nomono/tree/v1.
|
|
265
|
-
changelog_uri: https://github.com/kettle-dev/nomono/blob/v1.
|
|
266
|
+
source_code_uri: https://github.com/kettle-dev/nomono/tree/v1.1.1
|
|
267
|
+
changelog_uri: https://github.com/kettle-dev/nomono/blob/v1.1.1/CHANGELOG.md
|
|
266
268
|
bug_tracker_uri: https://github.com/kettle-dev/nomono/issues
|
|
267
|
-
documentation_uri: https://www.rubydoc.info/gems/nomono/1.
|
|
269
|
+
documentation_uri: https://www.rubydoc.info/gems/nomono/1.1.1
|
|
268
270
|
funding_uri: https://github.com/sponsors/pboling
|
|
269
271
|
wiki_uri: https://github.com/kettle-dev/nomono/wiki
|
|
270
272
|
news_uri: https://www.railsbling.com/tags/nomono
|
|
@@ -293,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
293
295
|
- !ruby/object:Gem::Version
|
|
294
296
|
version: '0'
|
|
295
297
|
requirements: []
|
|
296
|
-
rubygems_version: 4.0.
|
|
298
|
+
rubygems_version: 4.0.17
|
|
297
299
|
specification_version: 4
|
|
298
300
|
summary: 1️⃣ ENV-driven Gemfile macros for sibling gem path resolution
|
|
299
301
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|