fastlane 1.5.0 → 1.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 621c5de5ce077702e3f965ace42c44c15d2a307d
4
- data.tar.gz: 64b84fcd0e219a19fd4f43c2f10c3e4ceea54dba
3
+ metadata.gz: 4a6348cd520e241c0337e726cae85210f734da84
4
+ data.tar.gz: 2f84fa7a0f395fb821e1e5ab0fdd93bb8cdf7248
5
5
  SHA512:
6
- metadata.gz: 2e8c763630fa12412d7cc1cfb2f1ac3955e5e8525317644ef287ed44541a0e7ea389b6fe500ed6cb9b795b3365475e3599e4ec0b0cb5e6581921b0b74258ba63
7
- data.tar.gz: c526901b9db016b63b6d8c30f240f8782976b48cdc3258e1dbc03080727499a386d1442b6f9947d0ab20eda8dd43f9315e11f7d5b7103bfae3ef862e11e79fc7
6
+ metadata.gz: 28f749779517ca85049ca5580333dfd9ac11ff65fe44de9b618135e2dc509901d96266063d0d54c0af6b72b48f414bad22f3ad17ae42fee7b5fcac472d59a9df
7
+ data.tar.gz: dfb4a8e145880c16c452a8732c956925910b2b8b6aad2ccc6264c1660e69e56904177d337ac68765f1591fa9bcd4eaef889c82bfc6cfe806931dece8502266af
data/README.md CHANGED
@@ -44,9 +44,7 @@ Store your configuration in a text file to easily test, builld, and deploy from
44
44
 
