Class: Kettle::Family::Config
- Inherits:
-
Object
- Object
- Kettle::Family::Config
- Defined in:
- lib/kettle/family/config.rb
Constant Summary collapse
- DEFAULT_PATHS =
[".kettle-family.yml", ".structuredmerge/kettle-family.yml"].freeze
- DEFAULT_MEMBER_EXCLUDES =
[ "vendor/**", "**/vendor/**", "benchmarks/**", "**/benchmarks/**", "tmp/**", "**/tmp/**", "spec/**", "**/spec/**", "test/**", "**/test/**" ].freeze
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Class Method Summary collapse
Instance Method Summary collapse
- #branch_lanes ⇒ Object
- #changelog_env ⇒ Object
- #changelog_full_path(member) ⇒ Object
- #changelog_mode ⇒ Object
- #changelog_path ⇒ Object
- #changelog_version_file ⇒ Object
- #changelog_workdir(member = nil) ⇒ Object
- #check_forbidden_tracked_member_dirs ⇒ Object
- #check_forbidden_tracked_member_dirs_except ⇒ Object
- #check_member_required_dirs ⇒ Object
- #check_readme_links ⇒ Object
- #check_required_bins ⇒ Object
- #check_required_files ⇒ Object
- #check_root_required_files ⇒ Object
- #command_for(name) ⇒ Object
- #configured_member_roots ⇒ Object
- #configured_member_roots? ⇒ Boolean
- #discover_member_roots ⇒ Object
- #discover_members? ⇒ Boolean
- #explicit_members ⇒ Object
- #family_local_path_env ⇒ Object
- #family_local_path_env_name ⇒ Object
- #family_local_path_root ⇒ Object
- #family_mode ⇒ Object
- #family_name ⇒ Object
-
#initialize(root:, path:, data:) ⇒ Config
constructor
A new instance of Config.
- #install_local_dependencies ⇒ Object
- #member_exclude_patterns ⇒ Object
- #member_local_changelog?(member) ⇒ Boolean
- #member_release_target_branches ⇒ Object
- #member_roots ⇒ Object
- #members_root ⇒ Object
- #normalize_lockfiles? ⇒ Boolean
- #normalize_lockfiles_command ⇒ Object
- #order_hints ⇒ Object
- #order_mode ⇒ Object
- #pre_release_image_url_skip_patterns ⇒ Object
- #readme_corporate_sponsors ⇒ Object
- #release_auto_dependency_floors? ⇒ Boolean
- #release_build_command ⇒ Object
- #release_disable_local_path_env ⇒ Object
- #release_env ⇒ Object
- #release_family_changelog? ⇒ Boolean
- #release_family_changelog_command ⇒ Object
- #release_jobs ⇒ Object
- #release_local_path_strategy ⇒ Object
- #release_normalize_lockfiles? ⇒ Boolean
- #release_normalize_lockfiles_command ⇒ Object
- #release_publish_command ⇒ Object
- #release_push_command ⇒ Object
- #release_required_remotes ⇒ Object
- #release_secrets ⇒ Object
- #release_tag_command ⇒ Object
- #release_target_branches ⇒ Object
- #release_waves ⇒ Object
- #shared_changelog? ⇒ Boolean
- #template_command ⇒ Object
- #template_jobs ⇒ Object
- #template_profile ⇒ Object
- #template_repository_topology ⇒ Object
Constructor Details
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
22 23 24 |
# File 'lib/kettle/family/config.rb', line 22 def data @data end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
22 23 24 |
# File 'lib/kettle/family/config.rb', line 22 def path @path end |
#root ⇒ Object (readonly)
Returns the value of attribute root.
22 23 24 |
# File 'lib/kettle/family/config.rb', line 22 def root @root end |
Class Method Details
.load(root:, path: nil) ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/kettle/family/config.rb', line 24 def self.load(root:, path: nil) = File.(root) config_path = path && File.(path, ) config_path ||= DEFAULT_PATHS .map { |candidate| File.join(, candidate) } .find { |candidate| File.file?(candidate) } data = config_path ? YAML.load_file(config_path) : {} new(root: , path: config_path, data: data || {}) end |
Instance Method Details
#branch_lanes ⇒ Object
318 319 320 |
# File 'lib/kettle/family/config.rb', line 318 def branch_lanes fetch_path("branch_lanes") || fetch_path("branches", "lanes") || {} end |
#changelog_env ⇒ Object
191 192 193 194 195 196 197 |
# File 'lib/kettle/family/config.rb', line 191 def changelog_env env = {} env["K_CHANGELOG_VERSION_FILE"] = changelog_version_file.to_s if changelog_version_file env["K_CHANGELOG_GEM_NAME"] = family_name.to_s if shared_changelog? env end |
#changelog_full_path(member) ⇒ Object
181 182 183 184 185 |
# File 'lib/kettle/family/config.rb', line 181 def changelog_full_path(member) return File.join(member.root, "CHANGELOG.md") if member_local_changelog?(member) File.(changelog_path, shared_changelog? ? root : member.root) end |
#changelog_mode ⇒ Object
158 159 160 |
# File 'lib/kettle/family/config.rb', line 158 def changelog_mode fetch_path("changelog", "mode") || "member" end |
#changelog_path ⇒ Object
166 167 168 |
# File 'lib/kettle/family/config.rb', line 166 def changelog_path fetch_path("changelog", "path") || "CHANGELOG.md" end |
#changelog_version_file ⇒ Object
170 171 172 |
# File 'lib/kettle/family/config.rb', line 170 def changelog_version_file fetch_path("changelog", "version_file") end |
#changelog_workdir(member = nil) ⇒ Object
174 175 176 177 178 179 |
# File 'lib/kettle/family/config.rb', line 174 def changelog_workdir(member = nil) return nil unless shared_changelog? return member.root if member_local_changelog?(member) root end |
#check_forbidden_tracked_member_dirs ⇒ Object
142 143 144 |
# File 'lib/kettle/family/config.rb', line 142 def check_forbidden_tracked_member_dirs fetch_path("check", "forbidden_tracked_member_dirs") || [] end |
#check_forbidden_tracked_member_dirs_except ⇒ Object
146 147 148 |
# File 'lib/kettle/family/config.rb', line 146 def check_forbidden_tracked_member_dirs_except fetch_path("check", "forbidden_tracked_member_dirs_except") || [] end |
#check_member_required_dirs ⇒ Object
138 139 140 |
# File 'lib/kettle/family/config.rb', line 138 def check_member_required_dirs fetch_path("check", "member_required_dirs") || [] end |
#check_readme_links ⇒ Object
150 151 152 |
# File 'lib/kettle/family/config.rb', line 150 def check_readme_links fetch_path("check", "readme_links") || {} end |
#check_required_bins ⇒ Object
130 131 132 |
# File 'lib/kettle/family/config.rb', line 130 def check_required_bins fetch_path("check", "required_bins") || ReadinessCheck::REQUIRED_BINS end |
#check_required_files ⇒ Object
126 127 128 |
# File 'lib/kettle/family/config.rb', line 126 def check_required_files fetch_path("check", "required_files") || ReadinessCheck::REQUIRED_FILES end |
#check_root_required_files ⇒ Object
134 135 136 |
# File 'lib/kettle/family/config.rb', line 134 def check_root_required_files fetch_path("check", "root_required_files") || [] end |
#command_for(name) ⇒ Object
122 123 124 |
# File 'lib/kettle/family/config.rb', line 122 def command_for(name) fetch_path("commands", name) end |
#configured_member_roots ⇒ Object
79 80 81 |
# File 'lib/kettle/family/config.rb', line 79 def configured_member_roots Array(fetch_path("members", "roots")).map { |path| File.(path, root) } end |
#configured_member_roots? ⇒ Boolean
83 84 85 |
# File 'lib/kettle/family/config.rb', line 83 def configured_member_roots? !fetch_path("members", "roots").nil? end |
#discover_member_roots ⇒ Object
87 88 89 90 91 |
# File 'lib/kettle/family/config.rb', line 87 def discover_member_roots return sibling_member_roots if family_mode == "sibling_repos" [members_root] end |
#discover_members? ⇒ Boolean
103 104 105 106 |
# File 'lib/kettle/family/config.rb', line 103 def discover_members? members = data.fetch("members", {}) members.fetch("discover", true) end |
#explicit_members ⇒ Object
93 94 95 96 97 98 99 100 101 |
# File 'lib/kettle/family/config.rb', line 93 def explicit_members members = data.fetch("members", {}) explicit = members.fetch("explicit", []) explicit.map do |entry| entry = stringify_keys(entry) member_root = File.(entry.fetch("root"), root) entry.merge("root" => member_root) end end |
#family_local_path_env ⇒ Object
58 59 60 61 62 63 |
# File 'lib/kettle/family/config.rb', line 58 def family_local_path_env name = family_local_path_env_name return {} unless name {name => family_local_path_root} end |
#family_local_path_env_name ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/kettle/family/config.rb', line 45 def family_local_path_env_name configured = fetch_path("family", "local_path_env") return nil if configured == false return configured.to_s unless configured.to_s.empty? "#{family_name.gsub(/[^A-Za-z0-9]+/, "_").upcase}_DEV" end |
#family_local_path_root ⇒ Object
53 54 55 56 |
# File 'lib/kettle/family/config.rb', line 53 def family_local_path_root configured = fetch_path("family", "local_path_root") configured ? (configured) : members_root end |
#family_mode ⇒ Object
65 66 67 |
# File 'lib/kettle/family/config.rb', line 65 def family_mode fetch_path("family", "mode") || "monorepo" end |
#family_name ⇒ Object
41 42 43 |
# File 'lib/kettle/family/config.rb', line 41 def family_name fetch_path("family", "name") || File.basename(root) end |
#install_local_dependencies ⇒ Object
245 246 247 248 249 250 251 |
# File 'lib/kettle/family/config.rb', line 245 def install_local_dependencies paths = fetch_path("install", "local_dependencies") || fetch_path("local_dependencies") || [] Array(paths).map do |entry| value = entry.is_a?(Hash) ? stringify_keys(entry).fetch("path") : entry (value) end end |
#member_exclude_patterns ⇒ Object
108 109 110 111 112 |
# File 'lib/kettle/family/config.rb', line 108 def member_exclude_patterns members = data.fetch("members", {}) patterns = members.fetch("exclude", nil) || members.fetch("ignore", nil) || [] DEFAULT_MEMBER_EXCLUDES + Array(patterns) end |
#member_local_changelog?(member) ⇒ Boolean
187 188 189 |
# File 'lib/kettle/family/config.rb', line 187 def member_local_changelog?(member) shared_changelog? && member && File.file?(File.join(member.root, "CHANGELOG.md")) end |
#member_release_target_branches ⇒ Object
311 312 313 314 315 316 |
# File 'lib/kettle/family/config.rb', line 311 def member_release_target_branches targets = fetch_path("release", "member_target_branches") || {} targets.to_h do |member_name, branches| [member_name.to_s, Array(branches).map(&:to_s)] end end |
#member_roots ⇒ Object
74 75 76 77 |
# File 'lib/kettle/family/config.rb', line 74 def member_roots return configured_member_roots if configured_member_roots? discover_member_roots end |
#members_root ⇒ Object
69 70 71 72 |
# File 'lib/kettle/family/config.rb', line 69 def members_root configured = fetch_path("family", "members_root") || fetch_path("members", "root") configured ? File.(configured, root) : root end |
#normalize_lockfiles? ⇒ Boolean
222 223 224 |
# File 'lib/kettle/family/config.rb', line 222 def normalize_lockfiles? fetch_path("template", "normalize_lockfiles") == true end |
#normalize_lockfiles_command ⇒ Object
226 227 228 |
# File 'lib/kettle/family/config.rb', line 226 def normalize_lockfiles_command fetch_path("template", "normalize_lockfiles_command") || "bundle lock" end |
#order_hints ⇒ Object
118 119 120 |
# File 'lib/kettle/family/config.rb', line 118 def order_hints fetch_path("members", "order", "hints") || [] end |
#order_mode ⇒ Object
114 115 116 |
# File 'lib/kettle/family/config.rb', line 114 def order_mode fetch_path("members", "order", "mode") || "dependency" end |
#pre_release_image_url_skip_patterns ⇒ Object
154 155 156 |
# File 'lib/kettle/family/config.rb', line 154 def pre_release_image_url_skip_patterns Array(fetch_path("pre_release", "image_url_skip_patterns")).map(&:to_s) end |
#readme_corporate_sponsors ⇒ Object
215 216 217 218 219 220 |
# File 'lib/kettle/family/config.rb', line 215 def readme_corporate_sponsors raw = fetch_path("readme", "corporate_sponsors") || fetch_path("sponsorships", "corporate") || fetch_path("corporate_sponsors") normalize_corporate_sponsors(raw) end |
#release_auto_dependency_floors? ⇒ Boolean
287 288 289 |
# File 'lib/kettle/family/config.rb', line 287 def release_auto_dependency_floors? fetch_path("release", "auto_dependency_floors") != false end |
#release_build_command ⇒ Object
253 254 255 |
# File 'lib/kettle/family/config.rb', line 253 def release_build_command fetch_path("release", "build_command") || command_for("release_build") || "bundle exec rake build" end |
#release_disable_local_path_env ⇒ Object
241 242 243 |
# File 'lib/kettle/family/config.rb', line 241 def release_disable_local_path_env Array(fetch_path("release", "disable_local_path_env")) end |
#release_env ⇒ Object
265 266 267 |
# File 'lib/kettle/family/config.rb', line 265 def release_env stringify_env(fetch_path("release", "env") || {}) end |
#release_family_changelog? ⇒ Boolean
291 292 293 |
# File 'lib/kettle/family/config.rb', line 291 def release_family_changelog? fetch_path("release", "family_changelog", "enabled") == true end |
#release_family_changelog_command ⇒ Object
295 296 297 |
# File 'lib/kettle/family/config.rb', line 295 def release_family_changelog_command fetch_path("release", "family_changelog", "command") || "bundle exec kettle-changelog" end |
#release_jobs ⇒ Object
277 278 279 |
# File 'lib/kettle/family/config.rb', line 277 def release_jobs fetch_path("release", "jobs") end |
#release_local_path_strategy ⇒ Object
269 270 271 |
# File 'lib/kettle/family/config.rb', line 269 def release_local_path_strategy fetch_path("release", "local_path_strategy").to_s end |
#release_normalize_lockfiles? ⇒ Boolean
230 231 232 233 234 235 |
# File 'lib/kettle/family/config.rb', line 230 def release_normalize_lockfiles? configured = fetch_path("release", "normalize_lockfiles") return configured unless configured.nil? normalize_lockfiles? end |
#release_normalize_lockfiles_command ⇒ Object
237 238 239 |
# File 'lib/kettle/family/config.rb', line 237 def release_normalize_lockfiles_command fetch_path("release", "normalize_lockfiles_command") || normalize_lockfiles_command end |
#release_publish_command ⇒ Object
257 258 259 |
# File 'lib/kettle/family/config.rb', line 257 def release_publish_command fetch_path("release", "publish_command") || command_for("release_publish") || "bundle exec kettle-release" end |
#release_push_command ⇒ Object
303 304 305 |
# File 'lib/kettle/family/config.rb', line 303 def release_push_command fetch_path("release", "push_command") || command_for("release_push") || "git push --follow-tags" end |
#release_required_remotes ⇒ Object
261 262 263 |
# File 'lib/kettle/family/config.rb', line 261 def release_required_remotes fetch_path("release", "required_remotes") end |
#release_secrets ⇒ Object
273 274 275 |
# File 'lib/kettle/family/config.rb', line 273 def release_secrets stringify_keys(fetch_path("release", "secrets") || {}) end |
#release_tag_command ⇒ Object
299 300 301 |
# File 'lib/kettle/family/config.rb', line 299 def release_tag_command fetch_path("release", "tag_command") || command_for("release_tag") || "git tag" end |
#release_target_branches ⇒ Object
307 308 309 |
# File 'lib/kettle/family/config.rb', line 307 def release_target_branches fetch_path("release", "target_branches") || fetch_path("branches", "release_targets") || [] end |
#release_waves ⇒ Object
281 282 283 284 285 |
# File 'lib/kettle/family/config.rb', line 281 def release_waves Array(fetch_path("release", "waves")).map do |wave| Array(wave).map(&:to_s).map(&:strip).reject(&:empty?) end.reject(&:empty?) end |
#shared_changelog? ⇒ Boolean
162 163 164 |
# File 'lib/kettle/family/config.rb', line 162 def shared_changelog? changelog_mode == "root" end |
#template_command ⇒ Object
199 200 201 |
# File 'lib/kettle/family/config.rb', line 199 def template_command fetch_path("template", "command") || command_for("template") end |
#template_jobs ⇒ Object
211 212 213 |
# File 'lib/kettle/family/config.rb', line 211 def template_jobs fetch_path("template", "jobs") end |
#template_profile ⇒ Object
203 204 205 |
# File 'lib/kettle/family/config.rb', line 203 def template_profile fetch_path("template", "profile") end |
#template_repository_topology ⇒ Object
207 208 209 |
# File 'lib/kettle/family/config.rb', line 207 def template_repository_topology fetch_path("template", "repository_topology") end |