Class: Fastlane::Actions::CopyArtifactsAction

Inherits:
Fastlane::Action show all
Defined in:
lib/fastlane/actions/copy_artifacts.rb

Constant Summary

Constants inherited from Fastlane::Action

Fastlane::Action::AVAILABLE_CATEGORIES

Documentation collapse

Class Method Summary collapse

Methods inherited from Fastlane::Action

action_name, author, lane_context, method_missing, other_action, output, return_value, sample_return_value, sh, step_text

Class Method Details

.authorsObject



81
82
83
# File 'lib/fastlane/actions/copy_artifacts.rb', line 81

def self.authors
  ["lmirosevic"]
end

.available_optionsObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/fastlane/actions/copy_artifacts.rb', line 56

def self.available_options
  [
    FastlaneCore::ConfigItem.new(key: :keep_original,
                                 description: "Set this to true if you want copy, rather than move, semantics",
                                 is_string: false,
                                 optional: true,
                                 default_value: true),
    FastlaneCore::ConfigItem.new(key: :target_path,
                                 description: "The directory in which you want your artifacts placed",
                                 is_string: false,
                                 optional: false,
                                 default_value: 'artifacts'),
    FastlaneCore::ConfigItem.new(key: :artifacts,
                                 description: "An array of file patterns of the files/folders you want to preserve",
                                 is_string: false,
                                 optional: false,
                                 default_value: []),
    FastlaneCore::ConfigItem.new(key: :fail_on_missing,
                                 description: "Fail when a source file isn't found",
                                 is_string: false,
                                 optional: true,
                                 default_value: false)
  ]
end

.categoryObject



103
104
105
# File 'lib/fastlane/actions/copy_artifacts.rb', line 103

def self.category
  :misc
end

.descriptionObject



45
46
47
# File 'lib/fastlane/actions/copy_artifacts.rb', line 45

def self.description
  "Small action to save your build artifacts. Useful when you use reset_git_repo"
end

.detailsObject



49
50
51
52
53
54
# File 'lib/fastlane/actions/copy_artifacts.rb', line 49

def self.details
  [
    "This action copies artifacs to a target directory. It's useful if you have a CI that will pick up these artifacts and attach them to the build. Useful e.g. for storing your `.ipa`s, `.dSYM.zip`s, `.mobileprovision`s, `.cert`s",
    "Make sure your target_path is gitignored, and if you use `reset_git_repo`, make sure the artifacts are added to the exclude list"
  ].join("\n")
end

.example_codeObject



89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/fastlane/actions/copy_artifacts.rb', line 89

def self.example_code
  [
    'copy_artifacts(
      target_path: "artifacts",
      artifacts: ["*.cer", "*.mobileprovision", "*.ipa", "*.dSYM.zip"]
    )

    # Reset the git repo to a clean state, but leave our artifacts in place
    reset_git_repo(
      exclude: "artifacts"
    )'
  ]
end

.is_supported?(platform) ⇒ Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/fastlane/actions/copy_artifacts.rb', line 85

def self.is_supported?(platform)
  true
end

.run(params) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/fastlane/actions/copy_artifacts.rb', line 6

def self.run(params)
  # expand the path to make sure we can deal with relative paths
  target_path = File.expand_path(params[:target_path])

  # we want to make sure that our target folder exist already
  FileUtils.mkdir_p(target_path)

  # Ensure that artifacts is an array
  artifacts_to_search = [params[:artifacts]].flatten

  # If any of the paths include "*", we assume that we are referring to the Unix entries
  # e.g /tmp/fastlane/* refers to all the files in /tmp/fastlane
  # We use Dir.glob to expand all those paths, this would create an array of arrays though, so flatten
  artifacts = artifacts_to_search.map { |f| f.include?("*") ? Dir.glob(f) : f }.flatten

  UI.verbose("Copying artifacts #{artifacts.join(', ')} to #{target_path}")
  UI.verbose(params[:keep_original] ? "Keeping original files" : "Not keeping original files")

  if params[:fail_on_missing]
    missing = artifacts.select { |a| !File.exist?(a) }
    UI.user_error! "Not all files were present in copy artifacts. Missing #{missing.join(', ')}" unless missing.empty?
  else
    # If we don't fail on non-existant files, don't try to copy non-existant files
    artifacts.reject! { |artifact| !File.exist?(artifact) }
  end

  if params[:keep_original]
    FileUtils.cp_r(artifacts, target_path, remove_destination: true)
  else
    FileUtils.mv(artifacts, target_path, force: true)
  end

  UI.success('Build artifacts successfully copied!')
end