fastlane-plugin-csv_translation 0.1.0 β 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +20 -2
- data/lib/fastlane/plugin/csv_translation/actions/create_csv_feature_branch.rb +75 -0
- data/lib/fastlane/plugin/csv_translation/actions/create_csv_translation_request.rb +20 -10
- data/lib/fastlane/plugin/csv_translation/actions/delete_csv_translation_request.rb +21 -15
- data/lib/fastlane/plugin/csv_translation/actions/fetch_csv_branch.rb +66 -0
- data/lib/fastlane/plugin/csv_translation/actions/rebase_csv_translation_request.rb +148 -0
- data/lib/fastlane/plugin/csv_translation/helper/csv_translation_helper.rb +36 -5
- data/lib/fastlane/plugin/csv_translation/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f657887f9c46ed4aeb2e942573de7c46ed0dae74a9b55e09d26f1c177e1f4a28
|
4
|
+
data.tar.gz: 29420529f6802248e6f37c50f3e90c13224eece572a455037d8ace715a27e3f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d35379a205bebb7d6840b533dd26e127eb3b2c3f1414b9f373c76a6ec237dab062edb7fed4e208906d40be6cb46c75ad7837bf046f027d47fbd778d300df24da
|
7
|
+
data.tar.gz: b530f37c441e6616658486b142263d611dfc0e5f70306e4f689884a6576bd02e96141e28a133a5eec093606510f648845684323abccba23cf02ec3f4e98d368b
|
data/README.md
CHANGED
@@ -10,6 +10,11 @@ This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To
|
|
10
10
|
fastlane add_plugin csv_translation
|
11
11
|
```
|
12
12
|
|
13
|
+
If you are using fastlane using Gemfile in your project, add it to your project by running:
|
14
|
+
```bash
|
15
|
+
bundle exec fastlane add_plugin csv_translation
|
16
|
+
```
|
17
|
+
|
13
18
|
## About csv_translation
|
14
19
|
|
15
20
|
A fastlane plugin to manage translation using a CSV file under git repository. π
|
@@ -23,7 +28,7 @@ This plugin opens up an opportunity to automate reading from/writing of any `CSV
|
|
23
28
|
<img width="1476" alt="Example CSV" src="https://user-images.githubusercontent.com/5364500/81500222-fe912780-92d0-11ea-87a7-952a78b5cdf7.png">
|
24
29
|
|
25
30
|
## Actions
|
26
|
-
`fastlane-plugin-csv_translation` consists of
|
31
|
+
`fastlane-plugin-csv_translation` consists of 4 actions enabling you to manipulate `CSV` file from [`fastlane`](https://fastlane.tools).
|
27
32
|
|
28
33
|
### π‘ get_csv_translation_requests
|
29
34
|
Get all the translation info as hash from the CSV file, **print** the `translation_status` if translation_requests found.
|
@@ -50,7 +55,7 @@ get_csv_translation_requests(
|
|
50
55
|
Add a new translation request entry inside the CSV file. It will append a new row in CSV file and then git commit the CSV file changes.
|
51
56
|
|
52
57
|
``` ruby
|
53
|
-
example_csv_payload = {Ticket
|
58
|
+
example_csv_payload = { "Ticket" => "PRJ-3030", "Timeline" => "30 April" }
|
54
59
|
|
55
60
|
create_csv_translation_request(
|
56
61
|
repository_name: "crazymanish/example-csv-repo", # Specify the CSV git file repo
|
@@ -59,6 +64,19 @@ create_csv_translation_request(
|
|
59
64
|
)
|
60
65
|
```
|
61
66
|
|
67
|
+
### πrebase_csv_translation_request
|
68
|
+
Rebase a translation request entry inside the CSV file. It will append a new row top of target branch in CSV file and then git commit the CSV file changes. Very useful in case of resolving conflicts.
|
69
|
+
|
70
|
+
``` ruby
|
71
|
+
rebase_csv_translation_request(
|
72
|
+
repository_name: "crazymanish/example-csv-repo", # Specify the CSV git file repo
|
73
|
+
branch_name: "master", #Specify the target branch (default: master)
|
74
|
+
feature_branch_name: "some_feature_branch", #Specify the feature branch name
|
75
|
+
file_path: "example.csv", # Specify the CSV file path under the git repo
|
76
|
+
identifier: "PRJ-3030" # Specify the CSV row identifier
|
77
|
+
)
|
78
|
+
```
|
79
|
+
|
62
80
|
### βοΈ delete_csv_translation_request
|
63
81
|
Delete a new translation request entry from the CSV file based on CSV row Identifier. It will delete the matched row from the CSV file and then git commit the CSV file changes.
|
64
82
|
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'fastlane/action'
|
2
|
+
require_relative '../helper/csv_translation_helper'
|
3
|
+
|
4
|
+
module Fastlane
|
5
|
+
module Actions
|
6
|
+
module SharedValues
|
7
|
+
CREATE_CSV_FEATURE_BRANCH_INFO = :CREATE_CSV_FEATURE_BRANCH_INFO
|
8
|
+
end
|
9
|
+
|
10
|
+
class CreateCsvFeatureBranchAction < Action
|
11
|
+
def self.run(params)
|
12
|
+
# fetching csv file
|
13
|
+
csv_file_folder = Helper::CsvTranslationHelper.create_feature_branch(
|
14
|
+
repository_name: params[:repository_name],
|
15
|
+
branch_name: params[:branch_name],
|
16
|
+
feature_branch_name: params[:feature_branch_name]
|
17
|
+
)
|
18
|
+
|
19
|
+
Actions.lane_context[SharedValues::CREATE_CSV_FEATURE_BRANCH_INFO] = csv_file_folder
|
20
|
+
return csv_file_folder
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.description
|
24
|
+
"Create a csv feature branch."
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.output
|
28
|
+
[
|
29
|
+
['CREATE_CSV_FEATURE_BRANCH_INFO', 'Created feature branch info']
|
30
|
+
]
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.available_options
|
34
|
+
[
|
35
|
+
FastlaneCore::ConfigItem.new(key: :repository_name,
|
36
|
+
env_name: "FL_CREATE_CSV_FEATURE_BRANCH_REPOSITORY_NAME",
|
37
|
+
description: "The name to your repository, e.g. 'fastlane/fastlane'",
|
38
|
+
verify_block: proc do |value|
|
39
|
+
UI.user_error!("No repository_name given in input param") unless (value and not value.empty?)
|
40
|
+
end),
|
41
|
+
FastlaneCore::ConfigItem.new(key: :branch_name,
|
42
|
+
env_name: "FL_CREATE_CSV_BASE_BRANCH_NAME",
|
43
|
+
description: "The branch name to your repository, (default main)",
|
44
|
+
is_string: true,
|
45
|
+
default_value: "main"),
|
46
|
+
FastlaneCore::ConfigItem.new(key: :feature_branch_name,
|
47
|
+
env_name: "FL_CREATE_CSV_FEATURE_BRANCH_NAME",
|
48
|
+
description: "The feature branch name for new translation request (Useful if no direct commit allowed in master)",
|
49
|
+
is_string: true,
|
50
|
+
optional: true)
|
51
|
+
]
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.authors
|
55
|
+
["crazymanish"]
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.example_code
|
59
|
+
[
|
60
|
+
'create_csv_feature_branch(
|
61
|
+
repository_name: "fastlane/fastlane",
|
62
|
+
feature_branch_name: "some_feature_branch_name")',
|
63
|
+
'create_csv_feature_branch(
|
64
|
+
repository_name: "fastlane/fastlane",
|
65
|
+
branch_name: "master",
|
66
|
+
feature_branch_name: "some_feature_branch_name")'
|
67
|
+
]
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.is_supported?(platform)
|
71
|
+
true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -10,22 +10,27 @@ module Fastlane
|
|
10
10
|
class CreateCsvTranslationRequestAction < Action
|
11
11
|
def self.run(params)
|
12
12
|
# fetching csv file
|
13
|
-
csv_file_folder = Helper::CsvTranslationHelper.
|
13
|
+
csv_file_folder = Helper::CsvTranslationHelper.create_feature_branch(
|
14
14
|
repository_name: params[:repository_name],
|
15
|
-
branch_name: params[:branch_name]
|
15
|
+
branch_name: params[:branch_name],
|
16
|
+
feature_branch_name: params[:feature_branch_name]
|
16
17
|
)
|
17
18
|
|
18
19
|
csv_file_path = "#{csv_file_folder}/#{params[:file_path]}"
|
19
20
|
csv_payload = params[:payload]
|
20
21
|
|
22
|
+
# add missing newline if not present, at the end of the file
|
23
|
+
Helper::CsvTranslationHelper.append_missing_eof(csv_file_path)
|
24
|
+
|
21
25
|
# adding new entry into csv file
|
22
26
|
require 'csv'
|
23
|
-
CSV.open(csv_file_path,
|
24
|
-
|
27
|
+
headers = CSV.open(csv_file_path, &:readline)
|
28
|
+
CSV.open(csv_file_path, 'a', headers: headers, force_quotes: true) do |csv|
|
29
|
+
csv << csv_payload
|
25
30
|
end
|
26
31
|
|
27
32
|
# creating csv translation request
|
28
|
-
git_message = "New translation request
|
33
|
+
git_message = "New translation request:\n#{csv_payload}"
|
29
34
|
git_commit_info = ""
|
30
35
|
Dir.chdir(csv_file_folder) do
|
31
36
|
GitCommitAction.run(path: ".", message: git_message)
|
@@ -63,9 +68,14 @@ module Fastlane
|
|
63
68
|
end),
|
64
69
|
FastlaneCore::ConfigItem.new(key: :branch_name,
|
65
70
|
env_name: "FL_CREATE_CSV_TRANSLATION_REQUEST_BRANCH_NAME",
|
66
|
-
description: "The branch name to your repository, (default
|
71
|
+
description: "The branch name to your repository, (default main)",
|
72
|
+
is_string: true,
|
73
|
+
default_value: "main"),
|
74
|
+
FastlaneCore::ConfigItem.new(key: :feature_branch_name,
|
75
|
+
env_name: "FL_CREATE_CSV_TRANSLATION_REQUEST_FEATURE_BRANCH_NAME",
|
76
|
+
description: "The feature branch name for new translation request (Useful if no direct commit allowed in main)",
|
67
77
|
is_string: true,
|
68
|
-
|
78
|
+
optional: true),
|
69
79
|
FastlaneCore::ConfigItem.new(key: :file_path,
|
70
80
|
env_name: "FL_CREATE_CSV_TRANSLATION_REQUEST_FILE_PATH",
|
71
81
|
description: "The file path to your csv file",
|
@@ -86,12 +96,12 @@ module Fastlane
|
|
86
96
|
'create_csv_translation_request(
|
87
97
|
repository_name: "fastlane/fastlane",
|
88
98
|
file_path: "translation/some_csv_name.csv",
|
89
|
-
payload: {header_name
|
99
|
+
payload: {"header_name" => "some_value"})',
|
90
100
|
'create_csv_translation_request(
|
91
101
|
repository_name: "fastlane/fastlane",
|
92
|
-
branch_name: "
|
102
|
+
branch_name: "main",
|
93
103
|
file_path: "translation/some_csv_name.csv",
|
94
|
-
payload: {header_name
|
104
|
+
payload: {"header_name" => "some_value"})'
|
95
105
|
]
|
96
106
|
end
|
97
107
|
|
@@ -10,9 +10,10 @@ module Fastlane
|
|
10
10
|
class DeleteCsvTranslationRequestAction < Action
|
11
11
|
def self.run(params)
|
12
12
|
# fetching csv file
|
13
|
-
csv_file_folder = Helper::CsvTranslationHelper.
|
13
|
+
csv_file_folder = Helper::CsvTranslationHelper.create_feature_branch(
|
14
14
|
repository_name: params[:repository_name],
|
15
|
-
branch_name: params[:branch_name]
|
15
|
+
branch_name: params[:branch_name],
|
16
|
+
feature_branch_name: params[:feature_branch_name]
|
16
17
|
)
|
17
18
|
|
18
19
|
csv_file_path = "#{csv_file_folder}/#{params[:file_path]}"
|
@@ -25,7 +26,7 @@ module Fastlane
|
|
25
26
|
translation_requests = CSV.table(csv_file_path, headers: true)
|
26
27
|
translation_requests.delete_if { |row| row.map { |value| value.to_s }.join("").include?(csv_row_identifier) }
|
27
28
|
|
28
|
-
CSV.open(csv_file_path, "w", write_headers: true, headers: headers) do |csv|
|
29
|
+
CSV.open(csv_file_path, "w", write_headers: true, headers: headers, force_quotes: true) do |csv|
|
29
30
|
translation_requests.each { |translation_request| csv << translation_request }
|
30
31
|
end
|
31
32
|
|
@@ -36,17 +37,17 @@ module Fastlane
|
|
36
37
|
git_status = Actions::sh("git status --porcelain")
|
37
38
|
is_git_status_clean = git_status.empty?
|
38
39
|
|
39
|
-
#
|
40
|
+
# log message if translation request not found.
|
40
41
|
if is_git_status_clean
|
41
|
-
UI.
|
42
|
+
UI.important("Please check \"#{csv_row_identifier}\", not found the translation request. βοΈ")
|
43
|
+
else
|
44
|
+
git_message = "Deleted translation request: identifier: #{csv_row_identifier}"
|
45
|
+
GitCommitAction.run(path: ".", message: git_message)
|
46
|
+
PushToGitRemoteAction.run(remote: "origin")
|
47
|
+
git_commit_info = Actions.last_git_commit_dict
|
48
|
+
|
49
|
+
UI.success("Successfully #{git_message} π")
|
42
50
|
end
|
43
|
-
|
44
|
-
git_message = "Deleted translation request: identifier: #{csv_row_identifier}"
|
45
|
-
GitCommitAction.run(path: ".", message: git_message)
|
46
|
-
PushToGitRemoteAction.run(remote: "origin")
|
47
|
-
git_commit_info = Actions.last_git_commit_dict
|
48
|
-
|
49
|
-
UI.success("Successfully #{git_message} π")
|
50
51
|
end
|
51
52
|
|
52
53
|
# building deleted translation request info
|
@@ -78,9 +79,14 @@ module Fastlane
|
|
78
79
|
end),
|
79
80
|
FastlaneCore::ConfigItem.new(key: :branch_name,
|
80
81
|
env_name: "FL_DELETE_CSV_TRANSLATION_REQUEST_BRANCH_NAME",
|
81
|
-
description: "The branch name to your repository, (default
|
82
|
+
description: "The branch name to your repository, (default main)",
|
83
|
+
is_string: true,
|
84
|
+
default_value: "main"),
|
85
|
+
FastlaneCore::ConfigItem.new(key: :feature_branch_name,
|
86
|
+
env_name: "FL_DELETE_CSV_TRANSLATION_REQUEST_FEATURE_BRANCH_NAME",
|
87
|
+
description: "The feature branch name for new translation request (Useful if no direct commit allowed in main)",
|
82
88
|
is_string: true,
|
83
|
-
|
89
|
+
optional: true),
|
84
90
|
FastlaneCore::ConfigItem.new(key: :file_path,
|
85
91
|
env_name: "FL_DELETE_CSV_TRANSLATION_REQUEST_FILE_PATH",
|
86
92
|
description: "The file path to your csv file",
|
@@ -104,7 +110,7 @@ module Fastlane
|
|
104
110
|
identifier: "some_identifier_value")',
|
105
111
|
'delete_csv_translation_request(
|
106
112
|
repository_name: "fastlane/fastlane",
|
107
|
-
branch_name: "
|
113
|
+
branch_name: "main",
|
108
114
|
file_path: "translation/some_csv_name.csv",
|
109
115
|
identifier: "some_identifier_value")'
|
110
116
|
]
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'fastlane/action'
|
2
|
+
require_relative '../helper/csv_translation_helper'
|
3
|
+
|
4
|
+
module Fastlane
|
5
|
+
module Actions
|
6
|
+
module SharedValues
|
7
|
+
FETCH_CSV_BRANCH_INFO = :FETCH_CSV_BRANCH_INFO
|
8
|
+
end
|
9
|
+
|
10
|
+
class FetchCsvBranchAction < Action
|
11
|
+
def self.run(params)
|
12
|
+
# fetching csv file
|
13
|
+
csv_file_folder = Helper::CsvTranslationHelper.fetch_csv_file(
|
14
|
+
repository_name: repository_name,
|
15
|
+
branch_name: branch_name
|
16
|
+
)
|
17
|
+
|
18
|
+
Actions.lane_context[SharedValues::CREATE_CSV_FEATURE_BRANCH_INFO] = csv_file_folder
|
19
|
+
return csv_file_folder
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.description
|
23
|
+
"Fetch a csv file branch."
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.output
|
27
|
+
[
|
28
|
+
['FETCH_CSV_BRANCH_INFO', 'Fetched CSV file branch info']
|
29
|
+
]
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.available_options
|
33
|
+
[
|
34
|
+
FastlaneCore::ConfigItem.new(key: :repository_name,
|
35
|
+
env_name: "FL_FETCH_CSV_REPOSITORY_NAME",
|
36
|
+
description: "The name to your repository, e.g. 'fastlane/fastlane'",
|
37
|
+
verify_block: proc do |value|
|
38
|
+
UI.user_error!("No repository_name given in input param") unless (value and not value.empty?)
|
39
|
+
end),
|
40
|
+
FastlaneCore::ConfigItem.new(key: :branch_name,
|
41
|
+
env_name: "FL_FETCH_CSV_BRANCH_NAME",
|
42
|
+
description: "The branch name to your repository, (default main)",
|
43
|
+
is_string: true,
|
44
|
+
default_value: "main")
|
45
|
+
]
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.authors
|
49
|
+
["crazymanish"]
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.example_code
|
53
|
+
[
|
54
|
+
'fetch_csv_branch(repository_name: "fastlane/fastlane")',
|
55
|
+
'fetch_csv_branch(
|
56
|
+
repository_name: "fastlane/fastlane",
|
57
|
+
branch_name: "some_feature_branch_name")'
|
58
|
+
]
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.is_supported?(platform)
|
62
|
+
true
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'fastlane/action'
|
2
|
+
require_relative '../helper/csv_translation_helper'
|
3
|
+
|
4
|
+
module Fastlane
|
5
|
+
module Actions
|
6
|
+
module SharedValues
|
7
|
+
REBASE_CSV_TRANSLATION_REQUEST_INFO = :REBASE_CSV_TRANSLATION_REQUEST_INFO
|
8
|
+
end
|
9
|
+
|
10
|
+
class RebaseCsvTranslationRequestAction < Action
|
11
|
+
def self.run(params)
|
12
|
+
# fetching csv file
|
13
|
+
csv_file_folder = Helper::CsvTranslationHelper.fetch_csv_file(
|
14
|
+
repository_name: params[:repository_name],
|
15
|
+
branch_name: params[:feature_branch_name]
|
16
|
+
)
|
17
|
+
|
18
|
+
csv_file_path = "#{csv_file_folder}/#{params[:file_path]}"
|
19
|
+
csv_row_identifier = params[:identifier]
|
20
|
+
|
21
|
+
require 'csv'
|
22
|
+
|
23
|
+
# picking translation request-identifier entry from the feature_branch csv file
|
24
|
+
feature_branch_translation_requests = CSV.table(csv_file_path, headers: true)
|
25
|
+
feature_branch_translation_requests = feature_branch_translation_requests.select { |row| row.map { |value| value.to_s }.join("").include?(csv_row_identifier) }
|
26
|
+
|
27
|
+
# rebasing CSV file
|
28
|
+
git_commit_info = {}
|
29
|
+
Dir.chdir(csv_file_folder) do
|
30
|
+
# Step1: Checkout the target branch csv file
|
31
|
+
sh("git fetch --all")
|
32
|
+
sh("git checkout #{params[:branch_name]} -- #{params[:file_path]}")
|
33
|
+
|
34
|
+
# Validate: Do we really need to perfoem `rebase` ?
|
35
|
+
repo_status = Actions::sh("git status --porcelain")
|
36
|
+
repo_clean = repo_status.empty?
|
37
|
+
|
38
|
+
if repo_clean
|
39
|
+
UI.important("Rebase is not required, CSV file is up to date! πͺ")
|
40
|
+
else
|
41
|
+
git_commit_info = self.perform_rebase(params, csv_file_path, feature_branch_translation_requests)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# building deleted translation request info
|
46
|
+
rebase_translation_request_info = {
|
47
|
+
identifier: csv_row_identifier,
|
48
|
+
git_commit_info: git_commit_info}
|
49
|
+
|
50
|
+
Actions.lane_context[SharedValues::REBASE_CSV_TRANSLATION_REQUEST_INFO] = rebase_translation_request_info
|
51
|
+
return rebase_translation_request_info
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.perform_rebase(params, csv_file_path, feature_branch_translation_requests)
|
55
|
+
csv_row_identifier = params[:identifier]
|
56
|
+
|
57
|
+
# Step2: Commit csv file so rebase can be performed
|
58
|
+
git_message = "Rebase translation request: identifier:\n#{csv_row_identifier}"
|
59
|
+
GitCommitAction.run(path: ".", message: git_message)
|
60
|
+
|
61
|
+
# Step3: Perfoms rebasing, take all changes from target branch
|
62
|
+
sh("git rebase -X theirs " + params[:branch_name])
|
63
|
+
|
64
|
+
# Step4: Add missing newline if not present, at the end of the file
|
65
|
+
Helper::CsvTranslationHelper.append_missing_eof(csv_file_path)
|
66
|
+
|
67
|
+
# Step5: Append back feature branch translation_requests
|
68
|
+
all_translation_requests = CSV.table(csv_file_path, headers: true)
|
69
|
+
all_translation_requests.delete_if { |row| row.map { |value| value.to_s }.join("").include?(csv_row_identifier) }
|
70
|
+
|
71
|
+
headers = CSV.open(csv_file_path, &:readline)
|
72
|
+
CSV.open(csv_file_path, "w", write_headers: true, headers: headers, force_quotes: true) do |csv|
|
73
|
+
all_translation_requests.each { |translation_request| csv << translation_request }
|
74
|
+
feature_branch_translation_requests.each { |translation_request| csv << translation_request }
|
75
|
+
end
|
76
|
+
|
77
|
+
# Step6: Commit and push to remote
|
78
|
+
GitCommitAction.run(path: ".", message: git_message)
|
79
|
+
PushToGitRemoteAction.run(remote: "origin", force: true)
|
80
|
+
|
81
|
+
UI.success("Successfully #{git_message} π")
|
82
|
+
Actions.last_git_commit_dict
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.description
|
86
|
+
"Rebase a translation request based on identifier value."
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.output
|
90
|
+
[
|
91
|
+
['REBASE_CSV_TRANSLATION_REQUEST_INFO', 'Rebased translation request info i.e identifier, git_commit info']
|
92
|
+
]
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.available_options
|
96
|
+
[
|
97
|
+
FastlaneCore::ConfigItem.new(key: :repository_name,
|
98
|
+
env_name: "FL_REBASE_CSV_TRANSLATION_REQUEST_REPOSITORY_NAME",
|
99
|
+
description: "The name to your repository, e.g. 'fastlane/fastlane'",
|
100
|
+
verify_block: proc do |value|
|
101
|
+
UI.user_error!("No repository_name given in input param") unless (value and not value.empty?)
|
102
|
+
end),
|
103
|
+
FastlaneCore::ConfigItem.new(key: :branch_name,
|
104
|
+
env_name: "FL_REBASE_CSV_TRANSLATION_REQUEST_BRANCH_NAME",
|
105
|
+
description: "The branch name to your repository, (default main)",
|
106
|
+
is_string: true,
|
107
|
+
default_value: "main"),
|
108
|
+
FastlaneCore::ConfigItem.new(key: :feature_branch_name,
|
109
|
+
env_name: "FL_REBASE_CSV_TRANSLATION_REQUEST_FEATURE_BRANCH_NAME",
|
110
|
+
description: "The feature branch name for new translation request (Useful if no direct commit allowed in main)",
|
111
|
+
is_string: true),
|
112
|
+
FastlaneCore::ConfigItem.new(key: :file_path,
|
113
|
+
env_name: "FL_REBASE_CSV_TRANSLATION_REQUEST_FILE_PATH",
|
114
|
+
description: "The file path to your csv file",
|
115
|
+
is_string: true),
|
116
|
+
FastlaneCore::ConfigItem.new(key: :identifier,
|
117
|
+
env_name: "FL_REBASE_CSV_TRANSLATION_REQUEST_IDENTIFIER",
|
118
|
+
description: "An identifier value of the CSV file row",
|
119
|
+
is_string: true)
|
120
|
+
]
|
121
|
+
end
|
122
|
+
|
123
|
+
def self.authors
|
124
|
+
["crazymanish"]
|
125
|
+
end
|
126
|
+
|
127
|
+
def self.example_code
|
128
|
+
[
|
129
|
+
'rebase_csv_translation_request(
|
130
|
+
repository_name: "fastlane/fastlane",
|
131
|
+
feature_branch_name: "some_feature_branch",
|
132
|
+
file_path: "translation/some_csv_name.csv",
|
133
|
+
identifier: "some_identifier_value")',
|
134
|
+
'rebase_csv_translation_request(
|
135
|
+
repository_name: "fastlane/fastlane",
|
136
|
+
branch_name: "main",
|
137
|
+
feature_branch_name: "some_feature_branch",
|
138
|
+
file_path: "translation/some_csv_name.csv",
|
139
|
+
identifier: "some_identifier_value")'
|
140
|
+
]
|
141
|
+
end
|
142
|
+
|
143
|
+
def self.is_supported?(platform)
|
144
|
+
true
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
@@ -6,25 +6,56 @@ module Fastlane
|
|
6
6
|
module Helper
|
7
7
|
class CsvTranslationHelper
|
8
8
|
|
9
|
+
def self.csv_file_directory_name
|
10
|
+
return ".fl_clone_csv_file"
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.csv_file_directory_path
|
14
|
+
return File.join(Dir.pwd, self.csv_file_directory_name)
|
15
|
+
end
|
16
|
+
|
9
17
|
def self.fetch_csv_file(params)
|
10
18
|
repository_name = params[:repository_name]
|
11
19
|
branch_name = params[:branch_name]
|
12
20
|
|
13
21
|
# Setup csv_file folder for fresh git clone.
|
14
|
-
|
15
|
-
git_clone_folder = File.join(Dir.pwd, csv_file_folder_name)
|
22
|
+
git_clone_folder = self.csv_file_directory_path
|
16
23
|
FileUtils.rm_rf(git_clone_folder) if File.directory?(git_clone_folder)
|
17
|
-
Dir.mkdir(
|
24
|
+
Dir.mkdir(self.csv_file_directory_name)
|
18
25
|
|
19
26
|
UI.success("Fetching csv file from git repo... β³")
|
20
|
-
branch_option = "--branch #{branch_name}" if branch_name != 'HEAD'
|
21
27
|
git_url = "git@github.com:#{repository_name}"
|
22
|
-
Fastlane::Actions::sh("git clone #{git_url.shellescape} #{git_clone_folder.shellescape}
|
28
|
+
Fastlane::Actions::sh("git clone #{git_url.shellescape} #{git_clone_folder.shellescape}")
|
23
29
|
Fastlane::Actions::sh("cd #{git_clone_folder.shellescape} && git checkout #{branch_name}")
|
24
30
|
|
25
31
|
return git_clone_folder
|
26
32
|
end
|
27
33
|
|
34
|
+
def self.create_feature_branch(params)
|
35
|
+
git_clone_folder = self.fetch_csv_file(params)
|
36
|
+
|
37
|
+
# creating and checkout new branch
|
38
|
+
branch_name = params[:feature_branch_name]
|
39
|
+
Fastlane::Actions::sh("cd #{git_clone_folder.shellescape} && git checkout -b #{branch_name}")
|
40
|
+
|
41
|
+
# pushing newly created branch
|
42
|
+
Fastlane::Actions::sh("cd #{git_clone_folder.shellescape} && git push -u origin #{branch_name}")
|
43
|
+
|
44
|
+
return git_clone_folder
|
45
|
+
end
|
46
|
+
|
47
|
+
# add missing newline if not present, at the end of the file
|
48
|
+
def self.append_missing_eof(file_path)
|
49
|
+
File.open(file_path, "r+") do |file|
|
50
|
+
file.seek(-1, 2)
|
51
|
+
|
52
|
+
if file.read(1) != "\n"
|
53
|
+
file.write("\n")
|
54
|
+
file.seek(0)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
28
59
|
end
|
29
60
|
end
|
30
61
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-csv_translation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manish Rathi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -145,9 +145,12 @@ files:
|
|
145
145
|
- LICENSE
|
146
146
|
- README.md
|
147
147
|
- lib/fastlane/plugin/csv_translation.rb
|
148
|
+
- lib/fastlane/plugin/csv_translation/actions/create_csv_feature_branch.rb
|
148
149
|
- lib/fastlane/plugin/csv_translation/actions/create_csv_translation_request.rb
|
149
150
|
- lib/fastlane/plugin/csv_translation/actions/delete_csv_translation_request.rb
|
151
|
+
- lib/fastlane/plugin/csv_translation/actions/fetch_csv_branch.rb
|
150
152
|
- lib/fastlane/plugin/csv_translation/actions/get_csv_translation_requests.rb
|
153
|
+
- lib/fastlane/plugin/csv_translation/actions/rebase_csv_translation_request.rb
|
151
154
|
- lib/fastlane/plugin/csv_translation/helper/csv_translation_helper.rb
|
152
155
|
- lib/fastlane/plugin/csv_translation/version.rb
|
153
156
|
homepage: https://github.com/crazymanish/fastlane-plugin-csv_translation
|
@@ -169,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
172
|
- !ruby/object:Gem::Version
|
170
173
|
version: '0'
|
171
174
|
requirements: []
|
172
|
-
rubygems_version: 3.
|
175
|
+
rubygems_version: 3.1.4
|
173
176
|
signing_key:
|
174
177
|
specification_version: 4
|
175
178
|
summary: "A fastlane plugin to manage translation using a CSV file under git repository.
|