pantograph 0.1.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.
- checksums.yaml +7 -0
- data/.yardopts +1 -0
- data/LICENSE +21 -0
- data/README.md +197 -0
- data/bin/bin-proxy +19 -0
- data/bin/pantograph +23 -0
- data/pantograph/README.md +11 -0
- data/pantograph/lib/assets/ActionDetails.md.erb +106 -0
- data/pantograph/lib/assets/Actions.md.erb +43 -0
- data/pantograph/lib/assets/DefaultPantfileTemplate +20 -0
- data/pantograph/lib/assets/completions/completion.bash +23 -0
- data/pantograph/lib/assets/completions/completion.fish +39 -0
- data/pantograph/lib/assets/completions/completion.sh +12 -0
- data/pantograph/lib/assets/completions/completion.zsh +23 -0
- data/pantograph/lib/assets/custom_action_template.rb +80 -0
- data/pantograph/lib/assets/report_template.xml.erb +15 -0
- data/pantograph/lib/pantograph/action.rb +194 -0
- data/pantograph/lib/pantograph/action_collector.rb +35 -0
- data/pantograph/lib/pantograph/actions/README.md +3 -0
- data/pantograph/lib/pantograph/actions/actions_helper.rb +166 -0
- data/pantograph/lib/pantograph/actions/add_extra_platforms.rb +45 -0
- data/pantograph/lib/pantograph/actions/artifactory.rb +157 -0
- data/pantograph/lib/pantograph/actions/bundle_install.rb +156 -0
- data/pantograph/lib/pantograph/actions/changelog_from_git_commits.rb +197 -0
- data/pantograph/lib/pantograph/actions/clipboard.rb +52 -0
- data/pantograph/lib/pantograph/actions/cloc.rb +89 -0
- data/pantograph/lib/pantograph/actions/create_pull_request.rb +190 -0
- data/pantograph/lib/pantograph/actions/danger.rb +131 -0
- data/pantograph/lib/pantograph/actions/debug.rb +32 -0
- data/pantograph/lib/pantograph/actions/default_platform.rb +47 -0
- data/pantograph/lib/pantograph/actions/download.rb +76 -0
- data/pantograph/lib/pantograph/actions/echo.rb +14 -0
- data/pantograph/lib/pantograph/actions/ensure_bundle_exec.rb +59 -0
- data/pantograph/lib/pantograph/actions/ensure_env_vars.rb +58 -0
- data/pantograph/lib/pantograph/actions/ensure_git_branch.rb +69 -0
- data/pantograph/lib/pantograph/actions/ensure_git_status_clean.rb +81 -0
- data/pantograph/lib/pantograph/actions/erb.rb +88 -0
- data/pantograph/lib/pantograph/actions/get_build_number_repository.rb +120 -0
- data/pantograph/lib/pantograph/actions/get_github_release.rb +163 -0
- data/pantograph/lib/pantograph/actions/git_add.rb +93 -0
- data/pantograph/lib/pantograph/actions/git_branch.rb +58 -0
- data/pantograph/lib/pantograph/actions/git_commit.rb +80 -0
- data/pantograph/lib/pantograph/actions/git_pull.rb +53 -0
- data/pantograph/lib/pantograph/actions/git_submodule_update.rb +52 -0
- data/pantograph/lib/pantograph/actions/git_tag_exists.rb +74 -0
- data/pantograph/lib/pantograph/actions/github_api.rb +262 -0
- data/pantograph/lib/pantograph/actions/gradle.rb +278 -0
- data/pantograph/lib/pantograph/actions/import.rb +49 -0
- data/pantograph/lib/pantograph/actions/import_from_git.rb +71 -0
- data/pantograph/lib/pantograph/actions/is_ci.rb +51 -0
- data/pantograph/lib/pantograph/actions/jira.rb +115 -0
- data/pantograph/lib/pantograph/actions/lane_context.rb +60 -0
- data/pantograph/lib/pantograph/actions/last_git_commit.rb +58 -0
- data/pantograph/lib/pantograph/actions/last_git_tag.rb +51 -0
- data/pantograph/lib/pantograph/actions/make_changelog_from_jenkins.rb +81 -0
- data/pantograph/lib/pantograph/actions/min_pantograph_version.rb +57 -0
- data/pantograph/lib/pantograph/actions/nexus_upload.rb +230 -0
- data/pantograph/lib/pantograph/actions/notification.rb +75 -0
- data/pantograph/lib/pantograph/actions/number_of_commits.rb +75 -0
- data/pantograph/lib/pantograph/actions/opt_out_usage.rb +40 -0
- data/pantograph/lib/pantograph/actions/pantograph_version.rb +15 -0
- data/pantograph/lib/pantograph/actions/println.rb +14 -0
- data/pantograph/lib/pantograph/actions/prompt.rb +119 -0
- data/pantograph/lib/pantograph/actions/push_git_tags.rb +76 -0
- data/pantograph/lib/pantograph/actions/push_to_git_remote.rb +127 -0
- data/pantograph/lib/pantograph/actions/puts.rb +68 -0
- data/pantograph/lib/pantograph/actions/reset_git_repo.rb +121 -0
- data/pantograph/lib/pantograph/actions/rocket.rb +83 -0
- data/pantograph/lib/pantograph/actions/rsync.rb +74 -0
- data/pantograph/lib/pantograph/actions/ruby_version.rb +56 -0
- data/pantograph/lib/pantograph/actions/say.rb +56 -0
- data/pantograph/lib/pantograph/actions/scp.rb +114 -0
- data/pantograph/lib/pantograph/actions/set_github_release.rb +274 -0
- data/pantograph/lib/pantograph/actions/sh.rb +71 -0
- data/pantograph/lib/pantograph/actions/skip_docs.rb +52 -0
- data/pantograph/lib/pantograph/actions/slack.rb +288 -0
- data/pantograph/lib/pantograph/actions/sonar.rb +156 -0
- data/pantograph/lib/pantograph/actions/ssh.rb +162 -0
- data/pantograph/lib/pantograph/actions/twitter.rb +89 -0
- data/pantograph/lib/pantograph/actions/update_pantograph.rb +177 -0
- data/pantograph/lib/pantograph/actions/zip.rb +120 -0
- data/pantograph/lib/pantograph/auto_complete.rb +82 -0
- data/pantograph/lib/pantograph/boolean.rb +5 -0
- data/pantograph/lib/pantograph/cli_tools_distributor.rb +183 -0
- data/pantograph/lib/pantograph/command_line_handler.rb +43 -0
- data/pantograph/lib/pantograph/commands_generator.rb +344 -0
- data/pantograph/lib/pantograph/configuration_helper.rb +26 -0
- data/pantograph/lib/pantograph/core_ext/bundler_monkey_patch.rb +14 -0
- data/pantograph/lib/pantograph/documentation/actions_list.rb +214 -0
- data/pantograph/lib/pantograph/documentation/docs_generator.rb +95 -0
- data/pantograph/lib/pantograph/documentation/markdown_docs_generator.rb +221 -0
- data/pantograph/lib/pantograph/environment_printer.rb +282 -0
- data/pantograph/lib/pantograph/erb_template_helper.rb +30 -0
- data/pantograph/lib/pantograph/features.rb +4 -0
- data/pantograph/lib/pantograph/helper/README.md +29 -0
- data/pantograph/lib/pantograph/helper/dotenv_helper.rb +50 -0
- data/pantograph/lib/pantograph/helper/gem_helper.rb +26 -0
- data/pantograph/lib/pantograph/helper/git_helper.rb +135 -0
- data/pantograph/lib/pantograph/helper/gradle_helper.rb +62 -0
- data/pantograph/lib/pantograph/helper/sh_helper.rb +134 -0
- data/pantograph/lib/pantograph/junit_generator.rb +27 -0
- data/pantograph/lib/pantograph/lane.rb +97 -0
- data/pantograph/lib/pantograph/lane_list.rb +77 -0
- data/pantograph/lib/pantograph/lane_manager.rb +140 -0
- data/pantograph/lib/pantograph/lane_manager_base.rb +92 -0
- data/pantograph/lib/pantograph/markdown_table_formatter.rb +62 -0
- data/pantograph/lib/pantograph/new_action.rb +47 -0
- data/pantograph/lib/pantograph/one_off.rb +45 -0
- data/pantograph/lib/pantograph/other_action.rb +29 -0
- data/pantograph/lib/pantograph/pant_file.rb +377 -0
- data/pantograph/lib/pantograph/pantograph_require.rb +75 -0
- data/pantograph/lib/pantograph/plugins/plugin_fetcher.rb +55 -0
- data/pantograph/lib/pantograph/plugins/plugin_generator.rb +86 -0
- data/pantograph/lib/pantograph/plugins/plugin_generator_ui.rb +19 -0
- data/pantograph/lib/pantograph/plugins/plugin_info.rb +49 -0
- data/pantograph/lib/pantograph/plugins/plugin_info_collector.rb +159 -0
- data/pantograph/lib/pantograph/plugins/plugin_manager.rb +387 -0
- data/pantograph/lib/pantograph/plugins/plugin_search.rb +46 -0
- data/pantograph/lib/pantograph/plugins/plugin_update_manager.rb +70 -0
- data/pantograph/lib/pantograph/plugins/plugins.rb +12 -0
- data/pantograph/lib/pantograph/plugins/template/%gem_name%.gemspec.erb +35 -0
- data/pantograph/lib/pantograph/plugins/template/.circleci/config.yml +43 -0
- data/pantograph/lib/pantograph/plugins/template/.gitignore +12 -0
- data/pantograph/lib/pantograph/plugins/template/.rspec +5 -0
- data/pantograph/lib/pantograph/plugins/template/.rubocop.yml +179 -0
- data/pantograph/lib/pantograph/plugins/template/.travis.yml +4 -0
- data/pantograph/lib/pantograph/plugins/template/Gemfile +6 -0
- data/pantograph/lib/pantograph/plugins/template/LICENSE.erb +21 -0
- data/pantograph/lib/pantograph/plugins/template/README.md.erb +52 -0
- data/pantograph/lib/pantograph/plugins/template/Rakefile +9 -0
- data/pantograph/lib/pantograph/plugins/template/lib/pantograph/plugin/%plugin_name%/actions/%plugin_name%_action.rb.erb +47 -0
- data/pantograph/lib/pantograph/plugins/template/lib/pantograph/plugin/%plugin_name%/helper/%plugin_name%_helper.rb.erb +16 -0
- data/pantograph/lib/pantograph/plugins/template/lib/pantograph/plugin/%plugin_name%/version.rb.erb +5 -0
- data/pantograph/lib/pantograph/plugins/template/lib/pantograph/plugin/%plugin_name%.rb.erb +16 -0
- data/pantograph/lib/pantograph/plugins/template/pantograph/Pantfile.erb +3 -0
- data/pantograph/lib/pantograph/plugins/template/pantograph/Pluginfile.erb +1 -0
- data/pantograph/lib/pantograph/plugins/template/spec/%plugin_name%_action_spec.rb.erb +9 -0
- data/pantograph/lib/pantograph/plugins/template/spec/spec_helper.rb.erb +15 -0
- data/pantograph/lib/pantograph/runner.rb +371 -0
- data/pantograph/lib/pantograph/server/action_command.rb +61 -0
- data/pantograph/lib/pantograph/server/action_command_return.rb +14 -0
- data/pantograph/lib/pantograph/server/command_executor.rb +7 -0
- data/pantograph/lib/pantograph/server/command_parser.rb +36 -0
- data/pantograph/lib/pantograph/server/control_command.rb +23 -0
- data/pantograph/lib/pantograph/server/json_return_value_processor.rb +72 -0
- data/pantograph/lib/pantograph/server/socket_server.rb +232 -0
- data/pantograph/lib/pantograph/server/socket_server_action_command_executor.rb +101 -0
- data/pantograph/lib/pantograph/setup/setup.rb +290 -0
- data/pantograph/lib/pantograph/setup/setup_android.rb +64 -0
- data/pantograph/lib/pantograph/setup/setup_ios.rb +412 -0
- data/pantograph/lib/pantograph/shells.rb +6 -0
- data/pantograph/lib/pantograph/supported_platforms.rb +28 -0
- data/pantograph/lib/pantograph/tools.rb +10 -0
- data/pantograph/lib/pantograph/version.rb +5 -0
- data/pantograph/lib/pantograph.rb +51 -0
- data/pantograph_core/README.md +79 -0
- data/pantograph_core/lib/assets/XMLTemplate.xml.erb +12 -0
- data/pantograph_core/lib/pantograph_core/analytics/action_completion_context.rb +34 -0
- data/pantograph_core/lib/pantograph_core/analytics/action_launch_context.rb +38 -0
- data/pantograph_core/lib/pantograph_core/analytics/analytics_event_builder.rb +23 -0
- data/pantograph_core/lib/pantograph_core/analytics/analytics_ingester_client.rb +54 -0
- data/pantograph_core/lib/pantograph_core/analytics/analytics_session.rb +71 -0
- data/pantograph_core/lib/pantograph_core/cert_checker.rb +116 -0
- data/pantograph_core/lib/pantograph_core/command_executor.rb +99 -0
- data/pantograph_core/lib/pantograph_core/configuration/commander_generator.rb +103 -0
- data/pantograph_core/lib/pantograph_core/configuration/config_item.rb +314 -0
- data/pantograph_core/lib/pantograph_core/configuration/configuration.rb +332 -0
- data/pantograph_core/lib/pantograph_core/configuration/configuration_file.rb +182 -0
- data/pantograph_core/lib/pantograph_core/core_ext/shellwords.rb +63 -0
- data/pantograph_core/lib/pantograph_core/core_ext/string.rb +17 -0
- data/pantograph_core/lib/pantograph_core/env.rb +9 -0
- data/pantograph_core/lib/pantograph_core/feature/feature.rb +51 -0
- data/pantograph_core/lib/pantograph_core/features.rb +4 -0
- data/pantograph_core/lib/pantograph_core/globals.rb +27 -0
- data/pantograph_core/lib/pantograph_core/helper.rb +409 -0
- data/pantograph_core/lib/pantograph_core/keychain_importer.rb +74 -0
- data/pantograph_core/lib/pantograph_core/languages.rb +14 -0
- data/pantograph_core/lib/pantograph_core/module.rb +29 -0
- data/pantograph_core/lib/pantograph_core/pantograph_folder.rb +39 -0
- data/pantograph_core/lib/pantograph_core/pantograph_pty.rb +57 -0
- data/pantograph_core/lib/pantograph_core/pkg_file_analyser.rb +44 -0
- data/pantograph_core/lib/pantograph_core/print_table.rb +131 -0
- data/pantograph_core/lib/pantograph_core/string_filters.rb +51 -0
- data/pantograph_core/lib/pantograph_core/swag.rb +85 -0
- data/pantograph_core/lib/pantograph_core/tag_version.rb +31 -0
- data/pantograph_core/lib/pantograph_core/test_parser.rb +107 -0
- data/pantograph_core/lib/pantograph_core/ui/disable_colors.rb +17 -0
- data/pantograph_core/lib/pantograph_core/ui/errors/pantograph_common_error.rb +19 -0
- data/pantograph_core/lib/pantograph_core/ui/errors/pantograph_crash.rb +11 -0
- data/pantograph_core/lib/pantograph_core/ui/errors/pantograph_error.rb +25 -0
- data/pantograph_core/lib/pantograph_core/ui/errors/pantograph_exception.rb +19 -0
- data/pantograph_core/lib/pantograph_core/ui/errors/pantograph_shell_error.rb +11 -0
- data/pantograph_core/lib/pantograph_core/ui/errors.rb +1 -0
- data/pantograph_core/lib/pantograph_core/ui/github_issue_inspector_reporter.rb +62 -0
- data/pantograph_core/lib/pantograph_core/ui/implementations/shell.rb +159 -0
- data/pantograph_core/lib/pantograph_core/ui/interface.rb +205 -0
- data/pantograph_core/lib/pantograph_core/ui/pantograph_runner.rb +276 -0
- data/pantograph_core/lib/pantograph_core/ui/ui.rb +26 -0
- data/pantograph_core/lib/pantograph_core/update_checker/changelog.rb +37 -0
- data/pantograph_core/lib/pantograph_core/update_checker/update_checker.rb +107 -0
- data/pantograph_core/lib/pantograph_core.rb +45 -0
- metadata +987 -0
@@ -0,0 +1,81 @@
|
|
1
|
+
module Pantograph
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
GIT_REPO_WAS_CLEAN_ON_START = :GIT_REPO_WAS_CLEAN_ON_START
|
5
|
+
end
|
6
|
+
|
7
|
+
# Raises an exception and stop the lane execution if the repo is not in a clean state
|
8
|
+
class EnsureGitStatusCleanAction < Action
|
9
|
+
def self.run(params)
|
10
|
+
repo_status = Actions.sh("git status --porcelain")
|
11
|
+
repo_clean = repo_status.empty?
|
12
|
+
|
13
|
+
if repo_clean
|
14
|
+
UI.success('Git status is clean, all good! 💪')
|
15
|
+
Actions.lane_context[SharedValues::GIT_REPO_WAS_CLEAN_ON_START] = true
|
16
|
+
else
|
17
|
+
error_message = "Git repository is dirty! Please ensure the repo is in a clean state by committing/stashing/discarding all changes first."
|
18
|
+
error_message += "\nUncommitted changes:\n#{repo_status}" if params[:show_uncommitted_changes]
|
19
|
+
if params[:show_diff]
|
20
|
+
repo_diff = Actions.sh("git diff")
|
21
|
+
error_message += "\nGit diff: \n#{repo_diff}"
|
22
|
+
end
|
23
|
+
UI.user_error!(error_message)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.description
|
28
|
+
"Raises an exception if there are uncommitted git changes"
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.details
|
32
|
+
[
|
33
|
+
"A sanity check to make sure you are working in a repo that is clean.",
|
34
|
+
"Especially useful to put at the beginning of your Pantfile in the `before_all` block, if some of your other actions will touch your filesystem, do things to your git repo, or just as a general reminder to save your work.",
|
35
|
+
"Also needed as a prerequisite for some other actions like `reset_git_repo`."
|
36
|
+
].join("\n")
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.output
|
40
|
+
[
|
41
|
+
['GIT_REPO_WAS_CLEAN_ON_START', 'Stores the fact that the git repo was clean at some point']
|
42
|
+
]
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.author
|
46
|
+
["lmirosevic", "antondomashnev"]
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.example_code
|
50
|
+
[
|
51
|
+
'ensure_git_status_clean'
|
52
|
+
]
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.available_options
|
56
|
+
[
|
57
|
+
PantographCore::ConfigItem.new(key: :show_uncommitted_changes,
|
58
|
+
env_name: "FL_ENSURE_GIT_STATUS_CLEAN_SHOW_UNCOMMITTED_CHANGES",
|
59
|
+
description: "The flag whether to show uncommitted changes if the repo is dirty",
|
60
|
+
optional: true,
|
61
|
+
default_value: false,
|
62
|
+
is_string: false),
|
63
|
+
PantographCore::ConfigItem.new(key: :show_diff,
|
64
|
+
env_name: "FL_ENSURE_GIT_STATUS_CLEAN_SHOW_DIFF",
|
65
|
+
description: "The flag whether to show the git diff if the repo is dirty",
|
66
|
+
optional: true,
|
67
|
+
default_value: false,
|
68
|
+
is_string: false)
|
69
|
+
]
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.category
|
73
|
+
:source_control
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.is_supported?(platform)
|
77
|
+
true
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Pantograph
|
2
|
+
module Actions
|
3
|
+
class ErbAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
template = File.read(params[:template])
|
6
|
+
result = ERB.new(template).result(OpenStruct.new(params[:placeholders]).instance_eval { binding })
|
7
|
+
File.open(params[:destination], 'w') { |file| file.write(result) } if params[:destination]
|
8
|
+
UI.message("Successfully parsed template: '#{params[:template]}' and rendered output to: #{params[:destination]}") if params[:destination]
|
9
|
+
result
|
10
|
+
end
|
11
|
+
|
12
|
+
#####################################################
|
13
|
+
# @!group Documentation
|
14
|
+
#####################################################
|
15
|
+
|
16
|
+
def self.description
|
17
|
+
"Allows to Generate output files based on ERB templates"
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.details
|
21
|
+
[
|
22
|
+
"Renders an ERB template with `:placeholders` given as a hash via parameter.",
|
23
|
+
"If no `:destination` is set, it returns the rendered template as string."
|
24
|
+
].join("\n")
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.available_options
|
28
|
+
[
|
29
|
+
|
30
|
+
PantographCore::ConfigItem.new(key: :template,
|
31
|
+
short_option: "-T",
|
32
|
+
env_name: "FL_ERB_SRC",
|
33
|
+
description: "ERB Template File",
|
34
|
+
optional: false,
|
35
|
+
is_string: true),
|
36
|
+
PantographCore::ConfigItem.new(key: :destination,
|
37
|
+
short_option: "-D",
|
38
|
+
env_name: "FL_ERB_DST",
|
39
|
+
description: "Destination file",
|
40
|
+
optional: true,
|
41
|
+
is_string: true),
|
42
|
+
PantographCore::ConfigItem.new(key: :placeholders,
|
43
|
+
short_option: "-p",
|
44
|
+
env_name: "FL_ERB_PLACEHOLDERS",
|
45
|
+
description: "Placeholders given as a hash",
|
46
|
+
default_value: {},
|
47
|
+
is_string: false,
|
48
|
+
type: Hash)
|
49
|
+
|
50
|
+
]
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.authors
|
54
|
+
["hjanuschka"]
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.example_code
|
58
|
+
[
|
59
|
+
'# Example `erb` template:
|
60
|
+
|
61
|
+
# Variable1 <%= var1 %>
|
62
|
+
# Variable2 <%= var2 %>
|
63
|
+
# <% for item in var3 %>
|
64
|
+
# <%= item %>
|
65
|
+
# <% end %>
|
66
|
+
|
67
|
+
erb(
|
68
|
+
template: "1.erb",
|
69
|
+
destination: "/tmp/rendered.out",
|
70
|
+
placeholders: {
|
71
|
+
:var1 => 123,
|
72
|
+
:var2 => "string",
|
73
|
+
:var3 => ["element1", "element2"]
|
74
|
+
}
|
75
|
+
)'
|
76
|
+
]
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.category
|
80
|
+
:misc
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.is_supported?(platform)
|
84
|
+
true
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module Pantograph
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
BUILD_NUMBER_REPOSITORY = :BUILD_NUMBER_REPOSITORY
|
5
|
+
end
|
6
|
+
|
7
|
+
class GetBuildNumberRepositoryAction < Action
|
8
|
+
def self.is_svn?
|
9
|
+
Actions.sh('svn info')
|
10
|
+
return true
|
11
|
+
rescue
|
12
|
+
return false
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.is_git?
|
16
|
+
Actions.sh('git rev-parse HEAD')
|
17
|
+
return true
|
18
|
+
rescue
|
19
|
+
return false
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.is_git_svn?
|
23
|
+
Actions.sh('git svn info')
|
24
|
+
return true
|
25
|
+
rescue
|
26
|
+
return false
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.is_hg?
|
30
|
+
Actions.sh('hg status')
|
31
|
+
return true
|
32
|
+
rescue
|
33
|
+
return false
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.command(use_hg_revision_number)
|
37
|
+
if is_svn?
|
38
|
+
UI.message("Detected repo: svn")
|
39
|
+
return 'svn info | grep Revision | egrep -o "[0-9]+"'
|
40
|
+
elsif is_git_svn?
|
41
|
+
UI.message("Detected repo: git-svn")
|
42
|
+
return 'git svn info | grep Revision | egrep -o "[0-9]+"'
|
43
|
+
elsif is_git?
|
44
|
+
UI.message("Detected repo: git")
|
45
|
+
return 'git rev-parse --short HEAD'
|
46
|
+
elsif is_hg?
|
47
|
+
UI.message("Detected repo: hg")
|
48
|
+
if use_hg_revision_number
|
49
|
+
return 'hg parent --template {rev}'
|
50
|
+
else
|
51
|
+
return 'hg parent --template "{node|short}"'
|
52
|
+
end
|
53
|
+
else
|
54
|
+
UI.user_error!("No repository detected")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.run(params)
|
59
|
+
build_number = Action.sh(command(params[:use_hg_revision_number])).strip
|
60
|
+
Actions.lane_context[SharedValues::BUILD_NUMBER_REPOSITORY] = build_number
|
61
|
+
return build_number
|
62
|
+
end
|
63
|
+
|
64
|
+
#####################################################
|
65
|
+
# @!group Documentation
|
66
|
+
#####################################################
|
67
|
+
|
68
|
+
def self.description
|
69
|
+
"Get the build number from the current repository"
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.details
|
73
|
+
[
|
74
|
+
"This action will get the **build number** according to what the SCM HEAD reports.",
|
75
|
+
"Currently supported SCMs are svn (uses root revision), git-svn (uses svn revision), git (uses short hash) and mercurial (uses short hash or revision number).",
|
76
|
+
"There is an option, `:use_hg_revision_number`, which allows to use mercurial revision number instead of hash."
|
77
|
+
].join("\n")
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.available_options
|
81
|
+
[
|
82
|
+
PantographCore::ConfigItem.new(key: :use_hg_revision_number,
|
83
|
+
env_name: "USE_HG_REVISION_NUMBER",
|
84
|
+
description: "Use hg revision number instead of hash (ignored for non-hg repos)",
|
85
|
+
optional: true,
|
86
|
+
is_string: false,
|
87
|
+
default_value: false)
|
88
|
+
]
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.output
|
92
|
+
[
|
93
|
+
['BUILD_NUMBER_REPOSITORY', 'The build number from the current repository']
|
94
|
+
]
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.return_value
|
98
|
+
"The build number from the current repository"
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.authors
|
102
|
+
["bartoszj", "pbrooks", "armadsen"]
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.is_supported?(platform)
|
106
|
+
[:ios, :mac].include?(platform)
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.example_code
|
110
|
+
[
|
111
|
+
'get_build_number_repository'
|
112
|
+
]
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.category
|
116
|
+
:source_control
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
module Pantograph
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
GET_GITHUB_RELEASE_INFO = :GET_GITHUB_RELEASE_INFO
|
5
|
+
end
|
6
|
+
|
7
|
+
class GetGithubReleaseAction < Action
|
8
|
+
def self.run(params)
|
9
|
+
UI.message("Getting release on GitHub (#{params[:server_url]}/#{params[:url]}: #{params[:version]})")
|
10
|
+
|
11
|
+
GithubApiAction.run(
|
12
|
+
server_url: params[:server_url],
|
13
|
+
api_token: params[:api_token],
|
14
|
+
http_method: 'GET',
|
15
|
+
path: "repos/#{params[:url]}/releases",
|
16
|
+
error_handlers: {
|
17
|
+
404 => proc do |result|
|
18
|
+
UI.error("Repository #{params[:url]} cannot be found, please double check its name and that you provided a valid API token (if it's a private repository).")
|
19
|
+
return nil
|
20
|
+
end,
|
21
|
+
401 => proc do |result|
|
22
|
+
UI.error("You are not authorized to access #{params[:url]}, please make sure you provided a valid API token.")
|
23
|
+
return nil
|
24
|
+
end,
|
25
|
+
'*' => proc do |result|
|
26
|
+
UI.error("GitHub responded with #{result[:status]}:#{result[:body]}")
|
27
|
+
return nil
|
28
|
+
end
|
29
|
+
}
|
30
|
+
) do |result|
|
31
|
+
json = result[:json]
|
32
|
+
json.each do |current|
|
33
|
+
next unless current['tag_name'] == params[:version]
|
34
|
+
|
35
|
+
# Found it
|
36
|
+
Actions.lane_context[SharedValues::GET_GITHUB_RELEASE_INFO] = current
|
37
|
+
UI.message("Version is already live on GitHub.com 🚁")
|
38
|
+
return current
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
UI.important("Couldn't find GitHub release #{params[:version]}")
|
43
|
+
return nil
|
44
|
+
end
|
45
|
+
|
46
|
+
#####################################################
|
47
|
+
# @!group Documentation
|
48
|
+
#####################################################
|
49
|
+
|
50
|
+
def self.description
|
51
|
+
"This will verify if a given release version is available on GitHub"
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.details
|
55
|
+
sample = <<-SAMPLE.markdown_sample
|
56
|
+
```no-highlight
|
57
|
+
{
|
58
|
+
"url"=>"https://api.github.com/repos/KrauseFx/pantograph/releases/1537713",
|
59
|
+
"assets_url"=>"https://api.github.com/repos/KrauseFx/pantograph/releases/1537713/assets",
|
60
|
+
"upload_url"=>"https://uploads.github.com/repos/KrauseFx/pantograph/releases/1537713/assets{?name}",
|
61
|
+
"html_url"=>"https://github.com/pantograph/pantograph/releases/tag/1.8.0",
|
62
|
+
"id"=>1537713,
|
63
|
+
"tag_name"=>"1.8.0",
|
64
|
+
"target_commitish"=>"master",
|
65
|
+
"name"=>"1.8.0 Switch Lanes & Pass Parameters",
|
66
|
+
"draft"=>false,
|
67
|
+
"author"=>
|
68
|
+
{"login"=>"KrauseFx",
|
69
|
+
"id"=>869950,
|
70
|
+
"avatar_url"=>"https://avatars.githubusercontent.com/u/869950?v=3",
|
71
|
+
"gravatar_id"=>"",
|
72
|
+
"url"=>"https://api.github.com/users/KrauseFx",
|
73
|
+
"html_url"=>"https://github.com/pantograph",
|
74
|
+
"followers_url"=>"https://api.github.com/users/KrauseFx/followers",
|
75
|
+
"following_url"=>"https://api.github.com/users/KrauseFx/following{/other_user}",
|
76
|
+
"gists_url"=>"https://api.github.com/users/KrauseFx/gists{/gist_id}",
|
77
|
+
"starred_url"=>"https://api.github.com/users/KrauseFx/starred{/owner}{/repo}",
|
78
|
+
"subscriptions_url"=>"https://api.github.com/users/KrauseFx/subscriptions",
|
79
|
+
"organizations_url"=>"https://api.github.com/users/KrauseFx/orgs",
|
80
|
+
"repos_url"=>"https://api.github.com/users/KrauseFx/repos",
|
81
|
+
"events_url"=>"https://api.github.com/users/KrauseFx/events{/privacy}",
|
82
|
+
"received_events_url"=>"https://api.github.com/users/KrauseFx/received_events",
|
83
|
+
"type"=>"User",
|
84
|
+
"site_admin"=>false},
|
85
|
+
"prerelease"=>false,
|
86
|
+
"created_at"=>"2015-07-14T23:33:01Z",
|
87
|
+
"published_at"=>"2015-07-14T23:44:10Z",
|
88
|
+
"assets"=>[],
|
89
|
+
"tarball_url"=>"https://api.github.com/repos/KrauseFx/pantograph/tarball/1.8.0",
|
90
|
+
"zipball_url"=>"https://api.github.com/repos/KrauseFx/pantograph/zipball/1.8.0",
|
91
|
+
"body"=> ...Markdown...
|
92
|
+
"This is one of the biggest updates of _pantograph_ yet"
|
93
|
+
}
|
94
|
+
```
|
95
|
+
SAMPLE
|
96
|
+
|
97
|
+
[
|
98
|
+
"This will return all information about a release. For example:".markdown_preserve_newlines,
|
99
|
+
sample
|
100
|
+
].join("\n")
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.output
|
104
|
+
[
|
105
|
+
['GET_GITHUB_RELEASE_INFO', 'Contains all the information about this release']
|
106
|
+
]
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.available_options
|
110
|
+
[
|
111
|
+
PantographCore::ConfigItem.new(key: :url,
|
112
|
+
env_name: "FL_GET_GITHUB_RELEASE_URL",
|
113
|
+
description: "The path to your repo, e.g. 'KrauseFx/pantograph'",
|
114
|
+
verify_block: proc do |value|
|
115
|
+
UI.user_error!("Please only pass the path, e.g. 'KrauseFx/pantograph'") if value.include?("github.com")
|
116
|
+
UI.user_error!("Please only pass the path, e.g. 'KrauseFx/pantograph'") if value.split('/').count != 2
|
117
|
+
end),
|
118
|
+
PantographCore::ConfigItem.new(key: :server_url,
|
119
|
+
env_name: "FL_GITHUB_RELEASE_SERVER_URL",
|
120
|
+
description: "The server url. e.g. 'https://your.github.server/api/v3' (Default: 'https://api.github.com')",
|
121
|
+
default_value: "https://api.github.com",
|
122
|
+
optional: true,
|
123
|
+
verify_block: proc do |value|
|
124
|
+
UI.user_error!("Please include the protocol in the server url, e.g. https://your.github.server") unless value.include?("//")
|
125
|
+
end),
|
126
|
+
PantographCore::ConfigItem.new(key: :version,
|
127
|
+
env_name: "FL_GET_GITHUB_RELEASE_VERSION",
|
128
|
+
description: "The version tag of the release to check"),
|
129
|
+
PantographCore::ConfigItem.new(key: :api_token,
|
130
|
+
env_name: "FL_GITHUB_RELEASE_API_TOKEN",
|
131
|
+
sensitive: true,
|
132
|
+
description: "GitHub Personal Token (required for private repositories)",
|
133
|
+
optional: true)
|
134
|
+
]
|
135
|
+
end
|
136
|
+
|
137
|
+
def self.authors
|
138
|
+
["KrauseFx", "czechboy0", "jaleksynas", "tommeier"]
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.is_supported?(platform)
|
142
|
+
true
|
143
|
+
end
|
144
|
+
|
145
|
+
def self.example_code
|
146
|
+
[
|
147
|
+
'release = get_github_release(url: "pantograph/pantograph", version: "1.0.0")
|
148
|
+
puts release["name"]'
|
149
|
+
]
|
150
|
+
end
|
151
|
+
|
152
|
+
def self.sample_return_value
|
153
|
+
{
|
154
|
+
"name" => "name"
|
155
|
+
}
|
156
|
+
end
|
157
|
+
|
158
|
+
def self.category
|
159
|
+
:source_control
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Pantograph
|
2
|
+
module Actions
|
3
|
+
class GitAddAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
should_escape = params[:shell_escape]
|
6
|
+
|
7
|
+
if params[:pathspec]
|
8
|
+
paths = params[:pathspec]
|
9
|
+
success_message = "Successfully added from \"#{paths}\" 💾."
|
10
|
+
elsif params[:path]
|
11
|
+
if params[:path].kind_of?(String)
|
12
|
+
paths = shell_escape(params[:path], should_escape)
|
13
|
+
elsif params[:path].kind_of?(Array)
|
14
|
+
paths = params[:path].map do |p|
|
15
|
+
shell_escape(p, should_escape)
|
16
|
+
end.join(' ')
|
17
|
+
end
|
18
|
+
success_message = "Successfully added \"#{paths}\" 💾."
|
19
|
+
else
|
20
|
+
paths = "."
|
21
|
+
success_message = "Successfully added all files 💾."
|
22
|
+
end
|
23
|
+
|
24
|
+
result = Actions.sh("git add #{paths}", log: PantographCore::Globals.verbose?).chomp
|
25
|
+
UI.success(success_message)
|
26
|
+
return result
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.shell_escape(path, should_escape)
|
30
|
+
path = path.shellescape if should_escape
|
31
|
+
path
|
32
|
+
end
|
33
|
+
|
34
|
+
#####################################################
|
35
|
+
# @!group Documentation
|
36
|
+
#####################################################
|
37
|
+
|
38
|
+
def self.description
|
39
|
+
"Directly add the given file or all files"
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.available_options
|
43
|
+
[
|
44
|
+
PantographCore::ConfigItem.new(key: :path,
|
45
|
+
description: "The file(s) and path(s) you want to add",
|
46
|
+
is_string: false,
|
47
|
+
conflicting_options: [:pathspec],
|
48
|
+
optional: true),
|
49
|
+
PantographCore::ConfigItem.new(key: :shell_escape,
|
50
|
+
description: "Shell escapes paths (set to false if using wildcards or manually escaping spaces in :path)",
|
51
|
+
is_string: false,
|
52
|
+
default_value: true,
|
53
|
+
optional: true),
|
54
|
+
# Deprecated
|
55
|
+
PantographCore::ConfigItem.new(key: :pathspec,
|
56
|
+
description: "The pathspec you want to add files from",
|
57
|
+
is_string: true,
|
58
|
+
conflicting_options: [:path],
|
59
|
+
optional: true,
|
60
|
+
deprecated: "Use `--path` instead")
|
61
|
+
]
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.return_value
|
65
|
+
nil
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.authors
|
69
|
+
["4brunu", "antondomashnev"]
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.is_supported?(platform)
|
73
|
+
true
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.example_code
|
77
|
+
[
|
78
|
+
'git_add',
|
79
|
+
'git_add(path: "./version.txt")',
|
80
|
+
'git_add(path: ["./version.txt", "./changelog.txt"])',
|
81
|
+
'git_add(path: "./Frameworks/*", shell_escape: false)',
|
82
|
+
'git_add(path: ["*.h", "*.m"], shell_escape: false)',
|
83
|
+
'git_add(path: "./Frameworks/*", shell_escape: false)',
|
84
|
+
'git_add(path: "*.txt", shell_escape: false)'
|
85
|
+
]
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.category
|
89
|
+
:source_control
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Pantograph
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
GIT_BRANCH_ENV_VARS = %w(GIT_BRANCH BRANCH_NAME TRAVIS_BRANCH BITRISE_GIT_BRANCH CI_BUILD_REF_NAME CI_COMMIT_REF_NAME WERCKER_GIT_BRANCH BUILDKITE_BRANCH).freeze
|
5
|
+
end
|
6
|
+
|
7
|
+
class GitBranchAction < Action
|
8
|
+
def self.run(params)
|
9
|
+
env_name = SharedValues::GIT_BRANCH_ENV_VARS.find { |env_var| PantographCore::Env.truthy?(env_var) }
|
10
|
+
ENV.fetch(env_name.to_s) { `git symbolic-ref HEAD --short 2>/dev/null`.strip }
|
11
|
+
end
|
12
|
+
|
13
|
+
#####################################################
|
14
|
+
# @!group Documentation
|
15
|
+
#####################################################
|
16
|
+
|
17
|
+
def self.description
|
18
|
+
"Returns the name of the current git branch, possibly as managed by CI ENV vars"
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.details
|
22
|
+
"If no branch could be found, this action will return an empty string"
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.available_options
|
26
|
+
[]
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.output
|
30
|
+
[
|
31
|
+
['GIT_BRANCH_ENV_VARS', 'The git branch environment variables']
|
32
|
+
]
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.authors
|
36
|
+
["KrauseFx"]
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.is_supported?(platform)
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.example_code
|
44
|
+
[
|
45
|
+
'git_branch'
|
46
|
+
]
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.return_type
|
50
|
+
:string
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.category
|
54
|
+
:source_control
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Pantograph
|
2
|
+
module Actions
|
3
|
+
class GitCommitAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
if params[:path].kind_of?(String)
|
6
|
+
paths = params[:path].shellescape
|
7
|
+
else
|
8
|
+
paths = params[:path].map(&:shellescape).join(' ')
|
9
|
+
end
|
10
|
+
|
11
|
+
skip_git_hooks = params[:skip_git_hooks] ? '--no-verify' : ''
|
12
|
+
|
13
|
+
if params[:allow_nothing_to_commit]
|
14
|
+
repo_clean = Actions.sh("git status --porcelain").empty?
|
15
|
+
UI.success("Nothing to commit, working tree clean ✅.") if repo_clean
|
16
|
+
return if repo_clean
|
17
|
+
end
|
18
|
+
|
19
|
+
command = "git commit -m #{params[:message].shellescape} #{paths} #{skip_git_hooks}".strip
|
20
|
+
result = Actions.sh(command)
|
21
|
+
UI.success("Successfully committed \"#{params[:path]}\" 💾.")
|
22
|
+
return result
|
23
|
+
end
|
24
|
+
|
25
|
+
#####################################################
|
26
|
+
# @!group Documentation
|
27
|
+
#####################################################
|
28
|
+
|
29
|
+
def self.description
|
30
|
+
"Directly commit the given file with the given message"
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.available_options
|
34
|
+
[
|
35
|
+
PantographCore::ConfigItem.new(key: :path,
|
36
|
+
description: "The file you want to commit",
|
37
|
+
is_string: false),
|
38
|
+
PantographCore::ConfigItem.new(key: :message,
|
39
|
+
description: "The commit message that should be used"),
|
40
|
+
PantographCore::ConfigItem.new(key: :skip_git_hooks,
|
41
|
+
description: "Set to true to pass --no-verify to git",
|
42
|
+
type: Boolean,
|
43
|
+
optional: true),
|
44
|
+
PantographCore::ConfigItem.new(key: :allow_nothing_to_commit,
|
45
|
+
description: "Set to true to allow commit without any git changes",
|
46
|
+
type: Boolean,
|
47
|
+
optional: true)
|
48
|
+
]
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.output
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.return_value
|
55
|
+
nil
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.authors
|
59
|
+
["KrauseFx"]
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.is_supported?(platform)
|
63
|
+
true
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.example_code
|
67
|
+
[
|
68
|
+
'git_commit(path: "./version.txt", message: "Version Bump")',
|
69
|
+
'git_commit(path: ["./version.txt", "./changelog.txt"], message: "Version Bump")',
|
70
|
+
'git_commit(path: ["./*.txt", "./*.md"], message: "Update documentation")',
|
71
|
+
'git_commit(path: ["./*.txt", "./*.md"], message: "Update documentation", skip_git_hooks: true)'
|
72
|
+
]
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.category
|
76
|
+
:source_control
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|