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

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



65
66
67
# File 'lib/polyrun/config/resolver.rb', line 65

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.



58
59
60
61
62
63
# File 'lib/polyrun/config/resolver.rb', line 58

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_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