kettle-family 1.2.84 → 1.2.86
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 +33 -1
- data/README.md +33 -1
- data/lib/kettle/family/execution_profile.rb +76 -0
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +60 -20
- data/lib/kettle/family.rb +1 -0
- data.tar.gz.sig +0 -0
- metadata +7 -6
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 21a652aea8226a4e77e30eec15208ab8337acb1c588828c2513d74b73d83186b
|
|
4
|
+
data.tar.gz: fe8cefdd96d256b3a0c08db1eab5ff75c03a2afe7f70d1a8ca3778d9b1609444
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 491966653b36eb913a447b028de8f68dc7bf3f9e8291bea3205d95083d7d7173fe310eb8f81f456793a7f4f86650229ac2b940ef6f29bb0a7620c949c6444dbd
|
|
7
|
+
data.tar.gz: 98e477f02f7d1d7dbfd142108430061d11061e215702544cb304e0a126403ec2fc15aa41f89b0431436cfe6b0c53c1dcc7eb60239805d8a0d4c384bd2558985d
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,34 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.2.86] - 2026-09-06
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.86][1.2.86t]
|
|
36
|
+
- COVERAGE: 93.09% -- 5805/6236 lines in 34 files
|
|
37
|
+
- BRANCH COVERAGE: 76.16% -- 2354/3091 branches in 34 files
|
|
38
|
+
- 31.88% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Recover template lockfiles in the configured local dependency graph instead of release normalization mode.
|
|
43
|
+
|
|
44
|
+
- Use the templating dependency graph during initial template lockfile preparation.
|
|
45
|
+
|
|
46
|
+
- Define execution profiles and add real Bundler compatibility scenarios for template and release lockfile isolation.
|
|
47
|
+
|
|
48
|
+
## [1.2.85] - 2026-09-06
|
|
49
|
+
|
|
50
|
+
- TAG: [v1.2.85][1.2.85t]
|
|
51
|
+
- COVERAGE: 93.08% -- 5785/6215 lines in 33 files
|
|
52
|
+
- BRANCH COVERAGE: 76.04% -- 2345/3084 branches in 33 files
|
|
53
|
+
- 30.69% documented
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- Keep local template dependency activation enabled while bootstrapping nomono.
|
|
58
|
+
|
|
59
|
+
- Use the complete template dependency graph when bootstrapping nomono; reserve the changelog dependency opt-out for explicit constraint conflicts.
|
|
60
|
+
|
|
33
61
|
## [1.2.84] - 2026-09-05
|
|
34
62
|
|
|
35
63
|
- TAG: [v1.2.84][1.2.84t]
|
|
@@ -2510,7 +2538,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2510
2538
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
2511
2539
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
2512
2540
|
|
|
2513
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
2541
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.86...HEAD
|
|
2542
|
+
[1.2.86]: https://github.com/kettle-dev/kettle-family/compare/v1.2.85...v1.2.86
|
|
2543
|
+
[1.2.86t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.86
|
|
2544
|
+
[1.2.85]: https://github.com/kettle-dev/kettle-family/compare/v1.2.84...v1.2.85
|
|
2545
|
+
[1.2.85t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.85
|
|
2514
2546
|
[1.2.84]: https://github.com/kettle-dev/kettle-family/compare/v1.2.83...v1.2.84
|
|
2515
2547
|
[1.2.84t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.84
|
|
2516
2548
|
[1.2.83]: https://github.com/kettle-dev/kettle-family/compare/v1.2.82...v1.2.83
|
data/README.md
CHANGED
|
@@ -797,6 +797,38 @@ kettle-family template --execute \
|
|
|
797
797
|
--env STRUCTUREDMERGE_DEV=/home/me/src/structuredmerge/ruby/gems
|
|
798
798
|
```
|
|
799
799
|
|
|
800
|
+
### Template Bootstrap Environment
|
|
801
|
+
|
|
802
|
+
The complete path-gem, lockfile, install, platform, and mutation policy is
|
|
803
|
+
defined in [Execution Profiles](EXECUTION_PROFILES.md). The rules below are
|
|
804
|
+
the template-local portion of that policy.
|
|
805
|
+
|
|
806
|
+
Before invoking `kettle-jem`, `kettle-family template` may refresh `nomono` so
|
|
807
|
+
the member Gemfile can activate its generated local dependency wiring. Both
|
|
808
|
+
bootstrap and lockfile preparation use the same development dependency graph:
|
|
809
|
+
|
|
810
|
+
- `K_JEM_TEMPLATING=true` is enforced. It selects the templating Gemfile graph
|
|
811
|
+
and activates generated local sibling closures. It is not a release-lockfile
|
|
812
|
+
normalization setting.
|
|
813
|
+
- The configured family `*_DEV` selector is preserved or inferred from the
|
|
814
|
+
family configuration. It tells `nomono` where that sibling closure lives.
|
|
815
|
+
- `BUNDLE_DISABLE_CHECKSUM_VALIDATION=true` is retained for template bootstrap
|
|
816
|
+
and template application, where a template can legitimately update a
|
|
817
|
+
lockfile before its checksums are normalized.
|
|
818
|
+
- `KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY` defaults to `false`. Set it explicitly
|
|
819
|
+
only when the optional `kettle-changelog` dependency has an incompatible
|
|
820
|
+
version constraint with the graph being bootstrapped. It does not select
|
|
821
|
+
local dependencies and must not be used as a general Bundler-resolution or
|
|
822
|
+
release-lockfile workaround.
|
|
823
|
+
|
|
824
|
+
Release lockfile normalization is a separate operation with its own local-path
|
|
825
|
+
policy; it must not be inferred from template bootstrap settings.
|
|
826
|
+
|
|
827
|
+
If template lockfile preparation needs a recovery update, that retry also uses
|
|
828
|
+
the template dependency graph. It must not invoke release-lockfile reset logic:
|
|
829
|
+
release normalization intentionally disables local paths, while template
|
|
830
|
+
recovery needs configured sibling paths to resolve unreleased family versions.
|
|
831
|
+
|
|
800
832
|
## 🔐 Security
|
|
801
833
|
|
|
802
834
|
See [SECURITY.md][🔐security].
|
|
@@ -1049,7 +1081,7 @@ Thanks for RTFM. ☺️
|
|
|
1049
1081
|
[📌gitmoji]: https://gitmoji.dev
|
|
1050
1082
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1051
1083
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1052
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.
|
|
1084
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.236-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1053
1085
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
1054
1086
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1055
1087
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Kettle
|
|
4
|
+
module Family
|
|
5
|
+
# The execution context is a compatibility boundary, not a collection of
|
|
6
|
+
# incidental ENV assignments. Each workflow command selects one profile so
|
|
7
|
+
# path-gem, lockfile, install, and mutation rules remain reviewable.
|
|
8
|
+
class ExecutionProfile
|
|
9
|
+
Definition = Struct.new(
|
|
10
|
+
:name,
|
|
11
|
+
:path_gem_policy,
|
|
12
|
+
:lockfile_role,
|
|
13
|
+
:install_location,
|
|
14
|
+
:host_platform_policy,
|
|
15
|
+
:allowed_mutations
|
|
16
|
+
) do
|
|
17
|
+
def local_path_gems?
|
|
18
|
+
path_gem_policy != :registry_only
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def canonical_lockfile?
|
|
22
|
+
lockfile_role == :canonical
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
DEFINITIONS = {
|
|
27
|
+
development_local: Definition.new(
|
|
28
|
+
name: :development_local,
|
|
29
|
+
path_gem_policy: :configured_siblings,
|
|
30
|
+
lockfile_role: :canonical,
|
|
31
|
+
install_location: :member,
|
|
32
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
33
|
+
allowed_mutations: %i[development_lockfiles source test]
|
|
34
|
+
),
|
|
35
|
+
template_local: Definition.new(
|
|
36
|
+
name: :template_local,
|
|
37
|
+
path_gem_policy: :configured_siblings,
|
|
38
|
+
lockfile_role: :canonical,
|
|
39
|
+
install_location: :member,
|
|
40
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
41
|
+
allowed_mutations: %i[template development_lockfiles generated]
|
|
42
|
+
),
|
|
43
|
+
release_registry: Definition.new(
|
|
44
|
+
name: :release_registry,
|
|
45
|
+
path_gem_policy: :registry_only,
|
|
46
|
+
lockfile_role: :canonical,
|
|
47
|
+
install_location: :disposable,
|
|
48
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
49
|
+
allowed_mutations: %i[canonical_release_lockfiles]
|
|
50
|
+
),
|
|
51
|
+
release_monorepo: Definition.new(
|
|
52
|
+
name: :release_monorepo,
|
|
53
|
+
path_gem_policy: :configured_release_wave,
|
|
54
|
+
lockfile_role: :canonical,
|
|
55
|
+
install_location: :disposable,
|
|
56
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
57
|
+
allowed_mutations: %i[canonical_release_lockfiles configured_wave_paths]
|
|
58
|
+
),
|
|
59
|
+
release_recovery: Definition.new(
|
|
60
|
+
name: :release_recovery,
|
|
61
|
+
path_gem_policy: :configured_release_wave,
|
|
62
|
+
lockfile_role: :canonical,
|
|
63
|
+
install_location: :disposable,
|
|
64
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
65
|
+
allowed_mutations: %i[canonical_release_lockfiles configured_wave_paths]
|
|
66
|
+
)
|
|
67
|
+
}.each_value(&:freeze).freeze
|
|
68
|
+
|
|
69
|
+
def self.fetch(name)
|
|
70
|
+
DEFINITIONS.fetch(name.to_sym)
|
|
71
|
+
rescue KeyError
|
|
72
|
+
raise ArgumentError, "unknown execution profile: #{name.inspect}"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -5,7 +5,7 @@ module Kettle
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = "1.2.
|
|
8
|
+
VERSION = "1.2.86"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -824,14 +824,25 @@ module Kettle
|
|
|
824
824
|
|
|
825
825
|
def template_bootstrap_dependency_env(_member)
|
|
826
826
|
env = template_prepare_env
|
|
827
|
-
#
|
|
828
|
-
#
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
827
|
+
# Bootstrap must evaluate the same development graph as template
|
|
828
|
+
# preparation. In particular, K_JEM_TEMPLATING activates the generated
|
|
829
|
+
# local sibling closure; without it, stale generated Gemfiles can make
|
|
830
|
+
# Bundler look for an unreleased family gem in a registry.
|
|
831
|
+
#
|
|
832
|
+
# kettle-changelog is part of that normal graph. Its opt-out remains
|
|
833
|
+
# available only for an explicit, known optional-dependency constraint
|
|
834
|
+
# conflict; it is not a general solution for local-path resolution.
|
|
835
|
+
env["KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY"] = template_bootstrap_changelog_dependency_setting
|
|
832
836
|
env
|
|
833
837
|
end
|
|
834
838
|
|
|
839
|
+
def template_bootstrap_changelog_dependency_setting
|
|
840
|
+
env_overrides.fetch(
|
|
841
|
+
"KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY",
|
|
842
|
+
ENV.fetch("KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY", "false")
|
|
843
|
+
)
|
|
844
|
+
end
|
|
845
|
+
|
|
835
846
|
def template_results_for_member(member, progress: nil)
|
|
836
847
|
progress&.start_member(member, total: template_phase_total(member), status: template_initial_status(member))
|
|
837
848
|
runner = CommandRunner.new(execute: execute, accept: accept)
|
|
@@ -4373,13 +4384,13 @@ module Kettle
|
|
|
4373
4384
|
end
|
|
4374
4385
|
|
|
4375
4386
|
def recover_template_lockfiles(member:, runner:, memo:, phase:)
|
|
4376
|
-
|
|
4387
|
+
result = runner.call(
|
|
4377
4388
|
member: member,
|
|
4378
|
-
runner: runner,
|
|
4379
|
-
memo: memo,
|
|
4380
4389
|
phase: phase,
|
|
4381
|
-
|
|
4390
|
+
command: normalize_lockfiles_command(member: member, phase: "prepare_lockfiles"),
|
|
4391
|
+
env: template_lockfile_recovery_env
|
|
4382
4392
|
)
|
|
4393
|
+
memo << result
|
|
4383
4394
|
return unless memo.last&.ok?
|
|
4384
4395
|
|
|
4385
4396
|
commit_normalized_lockfiles(
|
|
@@ -4404,15 +4415,11 @@ module Kettle
|
|
|
4404
4415
|
[result.stdout, result.stderr].join("\n").match?(/Unknown switches? .*--add-checksums/)
|
|
4405
4416
|
end
|
|
4406
4417
|
|
|
4407
|
-
def template_lockfile_recovery_env(
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
|
|
4412
|
-
env.merge!(env_overrides)
|
|
4413
|
-
env["K_JEM_TEMPLATING"] = "false"
|
|
4414
|
-
env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
|
|
4415
|
-
env
|
|
4418
|
+
def template_lockfile_recovery_env(_member = nil)
|
|
4419
|
+
# A failed template preparation can be caused by an unreleased sibling
|
|
4420
|
+
# version. Recover in the template graph, not the release graph, so
|
|
4421
|
+
# Bundler uses the configured monorepo paths.
|
|
4422
|
+
execution_profile(template_execution_profile, workflow_env)
|
|
4416
4423
|
end
|
|
4417
4424
|
|
|
4418
4425
|
def normalize_lockfiles_command(member:, phase:, skip_checksum_option: false)
|
|
@@ -4618,7 +4625,37 @@ module Kettle
|
|
|
4618
4625
|
# Templating is development work. It must resolve the configured
|
|
4619
4626
|
# family graph exactly as template application does; release-only
|
|
4620
4627
|
# lockfile cleanup owns disabling local path sources.
|
|
4621
|
-
workflow_env
|
|
4628
|
+
execution_profile(template_execution_profile, workflow_env)
|
|
4629
|
+
end
|
|
4630
|
+
|
|
4631
|
+
def template_execution_profile
|
|
4632
|
+
ExecutionProfile.fetch(:template_local)
|
|
4633
|
+
end
|
|
4634
|
+
|
|
4635
|
+
def release_lockfile_execution_profile
|
|
4636
|
+
return ExecutionProfile.fetch(:release_recovery) if release_recovery?
|
|
4637
|
+
return ExecutionProfile.fetch(:release_monorepo) if preserve_monorepo_template_context?
|
|
4638
|
+
|
|
4639
|
+
ExecutionProfile.fetch(:release_registry)
|
|
4640
|
+
end
|
|
4641
|
+
|
|
4642
|
+
def release_recovery?
|
|
4643
|
+
!start_step.nil? || !skip_steps.to_s.empty? || fast_recovery || skip_ci
|
|
4644
|
+
end
|
|
4645
|
+
|
|
4646
|
+
def execution_profile(profile, env)
|
|
4647
|
+
profile = ExecutionProfile.fetch(profile) unless profile.is_a?(ExecutionProfile::Definition)
|
|
4648
|
+
env = env.dup
|
|
4649
|
+
case profile.name
|
|
4650
|
+
when :template_local
|
|
4651
|
+
env["K_JEM_TEMPLATING"] = "true"
|
|
4652
|
+
env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
|
|
4653
|
+
when :release_registry, :release_monorepo, :release_recovery
|
|
4654
|
+
# Release profiles deliberately leave Bundler mutation decisions to
|
|
4655
|
+
# kettle-dev. The profile selection controls which local-path
|
|
4656
|
+
# overrides this workflow contributes below.
|
|
4657
|
+
end
|
|
4658
|
+
env
|
|
4622
4659
|
end
|
|
4623
4660
|
|
|
4624
4661
|
def local_path_env_requested?(name)
|
|
@@ -4672,10 +4709,13 @@ module Kettle
|
|
|
4672
4709
|
end
|
|
4673
4710
|
|
|
4674
4711
|
def release_lockfile_env(member = nil)
|
|
4675
|
-
|
|
4712
|
+
execution_profile(
|
|
4713
|
+
release_lockfile_execution_profile,
|
|
4714
|
+
base_release_env
|
|
4676
4715
|
.merge(release_lockfile_bundler_env_resets)
|
|
4677
4716
|
.merge(env_overrides)
|
|
4678
4717
|
.merge(release_lockfile_local_path_env_overrides(member))
|
|
4718
|
+
)
|
|
4679
4719
|
end
|
|
4680
4720
|
|
|
4681
4721
|
def release_lockfile_bundler_env_resets
|
data/lib/kettle/family.rb
CHANGED
|
@@ -21,6 +21,7 @@ require_relative "family/nomono_bootstrap"
|
|
|
21
21
|
require_relative "family/debugger_bootstrap"
|
|
22
22
|
require_relative "family/appraisal_bootstrap"
|
|
23
23
|
require_relative "family/release_waves"
|
|
24
|
+
require_relative "family/execution_profile"
|
|
24
25
|
require_relative "family/workflow"
|
|
25
26
|
require_relative "family/discovery"
|
|
26
27
|
require_relative "family/orderer"
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kettle-family
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.86
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -91,7 +91,7 @@ dependencies:
|
|
|
91
91
|
requirements:
|
|
92
92
|
- - ">="
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: 3.0.
|
|
94
|
+
version: 3.0.31
|
|
95
95
|
- - "<"
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
97
|
version: 4.0.0
|
|
@@ -101,7 +101,7 @@ dependencies:
|
|
|
101
101
|
requirements:
|
|
102
102
|
- - ">="
|
|
103
103
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: 3.0.
|
|
104
|
+
version: 3.0.31
|
|
105
105
|
- - "<"
|
|
106
106
|
- !ruby/object:Gem::Version
|
|
107
107
|
version: 4.0.0
|
|
@@ -414,6 +414,7 @@ files:
|
|
|
414
414
|
- lib/kettle/family/debugger_bootstrap.rb
|
|
415
415
|
- lib/kettle/family/dependency_floor.rb
|
|
416
416
|
- lib/kettle/family/discovery.rb
|
|
417
|
+
- lib/kettle/family/execution_profile.rb
|
|
417
418
|
- lib/kettle/family/git_status.rb
|
|
418
419
|
- lib/kettle/family/local_install.rb
|
|
419
420
|
- lib/kettle/family/member.rb
|
|
@@ -441,10 +442,10 @@ licenses:
|
|
|
441
442
|
- AGPL-3.0-only
|
|
442
443
|
metadata:
|
|
443
444
|
homepage_uri: https://kettle-family.galtzo.com
|
|
444
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.
|
|
445
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
445
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.86
|
|
446
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.86/CHANGELOG.md
|
|
446
447
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
447
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.
|
|
448
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.86
|
|
448
449
|
funding_uri: https://github.com/sponsors/pboling
|
|
449
450
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
450
451
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|