Module: Fastlane::Actions

Defined in:
fastlane/lib/fastlane/actions/s3.rb,
fastlane/lib/fastlane/actions/sh.rb,
fastlane/lib/fastlane/actions/adb.rb,
fastlane/lib/fastlane/actions/erb.rb,
fastlane/lib/fastlane/actions/gym.rb,
fastlane/lib/fastlane/actions/ipa.rb,
fastlane/lib/fastlane/actions/pem.rb,
fastlane/lib/fastlane/actions/say.rb,
fastlane/lib/fastlane/actions/scp.rb,
fastlane/lib/fastlane/actions/spm.rb,
fastlane/lib/fastlane/actions/ssh.rb,
fastlane/lib/fastlane/actions/zip.rb,
fastlane/lib/fastlane/actions/cert.rb,
fastlane/lib/fastlane/actions/cloc.rb,
fastlane/lib/fastlane/actions/echo.rb,
fastlane/lib/fastlane/actions/jira.rb,
fastlane/lib/fastlane/actions/lcov.rb,
fastlane/lib/fastlane/actions/puts.rb,
fastlane/lib/fastlane/actions/scan.rb,
fastlane/lib/fastlane/actions/sigh.rb,
fastlane/lib/fastlane/actions/xcov.rb,
fastlane/lib/fastlane/actions/badge.rb,
fastlane/lib/fastlane/actions/debug.rb,
fastlane/lib/fastlane/actions/flock.rb,
fastlane/lib/fastlane/actions/gcovr.rb,
fastlane/lib/fastlane/actions/ifttt.rb,
fastlane/lib/fastlane/actions/is_ci.rb,
fastlane/lib/fastlane/actions/jazzy.rb,
fastlane/lib/fastlane/actions/match.rb,
fastlane/lib/fastlane/actions/pilot.rb,
fastlane/lib/fastlane/actions/rsync.rb,
fastlane/lib/fastlane/actions/slack.rb,
fastlane/lib/fastlane/actions/sonar.rb,
fastlane/lib/fastlane/actions/appium.rb,
fastlane/lib/fastlane/actions/danger.rb,
fastlane/lib/fastlane/actions/gradle.rb,
fastlane/lib/fastlane/actions/hockey.rb,
fastlane/lib/fastlane/actions/import.rb,
fastlane/lib/fastlane/actions/notify.rb,
fastlane/lib/fastlane/actions/oclint.rb,
fastlane/lib/fastlane/actions/prompt.rb,
fastlane/lib/fastlane/actions/resign.rb,
fastlane/lib/fastlane/actions/rocket.rb,
fastlane/lib/fastlane/actions/supply.rb,
fastlane/lib/fastlane/actions/xcodes.rb,
fastlane/lib/fastlane/actions/xctool.rb,
fastlane/lib/fastlane/actions/deliver.rb,
fastlane/lib/fastlane/actions/frameit.rb,
fastlane/lib/fastlane/actions/git_add.rb,
fastlane/lib/fastlane/actions/hg_push.rb,
fastlane/lib/fastlane/actions/hipchat.rb,
fastlane/lib/fastlane/actions/mailgun.rb,
fastlane/lib/fastlane/actions/println.rb,
fastlane/lib/fastlane/actions/produce.rb,
fastlane/lib/fastlane/actions/slather.rb,
fastlane/lib/fastlane/actions/team_id.rb,
fastlane/lib/fastlane/actions/trainer.rb,
fastlane/lib/fastlane/actions/tryouts.rb,
fastlane/lib/fastlane/actions/twitter.rb,
fastlane/lib/fastlane/actions/appetize.rb,
fastlane/lib/fastlane/actions/appledoc.rb,
fastlane/lib/fastlane/actions/appstore.rb,
fastlane/lib/fastlane/actions/carthage.rb,
fastlane/lib/fastlane/actions/chatwork.rb,
fastlane/lib/fastlane/actions/download.rb,
fastlane/lib/fastlane/actions/dsym_zip.rb,
fastlane/lib/fastlane/actions/git_pull.rb,
fastlane/lib/fastlane/actions/installr.rb,
fastlane/lib/fastlane/actions/notarize.rb,
fastlane/lib/fastlane/actions/pod_push.rb,
fastlane/lib/fastlane/actions/precheck.rb,
fastlane/lib/fastlane/actions/setup_ci.rb,
fastlane/lib/fastlane/actions/snapshot.rb,
fastlane/lib/fastlane/actions/typetalk.rb,
fastlane/lib/fastlane/helper/sh_helper.rb,
fastlane/lib/fastlane/actions/appaloosa.rb,
fastlane/lib/fastlane/actions/build_app.rb,
fastlane/lib/fastlane/actions/clipboard.rb,
fastlane/lib/fastlane/actions/cocoapods.rb,
fastlane/lib/fastlane/actions/onesignal.rb,
fastlane/lib/fastlane/actions/run_tests.rb,
fastlane/lib/fastlane/actions/skip_docs.rb,
fastlane/lib/fastlane/actions/swiftlint.rb,
fastlane/lib/fastlane/actions/team_name.rb,
fastlane/lib/fastlane/actions/testfairy.rb,
fastlane/lib/fastlane/actions/xcversion.rb,
fastlane/lib/fastlane/helper/gem_helper.rb,
fastlane/lib/fastlane/helper/git_helper.rb,
fastlane/lib/fastlane/actions/apteligent.rb,
fastlane/lib/fastlane/actions/deploygate.rb,
fastlane/lib/fastlane/actions/git_branch.rb,
fastlane/lib/fastlane/actions/git_commit.rb,
fastlane/lib/fastlane/actions/github_api.rb,
fastlane/lib/fastlane/actions/hg_add_tag.rb,
fastlane/lib/fastlane/actions/match_nuke.rb,
fastlane/lib/fastlane/actions/podio_item.rb,
fastlane/lib/fastlane/actions/screengrab.rb,
fastlane/lib/fastlane/actions/sourcedocs.rb,
fastlane/lib/fastlane/actions/splunkmint.rb,
fastlane/lib/fastlane/actions/testflight.rb,
fastlane/lib/fastlane/actions/xcodebuild.rb,
fastlane/lib/fastlane/actions/adb_devices.rb,
fastlane/lib/fastlane/actions/add_git_tag.rb,
fastlane/lib/fastlane/actions/artifactory.rb,
fastlane/lib/fastlane/actions/backup_file.rb,
fastlane/lib/fastlane/actions/set_pod_key.rb,
fastlane/lib/fastlane/actions/lane_context.rb,
fastlane/lib/fastlane/actions/last_git_tag.rb,
fastlane/lib/fastlane/actions/nexus_upload.rb,
fastlane/lib/fastlane/actions/notification.rb,
fastlane/lib/fastlane/actions/pod_lib_lint.rb,
fastlane/lib/fastlane/actions/read_podspec.rb,
fastlane/lib/fastlane/actions/restore_file.rb,
fastlane/lib/fastlane/actions/ruby_version.rb,
fastlane/lib/fastlane/actions/setup_travis.rb,
fastlane/lib/fastlane/actions/update_plist.rb,
fastlane/lib/fastlane/actions/verify_build.rb,
fastlane/lib/fastlane/actions/verify_xcode.rb,
fastlane/lib/fastlane/actions/xcode_select.rb,
fastlane/lib/fastlane/actions/build_ios_app.rb,
fastlane/lib/fastlane/actions/build_mac_app.rb,
fastlane/lib/fastlane/actions/opt_out_usage.rb,
fastlane/lib/fastlane/actions/push_git_tags.rb,
fastlane/lib/fastlane/actions/set_changelog.rb,
fastlane/lib/fastlane/actions/setup_jenkins.rb,
fastlane/lib/fastlane/actions/xcode_install.rb,
fastlane/lib/fastlane/actions/actions_helper.rb,
fastlane/lib/fastlane/actions/bundle_install.rb,
fastlane/lib/fastlane/actions/copy_artifacts.rb,
fastlane/lib/fastlane/actions/download_dsyms.rb,
fastlane/lib/fastlane/actions/git_tag_exists.rb,
fastlane/lib/fastlane/actions/reset_git_repo.rb,
fastlane/lib/fastlane/actions/spaceship_logs.rb,
fastlane/lib/fastlane/actions/create_keychain.rb,
fastlane/lib/fastlane/actions/delete_keychain.rb,
fastlane/lib/fastlane/actions/ensure_env_vars.rb,
fastlane/lib/fastlane/actions/import_from_git.rb,
fastlane/lib/fastlane/actions/last_git_commit.rb,
fastlane/lib/fastlane/actions/modify_services.rb,
fastlane/lib/fastlane/actions/register_device.rb,
fastlane/lib/fastlane/actions/setup_circle_ci.rb,
fastlane/lib/fastlane/actions/spaceship_stats.rb,
fastlane/lib/fastlane/actions/unlock_keychain.rb,
fastlane/lib/fastlane/actions/update_fastlane.rb,
fastlane/lib/fastlane/actions/verify_pod_keys.rb,
fastlane/lib/fastlane/actions/backup_xcarchive.rb,
fastlane/lib/fastlane/actions/default_platform.rb,
fastlane/lib/fastlane/actions/fastlane_version.rb,
fastlane/lib/fastlane/actions/get_build_number.rb,
fastlane/lib/fastlane/actions/get_certificates.rb,
fastlane/lib/fastlane/actions/recreate_schemes.rb,
fastlane/lib/fastlane/actions/register_devices.rb,
fastlane/lib/fastlane/actions/build_android_app.rb,
fastlane/lib/fastlane/actions/create_app_online.rb,
fastlane/lib/fastlane/actions/ensure_git_branch.rb,
fastlane/lib/fastlane/actions/frame_screenshots.rb,
fastlane/lib/fastlane/actions/git_remote_branch.rb,
fastlane/lib/fastlane/actions/install_on_device.rb,
fastlane/lib/fastlane/actions/number_of_commits.rb,
fastlane/lib/fastlane/actions/sync_code_signing.rb,
fastlane/lib/fastlane/actions/update_info_plist.rb,
fastlane/lib/fastlane/actions/clear_derived_data.rb,
fastlane/lib/fastlane/actions/commit_github_file.rb,
fastlane/lib/fastlane/actions/create_xcframework.rb,
fastlane/lib/fastlane/actions/dotgpg_environment.rb,
fastlane/lib/fastlane/actions/ensure_bundle_exec.rb,
fastlane/lib/fastlane/actions/get_github_release.rb,
fastlane/lib/fastlane/actions/get_version_number.rb,
fastlane/lib/fastlane/actions/import_certificate.rb,
fastlane/lib/fastlane/actions/push_to_git_remote.rb,
fastlane/lib/fastlane/actions/set_github_release.rb,
fastlane/lib/fastlane/actions/update_url_schemes.rb,
fastlane/lib/fastlane/actions/add_extra_platforms.rb,
fastlane/lib/fastlane/actions/capture_screenshots.rb,
fastlane/lib/fastlane/actions/commit_version_bump.rb,
fastlane/lib/fastlane/actions/create_pull_request.rb,
fastlane/lib/fastlane/actions/update_project_team.rb,
fastlane/lib/fastlane/actions/upload_to_app_store.rb,
fastlane/lib/fastlane/actions/version_get_podspec.rb,
fastlane/lib/fastlane/actions/ensure_no_debug_code.rb,
fastlane/lib/fastlane/actions/ensure_xcode_version.rb,
fastlane/lib/fastlane/actions/environment_variable.rb,
fastlane/lib/fastlane/actions/get_info_plist_value.rb,
fastlane/lib/fastlane/actions/get_push_certificate.rb,
fastlane/lib/fastlane/actions/git_submodule_update.rb,
fastlane/lib/fastlane/actions/install_xcode_plugin.rb,
fastlane/lib/fastlane/actions/min_fastlane_version.rb,
fastlane/lib/fastlane/actions/set_info_plist_value.rb,
fastlane/lib/fastlane/actions/upload_to_play_store.rb,
fastlane/lib/fastlane/actions/upload_to_testflight.rb,
fastlane/lib/fastlane/actions/version_bump_podspec.rb,
fastlane/lib/fastlane/actions/clean_build_artifacts.rb,
fastlane/lib/fastlane/actions/clean_cocoapods_cache.rb,
fastlane/lib/fastlane/actions/update_app_identifier.rb,
fastlane/lib/fastlane/actions/app_store_build_number.rb,
fastlane/lib/fastlane/actions/automatic_code_signing.rb,
fastlane/lib/fastlane/actions/hg_commit_version_bump.rb,
fastlane/lib/fastlane/actions/hg_ensure_clean_status.rb,
fastlane/lib/fastlane/actions/increment_build_number.rb,
fastlane/lib/fastlane/actions/capture_ios_screenshots.rb,
fastlane/lib/fastlane/actions/ensure_git_status_clean.rb,
fastlane/lib/fastlane/actions/opt_out_crash_reporting.rb,
fastlane/lib/fastlane/actions/xcode_server_get_assets.rb,
fastlane/lib/fastlane/actions/check_app_store_metadata.rb,
fastlane/lib/fastlane/actions/download_from_play_store.rb,
fastlane/lib/fastlane/actions/get_ipa_info_plist_value.rb,
fastlane/lib/fastlane/actions/get_provisioning_profile.rb,
fastlane/lib/fastlane/actions/increment_version_number.rb,
fastlane/lib/fastlane/actions/reset_simulator_contents.rb,
fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb,
fastlane/lib/fastlane/actions/app_store_connect_api_key.rb,
fastlane/lib/fastlane/actions/changelog_from_git_commits.rb,
fastlane/lib/fastlane/actions/capture_android_screenshots.rb,
fastlane/lib/fastlane/actions/get_build_number_repository.rb,
fastlane/lib/fastlane/actions/make_changelog_from_jenkins.rb,
fastlane/lib/fastlane/actions/set_build_number_repository.rb,
fastlane/lib/fastlane/actions/update_project_code_signing.rb,
fastlane/lib/fastlane/actions/update_project_provisioning.rb,
fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb,
fastlane/lib/fastlane/actions/install_provisioning_profile.rb,
fastlane/lib/fastlane/actions/update_app_group_identifiers.rb,
fastlane/lib/fastlane/actions/update_code_signing_settings.rb,
fastlane/lib/fastlane/actions/validate_play_store_json_key.rb,
fastlane/lib/fastlane/actions/update_keychain_access_groups.rb,
fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb,
fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb,
fastlane/lib/fastlane/actions/latest_testflight_build_number.rb,
fastlane/lib/fastlane/actions/google_play_track_release_names.rb,
fastlane/lib/fastlane/actions/google_play_track_version_codes.rb,
fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb,
fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb,
fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb,
fastlane/lib/fastlane/actions/download_universal_apk_from_google_play.rb,
fastlane/lib/fastlane/actions/upload_app_privacy_details_to_app_store.rb,
fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb,
fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb,
fastlane/lib/fastlane/actions/download_app_privacy_details_from_app_store.rb

