Module: FastlaneFlutterFlavor::ProjectUtil

Defined in:
lib/fastlane/plugin/ann_flavor_flutter/helper/utils_project_config.rb

Overview


ProjectUtil (Helper Module) Contains logic to locate the Flutter project root directory and key config files.

Class Method Summary collapse

Class Method Details

.find_annai_spec_path(user_defined_path = nil) ⇒ Object

===============================================

Find Annai Spec File Path (annspec.yaml) Uses ANN_SPEC_FILE environment variable. Falls back to the legacy name annaispec.yaml if annspec.yaml is not found.



85
86
87
88
89
# File 'lib/fastlane/plugin/ann_flavor_flutter/helper/utils_project_config.rb', line 85

def self.find_annai_spec_path(user_defined_path = nil)
  path = resolve_config_path('annspec.yaml', user_defined_path, 'ANN_SPEC_FILE')
  return path if File.exist?(path)
  resolve_config_path('annaispec.yaml', user_defined_path, 'ANNAI_SPEC_FILE')
end

.find_annai_test_spec_path(user_defined_path = nil) ⇒ Object

===============================================

Find Test Spec File Path (anntestspec.yaml) Uses ANN_TEST_SPEC_FILE environment variable. Falls back to the legacy name annaitestspec.yaml if anntestspec.yaml is not found.



96
97
98
99
100
# File 'lib/fastlane/plugin/ann_flavor_flutter/helper/utils_project_config.rb', line 96

def self.find_annai_test_spec_path(user_defined_path = nil)
  path = resolve_config_path('anntestspec.yaml', user_defined_path, 'ANN_TEST_SPEC_FILE')
  return path if File.exist?(path)
  resolve_config_path('annaitestspec.yaml', user_defined_path, 'ANNAI_TEST_SPEC_FILE')
end

.find_flutter_rootObject

===============================================

Find Flutter Project Root Searches upwards from the current directory for a pubspec.yaml file.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/fastlane/plugin/ann_flavor_flutter/helper/utils_project_config.rb', line 15

def self.find_flutter_root
  current_dir = Dir.pwd
  while current_dir != '/' do
    pubspec_path = File.join(current_dir, 'pubspec.yaml')
    if File.exist?(pubspec_path)
      Fastlane::UI.verbose("Found pubspec.yaml at: #{current_dir}")
      return current_dir
    end
    parent_dir = File.dirname(current_dir)
    # Prevent infinite loop if we hit the root and haven't found it
    break if parent_dir == current_dir
    current_dir = parent_dir
  end

  # Fallback to the original logic if pubspec.yaml isn't found
  Fastlane::UI.important("pubspec.yaml not found by searching up. Falling back to current directory.")
  return Dir.pwd
end

.resolve_config_path(filename, user_defined_path, env_var_name) ⇒ Object

=============================================== Internal method to resolve config path with precedence Precedence: User Parameter > Environment Variable > Default Path

===============================================



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/fastlane/plugin/ann_flavor_flutter/helper/utils_project_config.rb', line 39

def self.resolve_config_path(filename, user_defined_path, env_var_name)
  chosen_path_value = nil
  source = "default in project root"

  # Precedence 1: User-passed parameter (from action/lane)
  # Check if user passed an explicit path (i.e., not the action's default filename string)
  if user_defined_path && user_defined_path != filename
    chosen_path_value = user_defined_path
    source = "user parameter"
  end

  # Precedence 2: Environment Variable
  if chosen_path_value.nil?
    env_path = ENV[env_var_name]
    if env_path && !env_path.empty?
      chosen_path_value = env_path
      source = "environment variable (#{env_var_name})"
    end
  end

  # Precedence 3: Default in Project Root
  if chosen_path_value.nil?
    root = find_flutter_root
    chosen_path_value = File.join(root, filename)
    # source remains "default in project root"
  end

  # Resolve the path and check for existence
  resolved_path = File.expand_path(chosen_path_value)

  if File.exist?(resolved_path)
    Fastlane::UI.verbose("Found #{filename} path from #{source}: #{resolved_path}")
  else
    Fastlane::UI.warning("#{filename} file not found at resolved path: #{resolved_path} (Source: #{source}).")
    # Note: We still return the path, as it might be created later or is only referenced for metadata.
  end

  return resolved_path
end