45
45
  [Take a look at how Wikipedia and Product Hunt use `fastlane`](https://github.com/fastlane/examples).
46
46
 
47
- Just edit the `Fastfile` to define multiple `lanes`, or different workflows.
48
-
49
- Examples are: `appstore`, `beta` and `test`.
47
+ Define different environments (`lanes`) in your `Fastfile`: Examples are: `appstore`, `beta` and `test`.
50
48
 
51
49
  You define a `lane` like this (more details about the commands in the [Actions](https://github.com/KrauseFx/fastlane/blob/master/docs/Actions.md) documentation):
52
50
 
@@ -65,28 +63,31 @@ lane :appstore do
65
63
  end
66
64
  ```
67
65
 
68
- To launch the ```appstore``` lane, just run:
66
+ To launch the `appstore` lane, just run:
69
67
 
70
68
  ```sh
71
69
  fastlane appstore
72
70
  ```
73
71
 
74
- Fastlane can do a lot for you to automate tedious and time-consuming parts of your job.
72
+ `fastlane` can do a lot for you to automate tedious and time-consuming tasks:
75
73
 
76
- - Connect all tools, part of the ```fastlane``` toolchain to work seamlessly together.
77
- - Define different ```deployment lanes``` for App Store deployment, beta builds or testing.
74
+ - Connect all build related iOS tools into one workflow (both `fastlane` tools and third party tools)
75
+ - Define different `deployment lanes` for App Store deployment, beta builds or testing.
78
76
  - Deploy from any computer.
79
- - [Jenkins Integration](https://github.com/KrauseFx/fastlane/blob/master/docs/Jenkins.md): Show the output directly in the Jenkins test results.
80
77
  - Write your [own actions](https://github.com/KrauseFx/fastlane/blob/master/docs#extensions) (extensions) to extend the functionality of `fastlane`.
81
- - Store data like the ```Bundle Identifier``` or your ```Apple ID``` once and use it across all tools.
82
- - Never remember any difficult commands, just ```fastlane```.
83
- - Easy setup, which helps you getting up and running very fast.
78
+ - Store data like the `Bundle Identifier` or your `Apple ID` once and use it across all tools.
79
+ - Never remember any difficult commands, just `fastlane`.
80
+ - Easy setup, which helps you getting up and running quickly.
84
81
  - [Shared context](https://github.com/KrauseFx/fastlane/blob/master/docs/Advanced.md#lane-context), which is used to let the different deployment steps communicate with each other.
85
- - Store **everything** in git. Never lookup the used build commands in the ```Jenkins``` configs.
82
+ - Store **everything** in git. Never again lookup the used build commands in the ```Jenkins``` configs.
86
83
  - Saves you **hours** of preparing app submission, uploading screenshots and deploying the app for each update.
87
84
  - Very flexible configuration using a fully customizable `Fastfile`.
88
- - Once up and running, you have a fully working **Continuous Deployment** process. Just trigger ```fastlane``` and you're good to go.
89
- - Over 30 built-in integrations available.
85
+ - Once up and running, you have a fully working **Continuous Delivery** process. Just trigger ```fastlane``` and you're good to go.
86
+ - [Jenkins Integration](https://github.com/KrauseFx/fastlane/blob/master/docs/Jenkins.md): Show the output directly in the Jenkins test results.
87
+ - Automatically generate a markdown documentation of your lanes based on your `Fastfile`.
88
+ - Over 60 built-in integrations available.
89
+ - Support for both iOS and Mac OS apps
90
+ - Full git and mercurial support
90
91
 
91
92
  ##### Take a look at the [fastlane website](https://fastlane.tools) for more information about why and when to use `fastlane`.
92
93
 
@@ -96,8 +97,6 @@ Fastlane can do a lot for you to automate tedious and time-consuming parts of yo
96
97
 
97
98
  I recommend following the [fastlane guide](https://github.com/KrauseFx/fastlane/blob/master/docs/Guide.md) to get started.
98
99
 
99
- If you are familiar with the command line and Ruby, install `fastlane` yourself:
100
-
101
100
  sudo gem install fastlane --verbose
102
101
 
103
102
  Make sure, you have the latest version of the Xcode command line tools installed:
@@ -0,0 +1,142 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
3
+
4
+ <head>
5
+ <meta name="viewport" content="width=device-width" />
6
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
7
+ <title>Fastlane Build</title>
8
+
9
+
10
+ <style type="text/css">
11
+ img {
12
+ max-width: 100%;
13
+ }
14
+
15
+ body {
16
+ -webkit-font-smoothing: antialiased;
17
+ -webkit-text-size-adjust: none;
18
+ width: 100% !important;
19
+ height: 100%;
20
+ line-height: 1.6em;
21
+ }
22
+
23
+ body {
24
+ background-color: #f6f6f6;
25
+ }
26
+
27
+ .error_bg {
28
+ background-color: #BF2235;
29
+ }
30
+
31
+ .success_bg {
32
+ background-color: #8FC74F;
33
+ }
34
+
35
+ @media only screen and (max-width: 640px) {
36
+ body {
37
+ padding: 0 !important;
38
+ }
39
+ h1 {
40
+ font-weight: 800 !important;
41
+ margin: 20px 0 5px !important;
42
+ }
43
+ h2 {
44
+ font-weight: 800 !important;
45
+ margin: 20px 0 5px !important;
46
+ }
47
+ h3 {
48
+ font-weight: 800 !important;
49
+ margin: 20px 0 5px !important;
50
+ }
51
+ h4 {
52
+ font-weight: 800 !important;
53
+ margin: 20px 0 5px !important;
54
+ }
55
+ h1 {
56
+ font-size: 22px !important;
57
+ }
58
+ h2 {
59
+ font-size: 18px !important;
60
+ }
61
+ h3 {
62
+ font-size: 16px !important;
63
+ }
64
+ .container {
65
+ padding: 0 !important;
66
+ width: 100% !important;
67
+ }
68
+ .content {
69
+ padding: 0 !important;
70
+ }
71
+ .content-wrap {
72
+ padding: 10px !important;
73
+ }
74
+ .invoice {
75
+ width: 100% !important;
76
+ }
77
+ }
78
+ </style>
79
+ </head>
80
+
81
+ <body itemscope itemtype="http://schema.org/EmailMessage" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; line-height: 1.6em; background-color: #f6f6f6; margin: 0;"
82
+ bgcolor="#f6f6f6">
83
+
84
+ <table class="body-wrap" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; background-color: #f6f6f6; margin: 0;" bgcolor="#f6f6f6">
85
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
86
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;" valign="top"></td>
87
+ <td class="container" width="600" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; display: block !important; max-width: 600px !important; clear: both !important; margin: 0 auto;"
88
+ valign="top">
89
+ <div class="content" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; max-width: 600px; display: block; margin: 0 auto; padding: 20px;">
90
+ <table class="main" width="100%" cellpadding="0" cellspacing="0" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; border-radius: 3px; background-color: #fff; margin: 0; border: 1px solid #e9e9e9;"
91
+ bgcolor="#fff">
92
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
93
+ <td class="alert alert-warning" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; color: #fff; font-weight: 500; background-color: <%= success ? '#68b90f' : '#d0021b'%>;text-align: center; border-radius: 3px 3px 0 0; margin: 0; padding: 20px;"
94
+ align="center" valign="top">
95
+ Fastlane Build
96
+ </td>
97
+ </tr>
98
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
99
+ <td class="content-wrap" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 20px;" valign="top">
100
+ <table width="100%" cellpadding="0" cellspacing="0" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
101
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
102
+ <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
103
+ <strong style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">Git Author:</strong>
104
+ <%= author %>
105
+ </td>
106
+ </tr>
107
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
108
+ <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
109
+ <strong style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">Git Commit:</strong>
110
+ <%= last_commit %>
111
+ </td>
112
+ </tr>
113
+ <% if ci_build_link %>
114
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
115
+ <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
116
+ <strong style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">CI build:</strong> <a href="<%= ci_build_link %>">Build</a>
117
+ </td>
118
+ </tr>
119
+ <% end %>
120
+
121
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
122
+ <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
123
+ <%= message %>
124
+ </td>
125
+ </tr>
126
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
127
+ <td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
128
+ <a href="<%= app_link %>" class="btn-primary" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; color: #FFF; text-decoration: none; line-height: 2em; font-weight: bold; text-align: center; cursor: pointer; display: inline-block; border-radius: 5px; text-transform: capitalize; background-color: #348eda; margin: 0; border-color: #348eda; border-style: solid; border-width: 10px 20px;">Download Release</a>
129
+ </td>
130
+ </tr>
131
+ </table>
132
+ </td>
133
+ </tr>
134
+ </table>
135
+ </div>
136
+ </td>
137
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;" valign="top"></td>
138
+ </tr>
139
+ </table>
140
+ </body>
141
+
142
+ </html>
@@ -0,0 +1,31 @@
1
+ module Fastlane
2
+ module Actions
3
+ class BackupFileAction < Action
4
+ def self.run params
5
+ path = params[:path]
6
+ FileUtils.cp(path, "#{path}.back", {:preserve => true})
7
+ Helper.log.info "Successfully created a backup 💾"
8
+ end
9
+
10
+ def self.description
11
+ 'This action backs up your file to "[path].back"'
12
+ end
13
+
14
+ def self.is_supported?(platform)
15
+ true
16
+ end
17
+
18
+ def self.author
19
+ "gin0606"
20
+ end
21
+
22
+ def self.available_options
23
+ [
24
+ FastlaneCore::ConfigItem.new(key: :path,
25
+ description: "Path to the file you want to backup",
26
+ optional: false),
27
+ ]
28
+ end
29
+ end
30
+ end
31
+ end
@@ -35,7 +35,6 @@ module Fastlane
35
35
  optional: true,
36
36
  is_string: false),
37
37
  FastlaneCore::ConfigItem.new(key: :silver,
38
- env_name: "",
39
38
  description: "Use white device frames. Alias for :white",
40
39
  optional: true,
41
40
  is_string: false),
@@ -10,6 +10,7 @@ module Fastlane
10
10
 
11
11
  api_token = options[:api_token]
12
12
  api_version = options[:version]
13
+ api_host = options[:api_host]
13
14
 
14
15
  channel = options[:channel]
15
16
  color = (options[:success] ? 'green' : 'red')
@@ -22,7 +23,7 @@ module Fastlane
22
23
  if user?(channel)
23
24
  raise 'HipChat private message not working with API V1 please use API V2 instead'.red
24
25
  else
25
- uri = URI.parse('https://api.hipchat.com/v1/rooms/message')
26
+ uri = URI.parse("https://#{api_host}/v1/rooms/message")
26
27
  response = Net::HTTP.post_form(uri, { 'from' => 'fastlane',
27
28
  'auth_token' => api_token,
28
29
  'color' => color,
@@ -40,14 +41,14 @@ module Fastlane
40
41
  json_headers = { 'Content-Type' => 'application/json',
41
42
  'Accept' => 'application/json', 'Authorization' => "Bearer #{api_token}" }
42
43
 
43
- uri = URI.parse("https://api.hipchat.com/v2/user/#{channel}/message")
44
+ uri = URI.parse("https://#{api_host}/v2/user/#{channel}/message")
44
45
  http = Net::HTTP.new(uri.host, uri.port)
45
46
  http.use_ssl = true
46
47
 
47
48
  response = http.post(uri.path, params.to_json, json_headers)
48
49
  check_response_code(response, channel)
49
50
  else
50
- uri = URI.parse("https://api.hipchat.com/v2/room/#{channel}/notification")
51
+ uri = URI.parse("https://#{api_host}/v2/room/#{channel}/notification")
51
52
  response = Net::HTTP.post_form(uri, { 'from' => 'fastlane',
52
53
  'auth_token' => api_token,
53
54
  'color' => color,
@@ -112,7 +113,12 @@ module Fastlane
112
113
  Helper.log.fatal "Please add 'ENV[\"HIPCHAT_API_VERSION\"] = \"1 or 2\"' to your Fastfile's `before_all` section.".red
113
114
  raise 'No HIPCHAT_API_VERSION given.'.red
114
115
  end
115
- end)
116
+ end),
117
+ FastlaneCore::ConfigItem.new(key: :api_host,
118
+ env_name: "HIPCHAT_API_HOST",
119
+ description: "The host of the HipChat-Server API",
120
+ default_value: "api.hipchat.com",
121
+ optional: true)
116
122
  ]
117
123
  end
118
124
 
@@ -1,3 +1,5 @@
1
+ require 'fastlane/erb_template_helper'
2
+
1
3
  module Fastlane
2
4
  module Actions
3
5
  class MailgunAction < Action
@@ -8,16 +10,9 @@ module Fastlane
8
10
 
9
11
  def self.run(options)
10
12
  require 'rest_client'
11
-
13
+ handle_params_transition(options)
12
14
  handle_exceptions(options)
13
-
14
- mailgunit(options[:mailgun_apikey],
15
- options[:mailgun_sandbox_domain],
16
- options[:mailgun_sandbox_postmaster],
17
- options[:to],
18
- options[:subject],
19
- compose_mail(options[:message],options[:success]))
20
-
15
+ mailgunit(options)
21
16
  end
22
17
 
23
18
  def self.description
@@ -26,13 +21,26 @@ module Fastlane
26
21
 
27
22
  def self.available_options
28
23
  [
24
+ #This is here just for while due to the transition, not needed anymore
29
25
  FastlaneCore::ConfigItem.new(key: :mailgun_sandbox_domain,
30
- env_name: "MAILGUN_SANDBOX_DOMAIN",
31
- description: "Mailgun sandbox domain for your mail"),
26
+ env_name: "MAILGUN_SANDBOX_POSTMASTER",
27
+ optional: true,
28
+ description: "Mailgun sandbox domain postmaster for your mail. Please use postmaster instead"),
29
+ #This is here just for while due to the transition, should use postmaster instead
32
30
  FastlaneCore::ConfigItem.new(key: :mailgun_sandbox_postmaster,
33
31
  env_name: "MAILGUN_SANDBOX_POSTMASTER",
34
- description: "Mailgun sandbox domain postmaster for your mail"),
32
+ optional: true,
33
+ description: "Mailgun sandbox domain postmaster for your mail. Please use postmaster instead"),
34
+ #This is here just for while due to the transition, should use apikey instead
35
35
  FastlaneCore::ConfigItem.new(key: :mailgun_apikey,
36
+ env_name: "MAILGUN_APIKEY",
37
+ optional: true,
38
+ description: "Mailgun apikey for your mail. Please use postmaster instead"),
39
+
40
+ FastlaneCore::ConfigItem.new(key: :postmaster,
41
+ env_name: "MAILGUN_SANDBOX_POSTMASTER",
42
+ description: "Mailgun sandbox domain postmaster for your mail"),
43
+ FastlaneCore::ConfigItem.new(key: :apikey,
36
44
  env_name: "MAILGUN_APIKEY",
37
45
  description: "Mailgun apikey for your mail"),
38
46
  FastlaneCore::ConfigItem.new(key: :to,
@@ -52,7 +60,18 @@ module Fastlane
52
60
  description: "Was this build successful? (true/false)",
53
61
  optional: true,
54
62
  default_value: true,
55
- is_string: false)
63
+ is_string: false),
64
+ FastlaneCore::ConfigItem.new(key: :app_link,
65
+ env_name: "MAILGUN_APP_LINK",
66
+ description: "App Release link",
67
+ optional: false,
68
+ is_string: true),
69
+ FastlaneCore::ConfigItem.new(key: :ci_build_link,
70
+ env_name: "MAILGUN_CI_BUILD_LINK",
71
+ description: "CI Build Link",
72
+ optional: true,
73
+ is_string: true)
74
+
56
75
 
57
76
  ]
58
77
  end
@@ -62,24 +81,21 @@ module Fastlane
62
81
  end
63
82
 
64
83
  private
65
- def self.compose_mail(text,success)
66
- text << "\n Git Author: #{Actions.git_author}"
67
- text << "\n Last Commit: #{Actions.last_git_commit}"
68
- text << "\n Success: #{success}"
84
+ def self.handle_params_transition(options)
85
+ options[:postmaster] = options[:mailgun_sandbox_postmaster] if options[:mailgun_sandbox_postmaster]
86
+ puts "\nUsing :mailgun_sandbox_postmaster is deprecated, please change to :postmaster".yellow
87
+
88
+ options[:apikey] = options[:mailgun_apikey] if options[:mailgun_apikey]
89
+ puts "\nUsing :mailgun_apikey is deprecated, please change to :apikey".yellow
69
90
  end
70
91
 
71
92
  def self.handle_exceptions(options)
72
- unless (options[:mailgun_apikey] rescue nil)
93
+ unless (options[:apikey] rescue nil)
73
94
  Helper.log.fatal "Please add 'ENV[\"MAILGUN_APIKEY\"] = \"a_valid_mailgun_apikey\"' to your Fastfile's `before_all` section.".red
74
95
  raise 'No MAILGUN_APIKEY given.'.red
75
96
  end
76
97
 
77
- unless (options[:mailgun_sandbox_domain] rescue nil)
78
- Helper.log.fatal "Please add 'ENV[\"MAILGUN_SANDBOX_DOMAIN\"] = \"a_valid_mailgun_sandbox_domain\"' to your Fastfile's `before_all` section.".red
79
- raise 'No MAILGUN_SANDBOX_DOMAIN given.'.red
80
- end
81
-
82
- unless (options[:mailgun_sandbox_postmaster] rescue nil)
98
+ unless (options[:postmaster] rescue nil)
83
99
  Helper.log.fatal "Please add 'ENV[\"MAILGUN_SANDBOX_POSTMASTER\"] = \"a_valid_mailgun_sandbox_postmaster\"' to your Fastfile's `before_all` section.".red
84
100
  raise 'No MAILGUN_SANDBOX_POSTMASTER given.'.red
85
101
  end
@@ -93,14 +109,37 @@ module Fastlane
93
109
  Helper.log.fatal "Please provide a valid :message = \"a_valid_mailgun_text\"".red
94
110
  raise 'No MAILGUN_MESSAGE given.'.red
95
111
  end
112
+
113
+ unless (options[:app_link] rescue nil)
114
+ Helper.log.fatal "Please provide a valid :app_link = \"a_valid_mailgun_app_link\"".red
115
+ raise 'No MAILGUN_APP_LINK given.'.red
116
+ end
96
117
  end
97
118
 
98
- def self.mailgunit(api_key,sandbox_domain,sandbox_postmaster,to,subject,text)
99
- RestClient.post "https://api:#{api_key}@api.mailgun.net/v3/#{sandbox_domain}/messages",
100
- :from => "Mailgun Sandbox<#{sandbox_postmaster}>",
101
- :to => "#{to}",
102
- :subject => subject,
103
- :text => text
119
+ def self.mailgunit(options)
120
+ sandbox_domain = options[:postmaster].split("@").last
121
+ RestClient.post "https://api:#{options[:apikey]}@api.mailgun.net/v3/#{sandbox_domain}/messages",
122
+ :from => "Mailgun Sandbox<#{options[:postmaster]}>",
123
+ :to => "#{options[:to]}",
124
+ :subject => options[:subject],
125
+ :html => mail_teplate(options)
126
+ mail_teplate(options)
127
+ end
128
+
129
+
130
+ def self.mail_teplate(options)
131
+ hash = {
132
+ author: Actions.git_author,
133
+ last_commit: Actions.last_git_commit,
134
+ message: options[:message],
135
+ app_link: options[:app_link]
136
+ }
137
+ hash[:success] = options[:success] if options[:success]
138
+ hash[:ci_build_link] = options[:success] if options[:ci_build_link]
139
+ Fastlane::ErbTemplateHelper.render(
140
+ Fastlane::ErbTemplateHelper.load("mailgun_html_template"),
141
+ hash
142
+ )
104
143
  end
105
144
 
106
145
  end
@@ -55,7 +55,6 @@ module Fastlane
55
55
  unless @options
56
56
  @options = PEM::Options.available_options
57
57
  @options << FastlaneCore::ConfigItem.new(key: :new_profile,
58
- env_name: "",
59
58
  description: "Block that is called if there is a new profile",
60
59
  optional: true,
61
60
  is_string: false)
@@ -0,0 +1,34 @@
1
+ module Fastlane
2
+ module Actions
3
+ class RestoreFileAction < Action
4
+ def self.run params
5
+ path = params[:path]
6
+ backup_path = "#{path}.back"
7
+ raise "Could not find file '#{backup_path}'" unless File.exist? backup_path
8
+ FileUtils.cp(backup_path, path, {:preserve => true})
9
+ FileUtils.rm(backup_path)
10
+ Helper.log.info "Successfully restored backup 📤"
11
+ end
12
+
13
+ def self.description
14
+ 'This action restore your file that was backuped with the `backup_file` action'
15
+ end
16
+
17
+ def self.is_supported?(platform)
18
+ true
19
+ end
20
+
21
+ def self.author
22
+ "gin0606"
23
+ end
24
+
25
+ def self.available_options
26
+ [
27
+ FastlaneCore::ConfigItem.new(key: :path,
28
+ description: "Original file name you want to restore",
29
+ optional: false),
30
+ ]
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,4 +1,4 @@
1
- require 'erb'
1
+ require 'fastlane/erb_template_helper'
2
2
  require 'ostruct'
3
3
  require 'shenzhen'
4
4
 
@@ -70,7 +70,7 @@ module Fastlane
70
70
  version_file_name = params[:version_file_name]
71
71
 
72
72
  if Helper.is_test?
73
- return build_args
73
+ return build_args
74
74
  end
75
75
 
76
76
  # Joins args into space delimited string
@@ -118,39 +118,30 @@ module Fastlane
118
118
  version_file_name ||= "version.json"
119
119
  version_url = "https://#{s3_subdomain}.amazonaws.com/#{s3_bucket}/#{version_file_name}"
120
120
 
121
+ #grabs module
122
+ eth = Fastlane::ErbTemplateHelper
121
123
  # Creates plist from template
122
- plist_template_path ||= "#{Helper.gem_path('fastlane')}/lib/assets/s3_plist_template.erb"
123
- plist_template = File.read(plist_template_path)
124
-
125
- et = ErbalT.new({
124
+ plist_render = eth.render(eth.load("s3_plist_template"),{
126
125
  url: ipa_url,
127
126
  bundle_id: bundle_id,
128
127
  bundle_version: bundle_version,
129
128
  title: title
130
- })
131
- plist_render = et.render(plist_template)
129
+ })
132
130
 
133
131
  # Creates html from template
134
- html_template_path ||= "#{Helper.gem_path('fastlane')}/lib/assets/s3_html_template.erb"
135
- html_template = File.read(html_template_path)
136
-
137
- et = ErbalT.new({
132
+ html_render = eth.render(eth.load("s3_html_template"),{
138
133
  url: plist_url,
139
134
  bundle_id: bundle_id,
140
135
  bundle_version: bundle_version,
141
136
  title: title
142
- })
143
- html_render = et.render(html_template)
137
+ })
144
138
 
145
- # Creates version from template
146
- version_template_path ||= "#{Helper.gem_path('fastlane')}/lib/assets/s3_version_template.erb"
147
- version_template = File.read(version_template_path)
148
139
 
149
- et = ErbalT.new({
140
+ # Creates version from template
141
+ version_render = eth.render(eth.load("s3_version_template"),{
150
142
  url: plist_url,
151
- full_version: full_version,
152
- })
153
- version_render = et.render(version_template)
143
+ full_version: full_version
144
+ })
154
145
 
155
146
  #####################################
156
147
  #
@@ -168,7 +159,7 @@ module Fastlane
168
159
  html_render,
169
160
  version_file_name,
170
161
  version_render
171
- )
162
+ )
172
163
 
173
164
  return true
174
165
 
@@ -216,7 +207,7 @@ module Fastlane
216
207
  #
217
208
  # NOT a fan of this as this was taken straight from Shenzhen
218
209
  # https://github.com/nomad/shenzhen/blob/986792db5d4d16a80c865a2748ee96ba63644821/lib/shenzhen/plugins/s3.rb#L32
219
- #
210
+ #
220
211
  # Need to find a way to not use this copied method
221
212
  #
222
213
  # AGAIN, I am not happy about this right now.
@@ -255,7 +246,7 @@ module Fastlane
255
246
 
256
247
  # This is the string: {CFBundleShortVersionString}.{CFBundleVersion}
257
248
  full_version = bundle_version + '.' + Shenzhen::PlistBuddy.print(plist, 'CFBundleVersion')
258
-
249
+
259
250
  end
260
251
  return bundle_id, bundle_version, title, full_version
261
252
  end
@@ -357,9 +348,3 @@ module Fastlane
357
348
  end
358
349
  end
359
350
  end
360
-
361
- class ErbalT < OpenStruct
362
- def render(template)
363
- ERB.new(template).result(binding)
364
- end
365
- end
@@ -25,6 +25,7 @@ module Fastlane
25
25
  configuration: "-configuration",
26
26
  derivedDataPath: "-derivedDataPath",
27
27
  destination: "-destination",
28
+ destination_timeout: "-destination-timeout",
28
29
  export_archive: "-exportArchive",
29
30
  export_format: "-exportFormat",
30
31
  export_installer_identity: "-exportInstallerIdentity",
@@ -402,6 +403,7 @@ module Fastlane
402
403
  ['scheme', 'The scheme to build'],
403
404
  ['build_settings', 'Hash of additional build information'],
404
405
  ['destination', 'The simulator to use, e.g. "name=iPhone 5s,OS=8.1"'],
406
+ ['destination_timeout', 'The timeout for connecting to the simulator, in seconds'],
405
407
  ['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII outout)']
406
408
  ]
407
409
  end
@@ -0,0 +1,20 @@
1
+ module Fastlane
2
+ class ErbTemplateHelper
3
+ require "erb"
4
+ def self.load(template_name)
5
+ path = "#{Helper.gem_path('fastlane')}/lib/assets/#{template_name}.erb"
6
+ raise "Could not find Template at path '#{path}'".red unless File.exist?(path)
7
+ File.read(path)
8
+ end
9
+
10
+ def self.render(template,template_vars_hash)
11
+ Fastlane::ErbalT.new(template_vars_hash).render(template)
12
+ end
13
+
14
+ end
15
+ class ErbalT < OpenStruct
16
+ def render(template)
17
+ ERB.new(template).result(binding)
18
+ end
19
+ end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module Fastlane
2
- VERSION = '1.5.0'
2
+ VERSION = '1.6.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-20 00:00:00.000000000 Z
11
+ date: 2015-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -150,20 +150,34 @@ dependencies:
150
150
  - - ~>
151
151
  - !ruby/object:Gem::Version
152
152
  version: 1.0.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: rest-client
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ~>
158
+ - !ruby/object:Gem::Version
159
+ version: 1.8.0
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ~>
165
+ - !ruby/object:Gem::Version
166
+ version: 1.8.0
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: fastlane_core
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
171
  - - '>='
158
172
  - !ruby/object:Gem::Version
159
- version: 0.7.6
173
+ version: 0.8.0
160
174
  type: :runtime
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
178
  - - '>='
165
179
  - !ruby/object:Gem::Version
166
- version: 0.7.6
180
+ version: 0.8.0
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: deliver
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -240,14 +254,14 @@ dependencies:
240
254
  requirements:
241
255
  - - '>='
242
256
  - !ruby/object:Gem::Version
243
- version: 0.8.0
257
+ version: 0.9.0
244
258
  type: :runtime
245
259
  prerelease: false
246
260
  version_requirements: !ruby/object:Gem::Requirement
247
261
  requirements:
248
262
  - - '>='
249
263
  - !ruby/object:Gem::Version
250
- version: 0.8.0
264
+ version: 0.9.0
251
265
  - !ruby/object:Gem::Dependency
252
266
  name: produce
253
267
  requirement: !ruby/object:Gem::Requirement
@@ -388,6 +402,7 @@ files:
388
402
  - lib/assets/AppfileTemplate
389
403
  - lib/assets/FastfileTemplate
390
404
  - lib/assets/custom_action_template.rb
405
+ - lib/assets/mailgun_html_template.erb
391
406
  - lib/assets/s3_html_template.erb
392
407
  - lib/assets/s3_plist_template.erb
393
408
  - lib/assets/s3_version_template.erb
@@ -397,6 +412,7 @@ files:
397
412
  - lib/fastlane/actions/README.md
398
413
  - lib/fastlane/actions/actions_helper.rb
399
414
  - lib/fastlane/actions/add_git_tag.rb
415
+ - lib/fastlane/actions/backup_file.rb
400
416
  - lib/fastlane/actions/cert.rb
401
417
  - lib/fastlane/actions/chatwork.rb
402
418
  - lib/fastlane/actions/clean_build_artifacts.rb
@@ -411,7 +427,6 @@ files:
411
427
  - lib/fastlane/actions/fastlane_version.rb
412
428
  - lib/fastlane/actions/frameit.rb
413
429
  - lib/fastlane/actions/gcovr.rb
414
- - lib/fastlane/actions/hall.rb
415
430
  - lib/fastlane/actions/hg_add_tag.rb
416
431
  - lib/fastlane/actions/hg_commit_version_bump.rb
417
432
  - lib/fastlane/actions/hg_ensure_clean_status.rb
@@ -433,6 +448,7 @@ files:
433
448
  - lib/fastlane/actions/register_devices.rb
434
449
  - lib/fastlane/actions/reset_git_repo.rb
435
450
  - lib/fastlane/actions/resign.rb
451
+ - lib/fastlane/actions/restore_file.rb
436
452
  - lib/fastlane/actions/s3.rb
437
453
  - lib/fastlane/actions/say.rb
438
454
  - lib/fastlane/actions/set_build_number_repository.rb
@@ -456,6 +472,7 @@ files:
456
472
  - lib/fastlane/core_ext/string.rb
457
473
  - lib/fastlane/dependency_checker.rb
458
474
  - lib/fastlane/docs_generator.rb
475
+ - lib/fastlane/erb_template_helper.rb
459
476
  - lib/fastlane/fast_file.rb
460
477
  - lib/fastlane/fastlane_folder.rb
461
478
  - lib/fastlane/junit_generator.rb
@@ -1,98 +0,0 @@
1
- module Fastlane
2
- module Actions
3
- module SharedValues
4
- end
5
-
6
- class HallAction < Action
7
- def self.run(options)
8
-
9
- require 'net/http'
10
- require 'uri'
11
-
12
- group_api_token = options[:group_api_token]
13
-
14
- title = options[:title]
15
- message = options[:message]
16
- picture = options[:picture]
17
-
18
- body = {"title" => title,
19
- "message" => message,
20
- "picture" => picture}
21
-
22
- uri = URI.parse("https://hall.com/api/1/services/generic/#{group_api_token}")
23
- http = Net::HTTP.new(uri.host, uri.port)
24
- http.use_ssl = true
25
- req = Net::HTTP::Post.new(uri.path, initheader = {"Content-Type" =>"application/json",
26
- "Accept" => "application/json"})
27
- req.body = body.to_json
28
-
29
- return [uri.to_s, body] if Helper.is_test? # tests will verify the url and body
30
-
31
- res = http.request(req)
32
- check_response_code(res)
33
-
34
- Helper.log.info "Posted message to Hall 🎯."
35
- end
36
-
37
- def self.check_response_code(response)
38
- case response.code.to_i
39
- when 200, 201, 204
40
- true
41
- when 404
42
- raise "Not found".red
43
- when 401
44
- raise "Access denied".red
45
- else
46
- raise "Unexpected #{response.code}".red
47
- end
48
- end
49
-
50
- #####################################################
51
- # @!group Documentation
52
- #####################################################
53
-
54
- def self.description
55
- "Post a message to Hall (https://hall.com/)"
56
- end
57
-
58
- def self.available_options
59
- [
60
- FastlaneCore::ConfigItem.new(key: :title,
61
- env_name: "FL_HALL_TITLE",
62
- description: "The title for the message. Plain text, HTML tags will be stripped",
63
- default_value: 'fastlane'),
64
- FastlaneCore::ConfigItem.new(key: :message,
65
- env_name: "FL_HALL_MESSAGE",
66
- description: "The message to post on the Hall group. May contain a restricted set of HTML tags (https://hall.com/docs/integrations/generic)",
67
- default_value: ''),
68
- FastlaneCore::ConfigItem.new(key: :picture,
69
- env_name: "FL_HALL_PICTURE",
70
- description: "URL to an image file, which will be displayed next to your notification message",
71
- default_value: 'https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png'),
72
- FastlaneCore::ConfigItem.new(key: :group_api_token,
73
- env_name: "HALL_GROUP_API_TOKEN",
74
- description: "Hall Group API Token",
75
- verify_block: Proc.new do |value|
76
- unless value.to_s.length > 0
77
- Helper.log.fatal "Please add 'ENV[\"HALL_GROUP_API_TOKEN\"] = \"your token\"' to your Fastfile's `before_all` section.".red
78
- raise 'No HALL_GROUP_API_TOKEN given.'.red
79
- end
80
- end)
81
- ]
82
- end
83
-
84
- def self.output
85
- [
86
- ]
87
- end
88
-
89
- def self.author
90
- 'eytanbiala'
91
- end
92
-
93
- def self.is_supported?(platform)
94
- true
95
- end
96
- end
97
- end
98
- end