Defined Under Namespace

Modules: SharedValues Classes: AdbAction, AdbDevicesAction, AddExtraPlatformsAction, AddGitTagAction, AppStoreBuildNumberAction, AppStoreConnectApiKeyAction, AppaloosaAction, AppetizeAction, AppetizeViewingUrlGeneratorAction, AppiumAction, AppledocAction, AppstoreAction, ApteligentAction, ArtifactoryAction, AutomaticCodeSigningAction, BackupFileAction, BackupXcarchiveAction, BadgeAction, BuildAndUploadToAppetizeAction, BuildAndroidAppAction, BuildAppAction, BuildIosAppAction, BuildMacAppAction, BundleInstallAction, CaptureAndroidScreenshotsAction, CaptureIosScreenshotsAction, CaptureScreenshotsAction, CarthageAction, CertAction, ChangelogFromGitCommitsAction, ChatworkAction, CheckAppStoreMetadataAction, CleanBuildArtifactsAction, CleanCocoapodsCacheAction, ClearDerivedDataAction, ClipboardAction, ClocAction, CocoapodsAction, CommitGithubFileAction, CommitVersionBumpAction, CopyArtifactsAction, CreateAppOnManagedPlayStoreAction, CreateAppOnlineAction, CreateKeychainAction, CreatePullRequestAction, CreateXcframeworkAction, DangerAction, DebugAction, DefaultPlatformAction, DeleteKeychainAction, DeliverAction, DeploygateAction, DotgpgEnvironmentAction, DownloadAction, DownloadAppPrivacyDetailsFromAppStoreAction, DownloadDsymsAction, DownloadFromPlayStoreAction, DownloadUniversalApkFromGooglePlayAction, DsymZipAction, EchoAction, EnsureBundleExecAction, EnsureEnvVarsAction, EnsureGitBranchAction, EnsureGitStatusCleanAction, EnsureNoDebugCodeAction, EnsureXcodeVersionAction, EnvironmentVariableAction, ErbAction, FastlaneVersionAction, FlockAction, FrameScreenshotsAction, FrameitAction, GcovrAction, GetBuildNumberAction, GetBuildNumberRepositoryAction, GetCertificatesAction, GetGithubReleaseAction, GetInfoPlistValueAction, GetIpaInfoPlistValueAction, GetManagedPlayStorePublishingRightsAction, GetProvisioningProfileAction, GetPushCertificateAction, GetVersionNumberAction, GitAddAction, GitBranchAction, GitCommitAction, GitPullAction, GitRemoteBranchAction, GitSubmoduleUpdateAction, GitTagExistsAction, GithubApiAction, GooglePlayTrackReleaseNamesAction, GooglePlayTrackVersionCodesAction, GradleAction, GymAction, HgAddTagAction, HgCommitVersionBumpAction, HgEnsureCleanStatusAction, HgPushAction, HipchatAction, HockeyAction, IftttAction, ImportAction, ImportCertificateAction, ImportFromGitAction, IncrementBuildNumberAction, IncrementVersionNumberAction, InstallOnDeviceAction, InstallProvisioningProfileAction, InstallXcodePluginAction, InstallrAction, IpaAction, IsCiAction, JazzyAction, JiraAction, LaneContextAction, LastGitCommitAction, LastGitTagAction, LatestTestflightBuildNumberAction, LcovAction, MailgunAction, MakeChangelogFromJenkinsAction, MatchAction, MatchNukeAction, MinFastlaneVersionAction, ModifyServicesAction, NexusUploadAction, NotarizeAction, NotificationAction, NotifyAction, NumberOfCommitsAction, OclintAction, OnesignalAction, OptOutCrashReportingAction, OptOutUsageAction, PemAction, PilotAction, PodLibLintAction, PodPushAction, PodioItemAction, PrecheckAction, PrintlnAction, ProduceAction, PromptAction, PushGitTagsAction, PushToGitRemoteAction, PutsAction, ReadPodspecAction, RecreateSchemesAction, RegisterDeviceAction, RegisterDevicesAction, ResetGitRepoAction, ResetSimulatorContentsAction, ResignAction, RestoreFileAction, RocketAction, RsyncAction, RubyVersionAction, RunTestsAction, S3Action, SayAction, ScanAction, ScpAction, ScreengrabAction, SetBuildNumberRepositoryAction, SetChangelogAction, SetGithubReleaseAction, SetInfoPlistValueAction, SetPodKeyAction, SetupCiAction, SetupCircleCiAction, SetupJenkinsAction, SetupTravisAction, ShAction, SighAction, SkipDocsAction, SlackAction, SlatherAction, SnapshotAction, SonarAction, SourcedocsAction, SpaceshipLogsAction, SpaceshipStatsAction, SplunkmintAction, SpmAction, SshAction, SupplyAction, SwiftlintAction, SyncCodeSigningAction, TeamIdAction, TeamNameAction, TestfairyAction, TestflightAction, TrainerAction, TryoutsAction, TwitterAction, TypetalkAction, UnlockKeychainAction, UpdateAppGroupIdentifiersAction, UpdateAppIdentifierAction, UpdateCodeSigningSettingsAction, UpdateFastlaneAction, UpdateIcloudContainerIdentifiersAction, UpdateInfoPlistAction, UpdateKeychainAccessGroupsAction, UpdatePlistAction, UpdateProjectCodeSigningAction, UpdateProjectProvisioningAction, UpdateProjectTeamAction, UpdateUrbanAirshipConfigurationAction, UpdateUrlSchemesAction, UploadAppPrivacyDetailsToAppStoreAction, UploadSymbolsToCrashlyticsAction, UploadSymbolsToSentryAction, UploadToAppStoreAction, UploadToPlayStoreAction, UploadToPlayStoreInternalAppSharingAction, UploadToTestflightAction, ValidatePlayStoreJsonKeyAction, VerifyBuildAction, VerifyPodKeysAction, VerifyXcodeAction, VersionBumpPodspecAction, VersionGetPodspecAction, XcarchiveAction, XcbuildAction, XccleanAction, XcexportAction, XcodeInstallAction, XcodeSelectAction, XcodeServerGetAssetsAction, XcodebuildAction, XcodesAction, XcovAction, XctestAction, XctoolAction, XcversionAction, ZipAction

