Module: Polyrun::Config::Resolver
- Defined in:
- lib/polyrun/config/resolver.rb
Overview
Single source for values derived from polyrun.yml, ENV, and CI detection. Used by Effective, CLI helpers, and prepare.
Class Method Summary collapse
- .env_int(name, fallback, env = ENV) ⇒ Object
-
.merged_prepare_env(prep, env = ENV) ⇒ Object
Same merge order as polyrun prepare: YAML
prepare.envoverrides processENVfor overlapping keys. - .parallel_worker_count_default(env = ENV) ⇒ Object
- .partition_int(pc, keys, default) ⇒ Object
- .prepare_env_yaml_string_map(prep) ⇒ Object
-
.resolve_partition_timing_granularity(pc, cli_val, env = ENV) ⇒ Object
cli_valis an override (e.g. run-shards –timing-granularity);niluses YAML thenPOLYRUN_TIMING_GRANULARITY. - .resolve_shard_index(pc, env = ENV) ⇒ Object
-
.resolve_shard_processes(pc, env = ENV) ⇒ Object
Processes per CI matrix job for
ci-shard-run/ci-shard-rspec(NxM: N jobs × M processes). - .resolve_shard_total(pc, env = ENV) ⇒ Object
Class Method Details
.env_int(name, fallback, env = ENV) ⇒ Object
11 12 13 14 15 16 |
# File 'lib/polyrun/config/resolver.rb', line 11 def env_int(name, fallback, env = ENV) s = env[name] return fallback if s.nil? || s.empty? Integer(s, exception: false) || fallback end |
.merged_prepare_env(prep, env = ENV) ⇒ Object
Same merge order as polyrun prepare: YAML prepare.env overrides process ENV for overlapping keys.
23 24 25 26 |
# File 'lib/polyrun/config/resolver.rb', line 23 def merged_prepare_env(prep, env = ENV) prep_env = prepare_env_yaml_string_map(prep) env.to_h.merge(prep_env) end |
.parallel_worker_count_default(env = ENV) ⇒ Object
73 74 75 |
# File 'lib/polyrun/config/resolver.rb', line 73 def parallel_worker_count_default(env = ENV) env_int("POLYRUN_WORKERS", Polyrun::Config::DEFAULT_PARALLEL_WORKERS, env) end |
.partition_int(pc, keys, default) ⇒ Object
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/polyrun/config/resolver.rb', line 28 def partition_int(pc, keys, default) keys.each do |k| v = pc[k] || pc[k.to_sym] next if v.nil? || v.to_s.empty? i = Integer(v, exception: false) return i unless i.nil? end default end |
.prepare_env_yaml_string_map(prep) ⇒ Object
18 19 20 |
# File 'lib/polyrun/config/resolver.rb', line 18 def prepare_env_yaml_string_map(prep) (prep["env"] || prep[:env] || {}).transform_keys(&:to_s).transform_values(&:to_s) end |
.resolve_partition_timing_granularity(pc, cli_val, env = ENV) ⇒ Object
cli_val is an override (e.g. run-shards –timing-granularity); nil uses YAML then POLYRUN_TIMING_GRANULARITY.
66 67 68 69 70 71 |
# File 'lib/polyrun/config/resolver.rb', line 66 def resolve_partition_timing_granularity(pc, cli_val, env = ENV) raw = cli_val raw ||= pc && (pc["timing_granularity"] || pc[:timing_granularity]) raw ||= env["POLYRUN_TIMING_GRANULARITY"] Polyrun::Partition::TimingKeys.normalize_granularity(raw || "file") end |
.resolve_shard_index(pc, env = ENV) ⇒ Object
39 40 41 42 43 44 45 46 |
# File 'lib/polyrun/config/resolver.rb', line 39 def resolve_shard_index(pc, env = ENV) return Integer(env["POLYRUN_SHARD_INDEX"]) if env["POLYRUN_SHARD_INDEX"] && !env["POLYRUN_SHARD_INDEX"].empty? ci = Polyrun::Env::Ci.detect_shard_index return ci unless ci.nil? partition_int(pc, %w[shard_index shard], 0) end |
.resolve_shard_processes(pc, env = ENV) ⇒ Object
Processes per CI matrix job for ci-shard-run / ci-shard-rspec (NxM: N jobs × M processes). POLYRUN_SHARD_PROCESSES or partition.shard_processes; CLI --shard-processes / --workers overrides.
59 60 61 62 63 |
# File 'lib/polyrun/config/resolver.rb', line 59 def resolve_shard_processes(pc, env = ENV) return Integer(env["POLYRUN_SHARD_PROCESSES"]) if env["POLYRUN_SHARD_PROCESSES"] && !env["POLYRUN_SHARD_PROCESSES"].empty? partition_int(pc, %w[shard_processes shard_workers workers_per_shard], 1) end |
.resolve_shard_total(pc, env = ENV) ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/polyrun/config/resolver.rb', line 48 def resolve_shard_total(pc, env = ENV) return Integer(env["POLYRUN_SHARD_TOTAL"]) if env["POLYRUN_SHARD_TOTAL"] && !env["POLYRUN_SHARD_TOTAL"].empty? ci = Polyrun::Env::Ci.detect_shard_total return ci unless ci.nil? partition_int(pc, %w[shard_total total], 1) end |