fastlane-plugin-wpmreleasetoolkit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +339 -0
  3. data/README.md +38 -0
  4. data/bin/drawText +19 -0
  5. data/ext/drawText/extconf.rb +36 -0
  6. data/lib/fastlane/plugin/wpmreleasetoolkit.rb +16 -0
  7. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/README.md +20 -0
  8. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/an_localize_libs_action.rb +53 -0
  9. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/an_update_metadata_source_action.rb +171 -0
  10. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/an_validate_lib_strings_action.rb +63 -0
  11. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_betabuild_prechecks.rb +103 -0
  12. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_build_prechecks.rb +83 -0
  13. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_build_preflight.rb +54 -0
  14. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_bump_version_beta.rb +69 -0
  15. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_bump_version_final_release.rb +58 -0
  16. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_bump_version_hotfix.rb +77 -0
  17. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_bump_version_release.rb +89 -0
  18. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_codefreeze_prechecks.rb +79 -0
  19. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_completecodefreeze_prechecks.rb +68 -0
  20. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_create_xml_release_notes.rb +63 -0
  21. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_current_branch_is_hotfix.rb +44 -0
  22. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_download_file_by_version.rb +79 -0
  23. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_download_translations_action.rb +115 -0
  24. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_finalize_prechecks.rb +71 -0
  25. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_get_alpha_version.rb +44 -0
  26. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_get_app_version.rb +44 -0
  27. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_get_release_version.rb +44 -0
  28. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_hotifx_prechecks.rb +78 -0
  29. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_merge_translators_strings.rb +106 -0
  30. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_tag_build.rb +51 -0
  31. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_update_metadata.rb +52 -0
  32. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_update_release_notes.rb +56 -0
  33. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/circleci_trigger_job_action.rb +63 -0
  34. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/close_milestone_action.rb +56 -0
  35. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/create_new_milestone_action.rb +59 -0
  36. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/create_release_action.rb +91 -0
  37. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/extract_release_notes_for_version_action.rb +89 -0
  38. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/get_prs_list_action.rb +64 -0
  39. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/gp_downloadmetadata_action.rb +90 -0
  40. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/gp_update_metadata_source.rb +170 -0
  41. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/promo_screenshots_action.rb +247 -0
  42. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/removebranchprotection_action.rb +57 -0
  43. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/setbranchprotection_action.rb +56 -0
  44. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/setfrozentag_action.rb +81 -0
  45. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_add_files_to_copy_action.rb +96 -0
  46. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_apply_action.rb +139 -0
  47. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_download_action.rb +57 -0
  48. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_setup_action.rb +86 -0
  49. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_update_action.rb +139 -0
  50. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_validate_action.rb +134 -0
  51. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_development_certificates_to_provisioning_profiles.rb +77 -0
  52. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_devices_to_provisioning_profiles.rb +79 -0
  53. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_betabuild_prechecks.rb +92 -0
  54. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_build_prechecks.rb +74 -0
  55. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_build_preflight.rb +78 -0
  56. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_bump_version_beta.rb +68 -0
  57. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_bump_version_hotfix.rb +87 -0
  58. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_bump_version_release.rb +114 -0
  59. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_check_beta_deps.rb +62 -0
  60. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_clear_intermediate_tags.rb +60 -0
  61. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_codefreeze_prechecks.rb +70 -0
  62. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_completecodefreeze_prechecks.rb +63 -0
  63. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_current_branch_is_hotfix.rb +40 -0
  64. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_final_tag.rb +52 -0
  65. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_finalize_prechecks.rb +64 -0
  66. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_get_app_version.rb +47 -0
  67. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_get_build_version.rb +60 -0
  68. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_get_store_app_sizes.rb +121 -0
  69. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_hotifx_prechecks.rb +78 -0
  70. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_lint_localizations.rb +167 -0
  71. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_localize_project.rb +44 -0
  72. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_merge_translators_strings.rb +93 -0
  73. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_tag_build.rb +44 -0
  74. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_update_metadata.rb +40 -0
  75. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_update_metadata_source.rb +81 -0
  76. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_update_release_notes.rb +56 -0
  77. data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_validate_ci_build.rb +46 -0
  78. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/an_metadata_update_helper.rb +152 -0
  79. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_git_helper.rb +44 -0
  80. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_localize_helper.rb +359 -0
  81. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_version_helper.rb +475 -0
  82. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/ci_helper.rb +91 -0
  83. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/configure_helper.rb +282 -0
  84. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/encryption_helper.rb +51 -0
  85. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/filesystem_helper.rb +93 -0
  86. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/git_helper.rb +224 -0
  87. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/github_helper.rb +135 -0
  88. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_adc_app_sizes_helper.rb +74 -0
  89. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_git_helper.rb +80 -0
  90. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_l10n_helper.rb +208 -0
  91. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_version_helper.rb +348 -0
  92. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata_download_helper.rb +107 -0
  93. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata_update_helper.rb +182 -0
  94. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/promo_screenshots_helper.rb +399 -0
  95. data/lib/fastlane/plugin/wpmreleasetoolkit/helper/release_notes_helper.rb +21 -0
  96. data/lib/fastlane/plugin/wpmreleasetoolkit/models/configuration.rb +40 -0
  97. data/lib/fastlane/plugin/wpmreleasetoolkit/models/file_reference.rb +86 -0
  98. data/lib/fastlane/plugin/wpmreleasetoolkit/version.rb +5 -0
  99. metadata +449 -0