Constant Summary collapse

ARGS_MAP =
{
  workspace: '-w',
  project: '-p',
  configuration: '-c',
  scheme: '-s',
  clean: '--clean',
  archive: '--archive',
  destination: '-d',
  embed: '-m',
  identity: '-i',
  sdk: '--sdk',
  ipa: '--ipa',
  xcconfig: '--xcconfig',
  xcargs: '--xcargs'
}
GIT_MERGE_COMMIT_FILTERING_OPTIONS =
[:include_merges, :exclude_merges, :only_include_merges].freeze

Class Method Summary collapse

Class Method Details

.action_class_ref(action_name) ⇒ Object

Returns the class ref to the action based on the action name Returns nil if the action is not available



100
101
102
103
104
105
106
107
108
109
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 100

def self.action_class_ref(action_name)
  class_name = action_name.to_s.fastlane_class + 'Action'
  class_ref = nil
  begin
    class_ref = Fastlane::Actions.const_get(class_name)
  rescue NameError
    return nil
  end
  return class_ref
end

.add_modified_files(files) ⇒ Object

Add an array of paths relative to the repo root or absolute paths that have been modified by an action.

:files: An array of paths relative to the repo root or absolute paths



14
15
16
17
18
# File 'fastlane/lib/fastlane/actions/commit_version_bump.rb', line 14

