fastlane-plugin-upload_symbols_to_new_relic 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4126149c0e4279648c6af7032f65d57dff3a0d12
4
+ data.tar.gz: 93a04483691bb0b628c6010b73ceb0c737101bb8
5
+ SHA512:
6
+ metadata.gz: 7c0859d6aa882c50f4723dbb0acbf79e6e1a39a8900191395846cb95c62c7c7e32ac2501309925cd2b0d4be56e3d3ccff020b890e45b4ce03ede82d72cc8d509
7
+ data.tar.gz: d006764b56dcc82c40a9219daf579f14640c69342b089f26c23a7965e50e48df50775ef90283a72e9a0d4f9374cf3a1997fb5b195a19299e81663d92cf3eec0e
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Helmut Januschka <helmut@januschka.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,56 @@
1
+ # upload_symbols_to_new_relic plugin
2
+
3
+ [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-upload_symbols_to_new_relic)
4
+
5
+ ## Getting Started
6
+
7
+ This project is a [fastlane](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-upload_symbols_to_new_relic`, add it to your project by running:
8
+
9
+ ```bash
10
+ fastlane add_plugin upload_symbols_to_new_relic
11
+ ```
12
+
13
+ ## About upload_symbols_to_new_relic
14
+
15
+ Uploads dsyms to New Relic
16
+
17
+
18
+ ## Example
19
+
20
+ ```ruby
21
+ upload_symbols_to_new_relic(
22
+ dsym_path: "./App.dSYM.zip",
23
+ new_relic_license_key: 'something123',
24
+ new_relic_app_name: 'appname',
25
+ new_relic_upload_libs: 'applib,otherlib'
26
+ )
27
+ ```
28
+
29
+ ## Run tests for this plugin
30
+
31
+ To run both the tests, and code style validation, run
32
+
33
+ ```
34
+ rake
35
+ ```
36
+
37
+ To automatically fix many of the styling issues, use
38
+ ```
39
+ rubocop -a
40
+ ```
41
+
42
+ ## Issues and Feedback
43
+
44
+ For any other issues and feedback about this plugin, please submit it to this repository.
45
+
46
+ ## Troubleshooting
47
+
48
+ If you have trouble using plugins, check out the [Plugins Troubleshooting](https://github.com/fastlane/fastlane/blob/master/fastlane/docs/PluginsTroubleshooting.md) doc in the main `fastlane` repo.
49
+
50
+ ## Using `fastlane` Plugins
51
+
52
+ For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Plugins.md).
53
+
54
+ ## About `fastlane`
55
+
56
+ `fastlane` is the easiest way to automate building and releasing your iOS and Android apps. To learn more, check out [fastlane.tools](https://fastlane.tools).
@@ -0,0 +1,16 @@
1
+ require 'fastlane/plugin/upload_symbols_to_new_relic/version'
2
+
3
+ module Fastlane
4
+ module UploadSymbolsToNewRelic
5
+ # Return all .rb files inside the "actions" and "helper" directory
6
+ def self.all_classes
7
+ Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))]
8
+ end
9
+ end
10
+ end
11
+
12
+ # By default we want to import all available actions and helpers
13
+ # A plugin can contain any number of actions and plugins
14
+ Fastlane::UploadSymbolsToNewRelic.all_classes.each do |current|
15
+ require current
16
+ end
@@ -0,0 +1,150 @@
1
+ module Fastlane
2
+ module Actions
3
+ class UploadSymbolsToNewRelicAction < Action
4
+ def self.run(params)
5
+ dsym_paths = get_all_dsym_paths(params)
6
+
7
+ if dsym_paths.count.zero?
8
+ UI.error("Couldn't find any dSYMs, please pass them using the dsym_path option")
9
+ return nil
10
+ end
11
+
12
+ dsym_paths.each do |current_path|
13
+ handle_dsym(params, current_path)
14
+ end
15
+ end
16
+
17
+ def self.get_all_dsym_paths(params)
18
+ dsym_paths = []
19
+ dsym_paths << params[:dsym_path] if params[:dsym_path]
20
+ dsym_paths += Actions.lane_context[SharedValues::DSYM_PATHS] if Actions.lane_context[SharedValues::DSYM_PATHS]
21
+
22
+ # Get rid of duplicates (which might occur when both passed and detected)
23
+ dsym_paths = dsym_paths.collect { |a| File.expand_path(a) }
24
+ dsym_paths.uniq!
25
+
26
+ return dsym_paths
27
+ end
28
+
29
+ # @param current_path this is a path to either a dSYM or a zipped dSYM
30
+ # this might also be either nested or not, we're flexible
31
+ def self.handle_dsym(params, current_path)
32
+ if current_path.end_with?(".dSYM")
33
+ dwarf_dump = Actions.sh("xcrun dwarfdump --uuid #{current_path}")
34
+
35
+ upload_dsym(params, current_path, dwarf_dump)
36
+ elsif current_path.end_with?(".zip")
37
+ UI.message("Extracting '#{current_path}'...")
38
+
39
+ current_path = File.expand_path(current_path)
40
+ Dir.mktmpdir do |dir|
41
+ Dir.chdir(dir) do
42
+ Actions.sh("unzip -qo #{current_path.shellescape}")
43
+ Dir["*.dSYM"].each do |path|
44
+ handle_dsym(params, path)
45
+ end
46
+ end
47
+ end
48
+ else
49
+ UI.error "Don't know how to handle '#{current_path}'"
50
+ end
51
+ end
52
+
53
+ def self.upload_dsym(params, path, dwarf_dump)
54
+ if dwarf_dump.nil?
55
+ return
56
+ end
57
+
58
+ app_name = params[:new_relic_app_name]
59
+ uploadable_lib_names = (params[:new_relic_upload_libs] || "").split(",")
60
+ new_relic_key = params[:new_relic_license_key]
61
+
62
+ all_included_architecture_info = dwarf_dump.split("\n").map { |line| transform_architecture_symbol_info(line) }
63
+ lib_name = all_included_architecture_info[0][:lib_name]
64
+
65
+ # if we haven't specified any upload libs, we'll upload them all
66
+ # otherwise, check that the lib+name from the dwarfdump is in our list
67
+ puts "123123"
68
+ if uploadable_lib_names.count.zero? || uploadable_lib_names.include?(lib_name)
69
+ build_ids = all_included_architecture_info.map { |info| info[:uuid] } .join(",")
70
+ zip_file_name = "#{path}.zip"
71
+ sh "zip --recurse-paths --quiet '#{zip_file_name}' '#{path}'"
72
+ sh "curl -F dsym=@'#{zip_file_name}' -F buildId='#{build_ids}' -F appName='#{app_name}' -H 'X-APP-LICENSE-KEY: #{new_relic_key}' https://mobile-symbol-upload.newrelic.com/symbol"
73
+ end
74
+ end
75
+
76
+ def self.transform_architecture_symbol_info(architecture_symbol_info)
77
+ # dwarfdump returns lines in the format "UUID: THE-dSYM-UUID-HERE (architecture) path/to/lib"
78
+ dsym_info_components = architecture_symbol_info.split(" ")
79
+ uuid = dsym_info_components[1]
80
+ uuid.delete! '-'
81
+ uuid = uuid.downcase
82
+
83
+ lib_path = dsym_info_components.last
84
+ lib_name = lib_path.split("/").last
85
+
86
+ return { uuid: uuid, lib_name: lib_name }
87
+ end
88
+
89
+ #####################################################
90
+ # @!group Documentation
91
+ #####################################################
92
+
93
+ def self.description
94
+ "Upload all dsyms (possibly in a zip file) to new relic"
95
+ end
96
+
97
+ def self.details
98
+ "Upload all dsyms (possibly in a zip file) to new relic"
99
+ end
100
+
101
+ def self.available_options
102
+ [
103
+ FastlaneCore::ConfigItem.new(key: :new_relic_app_name,
104
+ env_name: "FL_UPLOAD_SYMBOLS_TO_NEW_RELIC_APP_NAME",
105
+ description: "The name of your app",
106
+ optional: false,
107
+ verify_block: proc do |value|
108
+ UI.user_error!("No app name for New Relic given, pass using `new_relic_app_name: 'app name'`") if value.to_s.length.zero?
109
+ end),
110
+ FastlaneCore::ConfigItem.new(key: :new_relic_license_key,
111
+ env_name: "FL_UPLOAD_SYMBOLS_TO_NEW_RELIC_LICENSE_KEY",
112
+ description: "Your New Relic app license key",
113
+ optional: false,
114
+ verify_block: proc do |value|
115
+ UI.user_error!("No license key for New Relic given, pass using `new_relic_license_key: 'key'`") if value.to_s.length.zero?
116
+ end),
117
+ FastlaneCore::ConfigItem.new(key: :dsym_path,
118
+ env_name: "FL_UPLOAD_SYMBOLS_TO_NEW_RELIC_DSYM_PATH",
119
+ description: "Path to the DSYM file or zip to upload",
120
+ default_value: ENV[SharedValues::DSYM_OUTPUT_PATH.to_s] || (Dir["./**/*.dSYM"] + Dir["./**/*.dSYM.zip"]).first,
121
+ optional: true,
122
+ verify_block: proc do |value|
123
+ UI.user_error!("Couldn't find file at path '#{File.expand_path(value)}'") unless File.exist?(value)
124
+ UI.user_error!("Symbolication file needs to be dSYM or zip") unless value.end_with?(".zip", ".dSYM")
125
+ end),
126
+ FastlaneCore::ConfigItem.new(key: :new_relic_upload_libs,
127
+ env_name: "FL_UPLOAD_SYMBOLS_TO_NEW_RELIC_UPLOAD_LIBS",
128
+ description: "The library names to upload",
129
+ optional: true)
130
+ ]
131
+ end
132
+
133
+ def self.output
134
+ []
135
+ end
136
+
137
+ def self.return_value
138
+ nil
139
+ end
140
+
141
+ def self.authors
142
+ ["bitwit", "hjanuschka"]
143
+ end
144
+
145
+ def self.is_supported?(platform)
146
+ platform == :ios
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,12 @@
1
+ module Fastlane
2
+ module Helper
3
+ class UploadSymbolsToNewRelicHelper
4
+ # class methods that you define here become available in your action
5
+ # as `Helper::UploadSymbolsToNewRelicHelper.your_method`
6
+ #
7
+ def self.show_message
8
+ UI.message("Hello from the upload_symbols_to_new_relic plugin helper!")
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ module Fastlane
2
+ module UploadSymbolsToNewRelic
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fastlane-plugin-upload_symbols_to_new_relic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Helmut Januschka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: fastlane
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 1.105.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 1.105.2
97
+ description:
98
+ email: helmut@januschka.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - LICENSE
104
+ - README.md
105
+ - lib/fastlane/plugin/upload_symbols_to_new_relic.rb
106
+ - lib/fastlane/plugin/upload_symbols_to_new_relic/actions/upload_symbols_to_new_relic_action.rb
107
+ - lib/fastlane/plugin/upload_symbols_to_new_relic/helper/upload_symbols_to_new_relic_helper.rb
108
+ - lib/fastlane/plugin/upload_symbols_to_new_relic/version.rb
109
+ homepage:
110
+ licenses:
111
+ - MIT
112
+ metadata: {}
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubyforge_project:
129
+ rubygems_version: 2.4.8
130
+ signing_key:
131
+ specification_version: 4
132
+ summary: Uploads dSym to New Relic
133
+ test_files: []