Class: Fastlane::Actions::SetValueInBuildAction

Inherits:
Action
  • Object
show all
Defined in:
lib/fastlane/plugin/android_versioning_kts/actions/set_value_in_build.rb

Documentation collapse

Class Method Summary collapse

Class Method Details

.authorsObject



117
118
119
# File 'lib/fastlane/plugin/android_versioning_kts/actions/set_value_in_build.rb', line 117

def self.authors
  ['Manabu OHTAKE']
end

.available_optionsObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/fastlane/plugin/android_versioning_kts/actions/set_value_in_build.rb', line 76

def self.available_options
  [
    FastlaneCore::ConfigItem.new(
      key: :app_project_dir,
      env_name: 'ANDROID_VERSIONING_APP_PROJECT_DIR',
      description: 'The path to the application source folder
        in the Android project (default: android/app)',
      optional: true,
      type: String,
      default_value: 'android/app'
    ),
    FastlaneCore::ConfigItem.new(
      key: :flavor,
      env_name: 'ANDROID_VERSIONING_FLAVOR',
      description: 'The product flavor name (optional)',
      optional: true,
      type: String
    ),
    FastlaneCore::ConfigItem.new(
      key: :key,
      description: 'The property key',
      type: String
    ),
    FastlaneCore::ConfigItem.new(
      key: :value,
      description: 'The property value',
      type: String
    )
  ]
end

.descriptionObject



107
108
109
# File 'lib/fastlane/plugin/android_versioning_kts/actions/set_value_in_build.rb', line 107

def self.description
  'Set the value of your project'
end

.detailsObject



111
112
113
114
115
# File 'lib/fastlane/plugin/android_versioning_kts/actions/set_value_in_build.rb', line 111

def self.details
  [
    'This action will set the value directly in build.gradle.kts '
  ].join("\n")
end

.is_supported?(platform) ⇒ Boolean

Returns:

  • (Boolean)


121
122
123
# File 'lib/fastlane/plugin/android_versioning_kts/actions/set_value_in_build.rb', line 121

def self.is_supported?(platform)
  platform == :android
end

.run(params) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
# File 'lib/fastlane/plugin/android_versioning_kts/actions/set_value_in_build.rb', line 9

def self.run(params)
  app_project_dir ||= params[:app_project_dir]
  regex = /
    (?<key>#{params[:key]}\s*=\s*)
    (?<left>['"]?)
    (?<value>[a-zA-Z0-9._]*)
    (?<right>['"]?)
    (?<comment>.*)
  /x
  flavor = params[:flavor]
  flavor_specified = !(flavor.nil? || flavor.empty?)
  regex_flavor = /[ \t]create\("#{flavor}"\)[ \t]/
  found = false
  product_flavors_section = false
  flavor_found = false
  Dir.glob("#{app_project_dir}/build.gradle.kts") do |path|
    temp_file = Tempfile.new('versioning')
    File.open(path, 'r') do |file|
      file.each_line do |line|
        if flavor_specified && !product_flavors_section
          unless line.include?('productFlavors') || product_flavors_section
            temp_file.puts line
            next
          end
          product_flavors_section = true
        end

        if flavor_specified && !flavor_found
          unless line.match(regex_flavor)
            temp_file.puts line
            next
          end
          flavor_found = true
        end

        unless line.match(regex) && !found
          temp_file.puts line
          next
        end
        line = line.gsub regex,
                         "\\k<key>\\k<left>#{params[:value]}\\k<right>\\k<comment>"
        found = true
        temp_file.puts line
      end
      file.close
    end
    temp_file.rewind
    temp_file.close

    begin
      FileUtils.mv(temp_file.path, path)
    rescue => ex
      if ex.message.to_s.include? 'Operation not permitted'
        FileUtils.cp(temp_file.path, path)
        FileUtils.rm(temp_file.path)
      else
        raise ex
      end
    end

    temp_file.unlink
  end
end