def add_modified_files(files)
  modified_files = lane_context[SharedValues::MODIFIED_FILES] || Set.new
  modified_files += files
  lane_context[SharedValues::MODIFIED_FILES] = modified_files
end

.alias_actionsObject



32
33
34
35
36
37
38
39
40
41
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 32

def self.alias_actions
  unless @alias_actions
    @alias_actions = {}
    ActionsList.all_actions do |action, name|
      next unless action.respond_to?(:aliases)
      @alias_actions[name] = action.aliases
    end
  end
  @alias_actions
end

.clear_lane_contextObject

Used in tests to get a clear lane before every test



53
54
55
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 53

def self.clear_lane_context
  @lane_context = nil
end

.execute_action(step_name) ⇒ Object

Pass a block which should be tracked. One block = one testcase

Parameters:

  • step_name (String)

    the name of the currently built code (e.g. snapshot, sigh, …) This might be nil, in which case the step is not printed out to the terminal



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 60

def self.execute_action(step_name)
  start = Time.now # before the raise block, since `start` is required in the ensure block
  UI.crash!("No block given") unless block_given?

  error = nil
  exc = nil

  begin
    UI.header("Step: " + step_name) if step_name
    yield
  rescue => ex
    exc = ex
    error = caller.join("\n") + "\n\n" + ex.to_s
  end