@@ -0,0 +1,170 @@
1
+ require 'fastlane/action'
2
+ require_relative '../../helper/metadata_update_helper.rb'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class GpUpdateMetadataSourceAction < Action
7
+ def self.run(params)
8
+ # fastlane will take care of reading in the parameter and fetching the environment variable:
9
+ UI.message "Parameter .po file path: #{params[:po_file_path]}"
10
+ UI.message "Release version: #{params[:release_version]}"
11
+
12
+ # Init
13
+ create_block_parsers(params[:release_version], params[:source_files])
14
+
15
+ # Do
16
+ check_source_files(params[:source_files])
17
+ temp_po_name = create_temp_po(params)
18
+ swap_po(params[:po_file_path], temp_po_name)
19
+
20
+ UI.message "File #{params[:po_file_path]} updated!"
21
+ end
22
+
23
+ # Verifies that all the source files are available
24
+ # to this action
25
+ def self.check_source_files(source_files)
26
+ source_files.values.each do |file_path|
27
+ UI.user_error!("Couldn't find file at path '#{file_path}'") unless File.exist?(file_path)
28
+ end
29
+ end
30
+
31
+ # Creates a temp po file merging
32
+ # new data for known tags
33
+ # and the data already in the original
34
+ # .po fo the others.
35
+ def self.create_temp_po(params)
36
+ orig = params[:po_file_path]
37
+ target = self.create_target_file_path(orig)
38
+
39
+ # Clear if older exists
40
+ File.delete(target) if File.exist? target
41
+
42
+ # Create the new one
43
+ begin
44
+ File.open(target, 'a') do |fw|
45
+ File.open(orig, 'r').each do |fr|
46
+ write_target_block(fw, fr)
47
+ end
48
+ end
49
+ rescue
50
+ File.delete(target) if File.exist? target
51
+ raise
52
+ end
53
+
54
+ target
55
+ end
56
+
57
+ # Deletes the old po and moves the temp one
58
+ # to the final location
59
+ def self.swap_po(orig_file_path, temp_file_path)
60
+ File.delete(orig_file_path) if File.exist? orig_file_path
61
+ File.rename(temp_file_path, orig_file_path)
62
+ end
63
+
64
+ # Generates the temp file path
65
+ def self.create_target_file_path(orig_file_path)
66
+ "#{File.dirname(orig_file_path)}/#{File.basename(orig_file_path, '.*')}.tmp"
67
+ end
68
+
69
+ # Creates the block instances
70
+ def self.create_block_parsers(release_version, block_files)
71
+ @blocks = []
72
+
73
+ # Inits default handler
74
+ @blocks.push Fastlane::Helper::UnknownMetadataBlock.new
75
+
76
+ # Init special handlers
77
+ block_files.each do |key, file_path|
78
+ if key == :release_note
79
+ @blocks.push Fastlane::Helper::ReleaseNoteMetadataBlock.new(key, file_path, release_version)
80
+ elsif key == :whats_new
81
+ @blocks.push Fastlane::Helper::WhatsNewMetadataBlock.new(key, file_path, release_version)
82
+ else
83
+ @blocks.push Fastlane::Helper::StandardMetadataBlock.new(key, file_path)
84
+ end
85
+ end
86
+
87
+ # Sets the default
88
+ @current_block = @blocks[0]
89
+ end
90
+
91
+ # Manages tags depending on the type
92
+ def self.write_target_block(fw, line)
93
+ if is_block_id(line)
94
+ key = line.split(' ')[1].tr('\"', '')
95
+ @blocks.each do |block|
96
+ @current_block = block if block.is_handler_for(key)
97
+ end
98
+ end
99
+
100
+ @current_block = @blocks.first if is_comment(line)
101
+
102
+ @current_block.handle_line(fw, line)
103
+ end
104
+
105
+ def self.is_block_id(line)
106
+ line.start_with?('msgctxt')
107
+ end
108
+
109
+ def self.is_comment(line)
110
+ line.start_with?('#')
111
+ end
112
+
113
+ #####################################################
114
+ # @!group Documentation
115
+ #####################################################
116
+
117
+ def self.description
118
+ 'Updates a .po file with new data from .txt files'
119
+ end
120
+
121
+ def self.details
122
+ 'You can use this action to update the .po file that contains the string to load to GlotPress for localization.'
123
+ end
124
+
125
+ def self.available_options
126
+ # Define all options your action supports.
127
+
128
+ # Below a few examples
129
+ [
130
+ FastlaneCore::ConfigItem.new(key: :po_file_path,
131
+ env_name: 'FL_UPDATE_METADATA_SOURCE_PO_FILE_PATH',
132
+ description: 'The path of the .po file to update',
133
+ is_string: true,
134
+ verify_block: proc do |value|
135
+ UI.user_error!("No .po file path for UpdateMetadataSourceAction given, pass using `po_file_path: 'file path'`") unless value && (!value.empty?)
136
+ UI.user_error!("Couldn't find file at path '#{value}'") unless File.exist?(value)
137
+ end),
138
+ FastlaneCore::ConfigItem.new(key: :release_version,
139
+ env_name: 'FL_UPDATE_METADATA_SOURCE_RELEASE_VERSION',
140
+ description: 'The release version of the app (to use to mark the release notes)',
141
+ verify_block: proc do |value|
142
+ UI.user_error!("No relase version for UpdateMetadataSourceAction given, pass using `release_version: 'version'`") unless value && (!value.empty?)
143
+ end),
144
+ FastlaneCore::ConfigItem.new(key: :source_files,
145
+ env_name: 'FL_UPDATE_METADATA_SOURCE_SOURCE_FILES',
146
+ description: 'The hash with the path to the source files and the key to use to include their content',
147
+ is_string: false,
148
+ verify_block: proc do |value|
149
+ UI.user_error!("No source file hash for UpdateMetadataSourceAction given, pass using `source_files: 'source file hash'`") unless value && (!value.empty?)
150
+ end),
151
+ ]
152
+ end
153
+
154
+ def self.output
155
+ end
156
+
157
+ def self.return_value
158
+ # If your method provides a return value, you can describe here what it does
159
+ end
160
+
161
+ def self.authors
162
+ ['loremattei']
163
+ end
164
+
165
+ def self.is_supported?(platform)
166
+ [:ios, :android].include?(platform)
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,247 @@
1
+ require 'fileutils'
2
+ require 'fastlane/action'
3
+ require 'active_support/all'
4
+ require_relative '../../helper/promo_screenshots_helper.rb'
5
+
6
+ module Fastlane
7
+ module Actions
8
+ class PromoScreenshotsAction < Action
9
+ def self.run(params)
10
+ UI.message 'Creating Promo Screenshots'
11
+ UI.message "#{self.check_path(params[:orig_folder])} Original Screenshot Source: #{params[:orig_folder]}"
12
+ UI.message "#{self.check_path(params[:metadata_folder])} Translation source: #{params[:metadata_folder]}"
13
+
14
+ config = helper.read_json(params[:config_file])
15
+
16
+ translationDirectories = subdirectories_for_path(params[:metadata_folder])
17
+ imageDirectories = subdirectories_for_path(params[:orig_folder])
18
+
19
+ unless helper.can_resolve_path(params[:output_folder])
20
+ UI.message "✅ Created Output Folder: #{params[:output_folder]}"
21
+ FileUtils.mkdir_p(params[:output_folder])
22
+ else
23
+ UI.message "#{self.check_path(params[:output_folder])} Output Folder: #{params[:output_folder]}"
24
+ end
25
+
26
+ outputDirectory = helper.resolve_path(params[:output_folder])
27
+
28
+ ## If there are no translated screenshot images (whether it's because they haven't been generated yet,
29
+ ## or because we aren't using them), just use the translated directories.
30
+ languages = if imageDirectories == []
31
+ translationDirectories
32
+ ## And vice-versa.
33
+ elsif translationDirectories == []
34
+ imageDirectories
35
+ ## If there are original screenshots and translations available, use only locales that exist in both.
36
+ else
37
+ imageDirectories & translationDirectories
38
+ end
39
+
40
+ UI.message("💙 Creating Promo Screenshots for: #{languages.join(', ')}")
41
+
42
+ confirm_directory_overwrite(params[:output_folder], 'the existing promo screenshots') unless params[:force]
43
+
44
+ # Create a hash of devices, keyed by device name
45
+ devices = config['devices']
46
+ devices = Hash[devices.map { |device| device['name'] }.zip(devices)]
47
+
48
+ stylesheet_path = config['stylesheet']
49
+
50
+ entries = build_entries(config['entries'], languages, outputDirectory, params)
51
+
52
+ bar = ProgressBar.new(entries.count, :bar, :counter, :eta, :rate)
53
+
54
+ Parallel.map(entries, finish: lambda { |_item, _i, _result|
55
+ bar.increment!
56
+ }) do |entry|
57
+ device = devices[entry['device']]
58
+
59
+ UI.message("Unable to find device #{entry['device']}.") if device.nil?
60
+
61
+ width = device['canvas_size'][0]
62
+ height = device['canvas_size'][1]
63
+
64
+ canvas = helper.create_image(width, height)
65
+ canvas = helper.draw_background_to_canvas(canvas, entry)
66
+
67
+ canvas = helper.draw_device_frame_to_canvas(device, canvas)
68
+ canvas = helper.draw_caption_to_canvas(entry, canvas, device, stylesheet_path)
69
+ canvas = helper.draw_screenshot_to_canvas(entry, canvas, device)
70
+ canvas = helper.draw_attachments_to_canvas(entry, canvas)
71
+
72
+ # Automatically create intermediate directories for output
73
+ output_filename = entry['filename']
74
+ dirname = File.dirname(output_filename)
75
+
76
+ FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
77
+
78
+ canvas.write(output_filename)
79
+ canvas.destroy!
80
+
81
+ # Run the GC in the same thread to clean up after RMagick
82
+ GC.start
83
+ end
84
+ end
85
+
86
+ def self.confirm_directory_overwrite(path, description)
87
+ if File.exist?(path)
88
+ if UI.confirm("Do you want to overwrite #{description}?")
89
+ FileUtils.rm_rf(path)
90
+ Dir.mkdir(path)
91
+ else
92
+ UI.user_error!("Exiting to avoid overwriting #{description}.")
93
+ end
94
+ else
95
+ Dir.mkdir(path)
96
+ end
97
+ end
98
+
99
+ def self.subdirectories_for_path(path)
100
+ subdirectories = []
101
+
102
+ return [] unless helper.can_resolve_path(path)
103
+
104
+ resolved_path = helper.resolve_path(path)
105
+
106
+ Dir.chdir(resolved_path) do
107
+ subdirectories = Dir['*'].select { |o| File.directory?(o) }.sort
108
+ end
109
+
110
+ subdirectories
111
+ end
112
+
113
+ def self.check_path(path)
114
+ self.helper.can_resolve_path(path) ? '✅' : '🚫'
115
+ end
116
+
117
+ def self.helper
118
+ return Fastlane::Helper::PromoScreenshots.new
119
+ end
120
+
121
+ def self.description
122
+ 'Generate promo screenshots'
123
+ end
124
+
125
+ def self.authors
126
+ ['Lorenzo Mattei']
127
+ end
128
+
129
+ def self.return_value
130
+ # If your method provides a return value, you can describe here what it does
131
+ end
132
+
133
+ def self.details
134
+ # Optional:
135
+ 'Creates promo screenshots starting from standard ones'
136
+ end
137
+
138
+ def self.available_options
139
+ [
140
+ FastlaneCore::ConfigItem.new(key: :orig_folder,
141
+ env_name: 'PROMOSS_ORIG',
142
+ description: 'The directory containing the original screenshots',
143
+ optional: false,
144
+ is_string: true),
145
+ FastlaneCore::ConfigItem.new(key: :output_folder,
146
+ env_name: 'PROMOSS_OUTPUT',
147
+ description: 'The path of the folder to save the promo screenshots',
148
+ optional: false,
149
+ is_string: true),
150
+
151
+ FastlaneCore::ConfigItem.new(key: :metadata_folder,
152
+ env_name: 'PROMOSS_METADATA_FOLDER',
153
+ description: 'The directory containing the translation data',
154
+ optional: false,
155
+ is_string: true),
156
+
157
+ FastlaneCore::ConfigItem.new(key: :config_file,
158
+ env_name: 'PROMOSS_CONFIG_FILE',
159
+ description: 'The path to the file containing the promo screenshot configuration',
160
+ optional: true,
161
+ is_string: true,
162
+ default_value: 'screenshots.json'),
163
+
164
+ FastlaneCore::ConfigItem.new(key: :force,
165
+ env_name: 'PROMOSS_FORCE_CREATION',
166
+ description: 'Overwrite existing promo screenshots without asking first?',
167
+ optional: true,
168
+ is_string: false,
169
+ default_value: false),
170
+ ]
171
+ end
172
+
173
+ def self.is_supported?(platform)
174
+ true
175
+ end
176
+
177
+ def self.build_entries(config_entries, languages, output_directory, params)
178
+ config_entries
179
+ .flat_map do |entry|
180
+ languages.map do |language|
181
+ newEntry = entry.deep_dup
182
+
183
+ # Not every output file will have a screenshot, so handle cases where no
184
+ # screenshot file is defined
185
+ if !entry['screenshot'].nil? && !entry['filename'].nil?
186
+ newEntry['screenshot'] = helper.resolve_path(params[:orig_folder]) + language + entry['screenshot']
187
+ newEntry['filename'] = output_directory + language + entry['filename']
188
+ elsif !entry['screenshot'].nil? && entry['filename'].nil?
189
+ newEntry['screenshot'] = helper.resolve_path(params[:orig_folder]) + language + entry['screenshot']
190
+ newEntry['filename'] = output_directory + language + entry['screenshot']
191
+ elsif entry['screenshot'].nil? && !entry['filename'].nil?
192
+ newEntry['filename'] = output_directory + language + entry['filename']
193
+ else
194
+ puts newEntry
195
+ abort 'Unable to find output file names'
196
+ end
197
+
198
+ newEntry['locale'] = language
199
+
200
+ # Localize file paths for text
201
+ newEntry['text'].sub!('{locale}', language.dup) unless entry['text'].nil?
202
+
203
+ # Map attachments paths to their localized versions
204
+ newEntry['attachments'] = [] if newEntry['attachments'].nil?
205
+
206
+ newEntry['attachments'].each do |attachment|
207
+ ## If there are no translated screenshot images (whether it's because they haven't been generated yet,
208
+ ## or because we aren't using them), just use the translated directories.
209
+ ## And vice-versa.
210
+ ## If there are original screenshots and translations available, use only locales that exist in both.
211
+ # Create a hash of devices, keyed by device name
212
+ # Not every output file will have a screenshot, so handle cases where no
213
+ # screenshot file is defined
214
+ # Localize file paths for text
215
+ # Map attachments paths to their localized versions
216
+ # Automatically create intermediate directories for output
217
+ # Run the GC in the same thread to clean up after RMagick
218
+ # If your method provides a return value, you can describe here what it does
219
+ # Optional:
220
+ attachment['file']&.sub!('{locale}', language.dup)
221
+
222
+ ## If there are no translated screenshot images (whether it's because they haven't been generated yet,
223
+ ## or because we aren't using them), just use the translated directories.
224
+ ## And vice-versa.
225
+ ## If there are original screenshots and translations available, use only locales that exist in both.
226
+ # Create a hash of devices, keyed by device name
227
+ # Not every output file will have a screenshot, so handle cases where no
228
+ # screenshot file is defined
229
+ # Localize file paths for text
230
+ # Map attachments paths to their localized versions
231
+ # Automatically create intermediate directories for output
232
+ # Run the GC in the same thread to clean up after RMagick
233
+ # If your method provides a return value, you can describe here what it does
234
+ # Optional:
235
+ attachment['text']&.sub!('{locale}', language.dup)
236
+ end
237
+
238
+ newEntry
239
+ end
240
+ end
241
+ .sort do |x, y|
242
+ x['filename'] <=> y['filename']
243
+ end
244
+ end
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,57 @@
1
+ require 'fastlane/action'
2
+ require_relative '../../helper/github_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class RemovebranchprotectionAction < Action
7
+ def self.run(params)
8
+ repository = params[:repository]
9
+ branch_name = params[:branch]
10
+ branch_prot = {}
11
+
12
+ branch_url = "https://api.github.com/repos/#{repository}/branches/" + branch_name
13
+ branch_prot[:restrictions] = { url: branch_url + '/protection/restrictions', users_url: branch_url + '/protection/restrictions/users', teams_url: branch_url + '/protection/restrictions/teams', users: [], teams: [] }
14
+ branch_prot[:enforce_admins] = nil
15
+ branch_prot[:required_pull_request_reviews] = { url: branch_url + '/protection/required_pull_request_reviews', dismiss_stale_reviews: false, require_code_owner_reviews: false }
16
+
17
+ Fastlane::Helper::GithubHelper.github_client().unprotect_branch(repository, branch_name, branch_prot)
18
+ end
19
+
20
+ def self.description
21
+ "Removes the 'release branch' protection state for the specified branch"
22
+ end
23
+
24
+ def self.authors
25
+ ['Lorenzo Mattei']
26
+ end
27
+
28
+ def self.return_value
29
+ # If your method provides a return value, you can describe here what it does
30
+ end
31
+
32
+ def self.details
33
+ # Optional:
34
+ "Sets the 'release branch' protection state for the specified branch"
35
+ end
36
+
37
+ def self.available_options
38
+ [
39
+ FastlaneCore::ConfigItem.new(key: :repository,
40
+ env_name: 'GHHELPER_REPOSITORY',
41
+ description: 'The remote path of the GH repository on which we work',
42
+ optional: false,
43
+ type: String),
44
+ FastlaneCore::ConfigItem.new(key: :branch,
45
+ env_name: 'GHHELPER_BRANCH',
46
+ description: 'The branch to unprotect',
47
+ optional: false,
48
+ type: String),
49
+ ]
50
+ end
51
+
52
+ def self.is_supported?(platform)
53
+ true
54
+ end
55
+ end
56
+ end
57
+ end