ensure
  # This is also called, when the block has a return statement
  if step_name
    duration = Time.now - start

    executed_actions << {
      name: step_name,
      error: error,
      time: duration
    }
  end

  raise exc if exc
end

.executed_actionsObject



43
44
45
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 43

def self.executed_actions
  @executed_actions ||= []
end

.formerly_bundled_actionsObject



167
168
169
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 167

def self.formerly_bundled_actions
  ["xcake"]
end

.get_all_official_actionsObject

returns a list of official integrations rubocop:disable Naming/AccessorMethodName



91
92
93
94
95
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 91

def self.get_all_official_actions
  Dir[File.expand_path('*.rb', File.dirname(__FILE__))].collect do |file|
    File.basename(file).gsub('.rb', '').to_sym
  end
end

.git_authorObject

Deprecated.

Use git_author_email instead

Get the author email of the last git commit DEPRECATED: Use git_author_email instead.



88
89
90
91
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 88

def self.git_author
  UI.deprecated('`git_author` is deprecated. Please use `git_author_email` instead.')
  git_author_email
end

.git_author_emailObject

Get the author email of the last git commit



94
95
96
97
98
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 94

def self.git_author_email
  s = last_git_commit_formatted_with('%ae')
  return s if s.to_s.length > 0
  return nil
end

.git_branchObject

Returns the current git branch, or “HEAD” if it’s not checked out to any branch Can be replaced using the environment variable ‘GIT_BRANCH` unless `FL_GIT_BRANCH_DONT_USE_ENV_VARS` is `true`



125
126
127
128
129
130
131
132
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 125

def self.git_branch
  return self.git_branch_name_using_HEAD if FastlaneCore::Env.truthy?('FL_GIT_BRANCH_DONT_USE_ENV_VARS')

  env_name = SharedValues::GIT_BRANCH_ENV_VARS.find { |env_var| FastlaneCore::Env.truthy?(env_var) }
  ENV.fetch(env_name.to_s) do
    self.git_branch_name_using_HEAD
  end
end

.git_branch_name_using_HEADObject

Returns the checked out git branch name or “HEAD” if you’re in detached HEAD state



135
136
137
138
139
140
141
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 135

def self.git_branch_name_using_HEAD
  # Rescues if not a git repo or no commits in a git repo
  Actions.sh("git rev-parse --abbrev-ref HEAD", log: false).chomp
rescue => err
  UI.verbose("Error getting git branch: #{err.message}")
  nil
end

.git_log_between(pretty_format, from, to, merge_commit_filtering, date_format = nil, ancestry_path) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 12

def self.git_log_between(pretty_format, from, to, merge_commit_filtering, date_format = nil, ancestry_path)
  command = %w(git log)
  command << "--pretty=#{pretty_format}"
  command << "--date=#{date_format}" if date_format
  command << '--ancestry-path' if ancestry_path
  command << "#{from}...#{to}"
  command << git_log_merge_commit_filtering_option(merge_commit_filtering)
  # "*command" syntax expands "command" array into variable arguments, which
  # will then be individually shell-escaped by Actions.sh.
  Actions.sh(*command.compact, log: false).chomp
rescue
  nil
end

.git_log_last_commits(pretty_format, commit_count, merge_commit_filtering, date_format = nil, ancestry_path) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 26

def self.git_log_last_commits(pretty_format, commit_count, merge_commit_filtering, date_format = nil, ancestry_path)
  command = %w(git log)
  command << "--pretty=#{pretty_format}"
  command << "--date=#{date_format}" if date_format
  command << '--ancestry-path' if ancestry_path
  command << '-n' << commit_count.to_s
  command << git_log_merge_commit_filtering_option(merge_commit_filtering)
  Actions.sh(*command.compact, log: false).chomp
rescue
  nil
end

.git_log_merge_commit_filtering_option(merge_commit_filtering) ⇒ Object



158
159
160
161
162
163
164
165
166
167
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 158

def self.git_log_merge_commit_filtering_option(merge_commit_filtering)
  case merge_commit_filtering
  when :exclude_merges
    "--no-merges"
  when :only_include_merges
    "--merges"
  when :include_merges
    nil
  end
end

.git_remote_branch_name(remote_name) ⇒ Object

Returns the default git remote branch name



144
145
146
147
148
149
150
151
152
153
154
155
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 144

def self.git_remote_branch_name(remote_name)
  # Rescues if not a git repo or no remote repo
  if remote_name
    Actions.sh("git remote show #{remote_name} | grep 'HEAD branch' | sed 's/.*: //'", log: false).chomp
  else
    # Query git for the current remote head
    Actions.sh("variable=$(git remote) && git remote show $variable | grep 'HEAD branch' | sed 's/.*: //'", log: false).chomp
  end
rescue => err
  UI.verbose("Error getting git default remote branch: #{err.message}")
  nil
end

.is_class_action?(class_ref) ⇒ Boolean

Returns a boolean indicating whether the class reference is a Fastlane::Action

Returns:



173
174
175
176
177
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 173

def self.is_class_action?(class_ref)
  return false if class_ref.nil?
  is_an_action = class_ref < Fastlane::Action
  return is_an_action || false
end

.is_deprecated?(class_ref) ⇒ Boolean

Returns a boolean indicating if the class reference is a deprecated Fastlane::Action

Returns:



181
182
183
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 181

def self.is_deprecated?(class_ref)
  is_class_action?(class_ref) && class_ref.category == :deprecated
end

.lane_contextObject

The shared hash can be accessed by any action and contains information like the screenshots path or beta URL



48
49
50
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 48

def self.lane_context
  @lane_context ||= SharedValues::LaneContextValues.new
end

.last_git_commitObject

Returns the unwrapped subject and body of the last commit DEPRECATED: Use last_git_commit_message instead.



102
103
104
105
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 102

def self.last_git_commit
  UI.important('`last_git_commit` is deprecated. Please use `last_git_commit_message` instead.')
  last_git_commit_message
end

.last_git_commit_dictObject



62
63
64
65
66
67
68
69
70
71
72
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 62

def self.last_git_commit_dict
  return nil if last_git_commit_formatted_with('%an').nil?

  {
      author: last_git_commit_formatted_with('%an'),
      author_email: last_git_commit_formatted_with('%ae'),
      message: last_git_commit_formatted_with('%B'),
      commit_hash: last_git_commit_formatted_with('%H'),
      abbreviated_commit_hash: last_git_commit_formatted_with('%h')
  }
end

.last_git_commit_formatted_with(pretty_format, date_format = nil) ⇒ Object

Gets the last git commit information formatted into a String by the provided pretty format String. See the git-log documentation for valid format placeholders



76
77
78
79
80
81
82
83
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 76

def self.last_git_commit_formatted_with(pretty_format, date_format = nil)
  command = %w(git log -1)
  command << "--pretty=#{pretty_format}"
  command << "--date=#{date_format}" if date_format
  Actions.sh(*command.compact, log: false).chomp
rescue
  nil
end

.last_git_commit_hash(short) ⇒ Object

Get the hash of the last commit



115
116
117
118
119
120
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 115

def self.last_git_commit_hash(short)
  format_specifier = short ? '%h' : '%H'
  string = last_git_commit_formatted_with(format_specifier).to_s
  return string unless string.empty?
  return nil
end

.last_git_commit_messageObject

Returns the unwrapped subject and body of the last commit



108
109
110
111
112
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 108

def self.last_git_commit_message
  s = (last_git_commit_formatted_with('%B') || "").strip
  return s if s.to_s.length > 0
  nil
end

.last_git_tag_hash(tag_match_pattern = nil) ⇒ Object



38
39
40
41
42
43
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 38

def self.last_git_tag_hash(tag_match_pattern = nil)
  tag_pattern_param = tag_match_pattern ? "=#{tag_match_pattern}" : ''
  Actions.sh('git', 'rev-list', "--tags#{tag_pattern_param}", '--max-count=1').chomp
rescue
  nil
end

.last_git_tag_name(match_lightweight = true, tag_match_pattern = nil) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'fastlane/lib/fastlane/helper/git_helper.rb', line 45

def self.last_git_tag_name(match_lightweight = true, tag_match_pattern = nil)
  hash = last_git_tag_hash(tag_match_pattern)
  # If hash is nil (command fails), "git describe" command below will still
  # run and provide some output, although it's definitely not going to be
  # anything reasonably expected. Bail out early.
  return unless hash

  command = %w(git describe)
  command << '--tags' if match_lightweight
  command << hash
  command << '--match' if tag_match_pattern
  command << tag_match_pattern if tag_match_pattern
  Actions.sh(*command.compact, log: false).chomp
rescue
  nil
end

.load_default_actionsObject



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

def self.load_default_actions
  Dir[File.expand_path('*.rb', File.dirname(__FILE__))].each do |file|
    require file
  end
end

.load_external_actions(path) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 124

def self.load_external_actions(path)
  UI.user_error!("You need to pass a valid path") unless File.exist?(path)

  class_refs = []
  Dir[File.expand_path('*.rb', path)].each do |file|
    begin
      require file
    rescue SyntaxError => ex
      content = File.read(file, encoding: "utf-8")
      ex.to_s.lines
        .collect { |error| error.match(/#{file}:(\d+):(.*)/) }
        .reject(&:nil?)
        .each { |error| UI.content_error(content, error[1]) }
      UI.user_error!("Syntax error in #{File.basename(file)}")
      next
    end

    file_name = File.basename(file).gsub('.rb', '')

    class_name = file_name.fastlane_class + 'Action'
    begin
      class_ref = Fastlane::Actions.const_get(class_name)
      class_refs << class_ref

      if class_ref.respond_to?(:run)
        UI.success("Successfully loaded custom action '#{file}'.") if FastlaneCore::Globals.verbose?
      else
        UI.error("Could not find method 'run' in class #{class_name}.")
        UI.error('For more information, check out the docs: https://docs.fastlane.tools/')
        UI.user_error!("Action '#{file_name}' is damaged!", show_github_issues: true)
      end
    rescue NameError
      # Action not found
      UI.error("Could not find '#{class_name}' class defined.")
      UI.error('For more information, check out the docs: https://docs.fastlane.tools/')
      UI.user_error!("Action '#{file_name}' is damaged!", show_github_issues: true)
    end
  end
  Actions.reset_aliases

  return class_refs
end

.load_helpersObject

Import all the helpers



118
119
120
121
122
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 118

def self.load_helpers
  Dir[File.expand_path('../helper/*.rb', File.dirname(__FILE__))].each do |file|
    require file
  end
end

.reset_aliasesObject



28
29
30
# File 'fastlane/lib/fastlane/actions/actions_helper.rb', line 28

def self.reset_aliases
  @alias_actions = nil
end

.sh(*command, log: true, error_callback: nil, &b) ⇒ Object

Execute a shell command This method will output the string and execute it Just an alias for sh_no_action When running this in tests, it will return the actual command instead of executing it

Parameters:

  • log (Boolean) (defaults to: true)

    should fastlane print out the executed command

  • error_callback (Block) (defaults to: nil)

    a callback invoked with the command output if there is a non-zero exit status



11
12
13
# File 'fastlane/lib/fastlane/helper/sh_helper.rb', line 11

def self.sh(*command, log: true, error_callback: nil, &b)
  sh_control_output(*command, print_command: log, print_command_output: log, error_callback: error_callback, &b)
end

.sh_control_output(*command, print_command: true, print_command_output: true, error_callback: nil) {|status, result, cmd| ... } ⇒ Object

rubocop: disable Metrics/PerceivedComplexity

Parameters:

  • command

    The command to be executed (variadic)

  • print_command (Boolean) (defaults to: true)

    Should we print the command that’s being executed

  • print_command_output (Boolean) (defaults to: true)

    Should we print the command output during execution

  • error_callback (Block) (defaults to: nil)

    A block that’s called if the command exits with a non-zero status

Yields:

  • (status, result, cmd)

    The return status of the command, all output from the command and an equivalent shell command

Yield Parameters:

  • status (Process::Status)

    A Process::Status indicating the status of the completed command

  • result (String)

    The complete output to stdout and stderr of the completed command

  • cmd (String)

    A shell command equivalent to the arguments passed



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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'fastlane/lib/fastlane/helper/sh_helper.rb', line 28

def self.sh_control_output(*command, print_command: true, print_command_output: true, error_callback: nil)
  print_command = print_command_output = true if $troubleshoot
  # Set the encoding first, the user might have set it wrong
  previous_encoding = [Encoding.default_external, Encoding.default_internal]
  Encoding.default_external = Encoding::UTF_8
  Encoding.default_internal = Encoding::UTF_8

  # Workaround to support previous Fastlane syntax.
  # This has some limitations. For example, it requires the caller to shell escape
  # everything because of usages like ["ls -la", "/tmp"] instead of ["ls", "-la", "/tmp"].
  command = [command.first.join(" ")] if command.length == 1 && command.first.kind_of?(Array)

  shell_command = shell_command_from_args(*command)
  UI.command(shell_command) if print_command

  result = ''
  exit_status = nil
  if Helper.sh_enabled?
    # The argument list is passed directly to Open3.popen2e, which
    # handles the variadic argument list in the same way as Kernel#spawn.
    # (http://ruby-doc.org/core-2.4.2/Kernel.html#method-i-spawn) or
    # Process.spawn (http://ruby-doc.org/core-2.4.2/Process.html#method-c-spawn).
    #
    # sh "ls -la /Applications/Xcode\ 7.3.1.app"
    # sh "ls", "-la", "/Applications/Xcode 7.3.1.app"
    # sh({ "FOO" => "Hello" }, "echo $FOO")
    Open3.popen2e(*command) do |stdin, io, thread|
      io.sync = true
      io.each do |line|
        UI.command_output(line.strip) if print_command_output
        result << line
      end
      exit_status = thread.value
    end

    # Checking Process::Status#exitstatus instead of #success? makes for more
    # testable code. (Tests mock exitstatus only.) This is also consistent
    # with previous implementations of sh and... probably portable to all
    # relevant platforms.
    if exit_status.exitstatus != 0
      message = if print_command
                  "Exit status of command '#{shell_command}' was #{exit_status.exitstatus} instead of 0."
                else
                  "Shell command exited with exit status #{exit_status.exitstatus} instead of 0."
                end
      message += "\n#{result}" if print_command_output

      if error_callback || block_given?
        UI.error(message)
        # block notified below, on success or failure
        error_callback && error_callback.call(result)
      else
        UI.shell_error!(message)
      end
    end
  else
    result << shell_command # only for the tests
  end

  if block_given?
    # Avoid yielding nil in tests. $? will be meaningless, but calls to
    # it will not crash. There is no Process::Status.new. The alternative
    # is to move this inside the sh_enabled? check and not yield in tests.
    return yield(exit_status || $?, result, shell_command)
  end
  result
rescue => ex
  raise ex
ensure
  Encoding.default_external = previous_encoding.first
  Encoding.default_internal = previous_encoding.last
end

.sh_no_action(*command, log: true, error_callback: nil, &b) ⇒ Object



15
16
17
# File 'fastlane/lib/fastlane/helper/sh_helper.rb', line 15

def self.sh_no_action(*command, log: true, error_callback: nil, &b)
  sh_control_output(*command, print_command: log, print_command_output: log, error_callback: error_callback, &b)
end

.shell_command_from_args(*args) ⇒ String

Used to produce a shell command string from a list of arguments that may be passed to methods such as Kernel#system, Kernel#spawn and Open3.popen2e in order to print the command to the terminal. The same *args are passed directly to a system call (Open3.popen2e). This interpretation is not used when executing a command.

Parameters:

  • args

    Any number of arguments used to construct a command

Returns:

  • (String)

    A shell command representing the arguments passed in

Raises:

  • (ArgumentError)

    If no arguments passed



111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'fastlane/lib/fastlane/helper/sh_helper.rb', line 111

def self.shell_command_from_args(*args)
  raise ArgumentError, "sh requires at least one argument" unless args.count > 0

  command = ""

  # Optional initial environment Hash
  if args.first.kind_of?(Hash)
    command = args.shift.map { |k, v| "#{k}=#{v.shellescape}" }.join(" ") + " "
  end

  # Support [ "/usr/local/bin/foo", "foo" ], "-x", ...
  if args.first.kind_of?(Array)
    command += args.shift.first.shellescape + " " + args.shelljoin
    command.chomp!(" ")
  elsif args.count == 1 && args.first.kind_of?(String)
    command += args.first
  else
    command += args.shelljoin
  end

  command
end

.verify_gem!(gem_name) ⇒ Object

will make sure a gem is installed. If it’s not an appropriate error message is shown this will not ‘require’ the gem



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'fastlane/lib/fastlane/helper/gem_helper.rb', line 5

def self.verify_gem!(gem_name)
  begin
    FastlaneRequire.install_gem_if_needed(gem_name: gem_name, require_gem: false)
    # We don't import this by default, as it's not always the same
    # also e.g. cocoapods is just required and not imported
  rescue Gem::LoadError
    UI.error("Could not find gem '#{gem_name}'")
    UI.error("")
    UI.error("If you installed fastlane using `gem install fastlane` run")
    UI.command("gem install #{gem_name}")
    UI.error("to install the missing gem")
    UI.error("")
    UI.error("If you use a Gemfile add this to your Gemfile:")
    UI.important("  gem '#{gem_name}'")
    UI.error("and run `bundle install`")

    UI.user_error!("You have to install the `#{gem_name}` gem on this machine") unless Helper.test?
  end
  true
end