thrust 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/config/thrust_example.yml +1 -10
- data/lib/tasks/autotag.rake +3 -2
- data/lib/tasks/{testflight.rake → build_ipa.rake} +3 -3
- data/lib/thrust.rb +2 -3
- data/lib/thrust/app_config.rb +0 -9
- data/lib/thrust/config_loader.rb +1 -1
- data/lib/thrust/{deploy.rb → ipa_builder.rb} +6 -10
- data/lib/thrust/{deploy_provider.rb → ipa_builder_provider.rb} +2 -4
- data/lib/thrust/tasks.rb +1 -1
- data/lib/thrust/xcode_tools.rb +2 -1
- metadata +9 -12
- data/lib/thrust/testflight.rb +0 -49
- data/lib/thrust/testflight_credentials.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49104e9b67fae157899bc8c13c55d9f05de51639
|
4
|
+
data.tar.gz: 30e80bbd2a0dfa458347b2d04f4b3ad3a3c82028
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca03bbb26bf562bc0354f0a93568f416dab0a95e141d2bdb92b30d0e453e6ca04cd5bd7b8fc5ffb439a64657aa8e8594fe4da5d621d827f5d8005c6227451f30
|
7
|
+
data.tar.gz: 188c251925c482ac4a81050cb007558f8d4d66d340ab89aa65d1b606347a15ee408d643bd0b78a35859591abd19a58c22300444e416a3fd6a9fc5fc51a7d64d9
|
@@ -1,4 +1,4 @@
|
|
1
|
-
thrust_version: 0.
|
1
|
+
thrust_version: 0.7
|
2
2
|
project_name: My Great Project # do not use if building with an xcode workspace
|
3
3
|
# workspace_name: My Workspace # use if building with an xcode workspace
|
4
4
|
# path_to_xcodeproj: 'App/MyApp.xcodeproj' # use if xcodeproj is not in the same directory as this yaml file. Optional.
|
@@ -6,15 +6,8 @@ app_name: My Great App
|
|
6
6
|
distribution_certificate: 'Name of Distribution Signing Certificate'
|
7
7
|
#ios_sim_path: '/path/to/ios-sim' # Optional. Use to prefer a specific ios-sim binary (e.g. within project directory) over a system-installed version (homebrew)
|
8
8
|
|
9
|
-
testflight:
|
10
|
-
api_token: 'testflight api token' # To find your App Token, follow the instructions at: http://help.testflightapp.com/customer/portal/articles/829956-what-does-the-api-token-do-
|
11
|
-
team_token: 'testflight team token' # To find your Team Token, follow the instructions at: http://help.testflightapp.com/customer/portal/articles/829942-how-do-i-find-my-team-token-
|
12
|
-
|
13
9
|
deployment_targets:
|
14
10
|
staging:
|
15
|
-
distribution_list: Developers # This is the name of a TestFlight distribution list
|
16
|
-
notify: true # Whether to notify people on the distribution list about this deployment
|
17
|
-
note_generation_method: autotag # If you set this value, it will auto-generate the deploy notes from the commit history. Optional.
|
18
11
|
target: MyGreatAppTarget # Name of the build target. Optional, defaults to app name.
|
19
12
|
build_configuration: Release
|
20
13
|
provisioning_search_query: 'query to find Provisioning Profile' # Otherwise, it will use the first provisioning profile in ~/Library/MobileDevice/Provisioning Profiles/
|
@@ -22,8 +15,6 @@ deployment_targets:
|
|
22
15
|
tag: ci # Deploys latest commit with the tag. Leave blank to deploy from master.
|
23
16
|
|
24
17
|
demo:
|
25
|
-
distribution_list: Beta Testers
|
26
|
-
notify: true
|
27
18
|
build_configuration: Demo
|
28
19
|
provisioning_search_query: 'query to find Provisioning Profile'
|
29
20
|
|
data/lib/tasks/autotag.rake
CHANGED
@@ -3,8 +3,9 @@ require_relative '../thrust'
|
|
3
3
|
@app_config = Thrust::ConfigLoader.load_configuration(Dir.getwd, File.join(Dir.getwd, 'thrust.yml'))
|
4
4
|
|
5
5
|
namespace :autotag do
|
6
|
-
|
7
|
-
|
6
|
+
desc 'Create a tag for the given deployment environment'
|
7
|
+
task :create, :environment do |_, args|
|
8
|
+
Thrust::Tasks::Autotag::Create.new.run(args[:environment])
|
8
9
|
end
|
9
10
|
|
10
11
|
desc 'Show the commit that is currently deployed to each environment'
|
@@ -2,11 +2,11 @@ require_relative '../thrust'
|
|
2
2
|
|
3
3
|
@app_config = Thrust::ConfigLoader.load_configuration(Dir.getwd, File.join(Dir.getwd, 'thrust.yml'))
|
4
4
|
|
5
|
-
namespace :
|
5
|
+
namespace :build_ipa do
|
6
6
|
@app_config.deployment_targets.each do |task_name, deployment_config|
|
7
|
-
desc "
|
7
|
+
desc "Build an .ipa file for deployment to #{task_name}"
|
8
8
|
task task_name do |_, _|
|
9
|
-
Thrust::
|
9
|
+
Thrust::IPABuilderProvider.new.instance(@app_config, deployment_config, task_name).run
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
data/lib/thrust.rb
CHANGED
@@ -2,13 +2,12 @@ require 'thrust/config_loader'
|
|
2
2
|
require 'thrust/executor'
|
3
3
|
require 'thrust/execution_helper'
|
4
4
|
require 'thrust/git'
|
5
|
-
require 'thrust/testflight'
|
6
5
|
require 'thrust/user_prompt'
|
7
6
|
require 'thrust/agv_tool'
|
8
7
|
require 'thrust/ios_spec_launcher'
|
9
8
|
require 'thrust/osx_spec_launcher'
|
10
|
-
require 'thrust/
|
11
|
-
require 'thrust/
|
9
|
+
require 'thrust/ipa_builder'
|
10
|
+
require 'thrust/ipa_builder_provider'
|
12
11
|
require 'thrust/xcode_tools'
|
13
12
|
require 'thrust/xcode_tools_provider'
|
14
13
|
require 'thrust/scheme_parser'
|
data/lib/thrust/app_config.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require_relative 'deployment_target'
|
2
2
|
require_relative 'spec_target'
|
3
|
-
require_relative 'testflight_credentials'
|
4
3
|
|
5
4
|
module Thrust
|
6
5
|
class AppConfig
|
@@ -10,7 +9,6 @@ module Thrust
|
|
10
9
|
:ios_sim_path,
|
11
10
|
:spec_targets,
|
12
11
|
:project_name,
|
13
|
-
:testflight,
|
14
12
|
:thrust_version,
|
15
13
|
:workspace_name,
|
16
14
|
:path_to_xcodeproj,
|
@@ -28,7 +26,6 @@ module Thrust
|
|
28
26
|
@spec_targets = generate_spec_targets(attributes['spec_targets'])
|
29
27
|
@spec_directories = generate_spec_directories(attributes['spec_directories'])
|
30
28
|
@project_name = attributes['project_name']
|
31
|
-
@testflight = generate_testflight_credentials(attributes['testflight'])
|
32
29
|
@thrust_version = attributes['thrust_version'].to_s
|
33
30
|
@workspace_name = attributes['workspace_name']
|
34
31
|
@path_to_xcodeproj = attributes['path_to_xcodeproj']
|
@@ -61,11 +58,5 @@ module Thrust
|
|
61
58
|
existing
|
62
59
|
end
|
63
60
|
end
|
64
|
-
|
65
|
-
def generate_testflight_credentials(testflight_credentials_hash)
|
66
|
-
return if testflight_credentials_hash.nil?
|
67
|
-
|
68
|
-
TestflightCredentials.new(testflight_credentials_hash)
|
69
|
-
end
|
70
61
|
end
|
71
62
|
end
|
data/lib/thrust/config_loader.rb
CHANGED
@@ -9,7 +9,7 @@ module Thrust
|
|
9
9
|
class MalformedConfigError < ConfigError ; end
|
10
10
|
class InvalidVersionConfigError < ConfigError ; end
|
11
11
|
|
12
|
-
THRUST_VERSION = '0.
|
12
|
+
THRUST_VERSION = '0.7'
|
13
13
|
|
14
14
|
def self.load_configuration(relative_project_root, config_file, out = STDERR)
|
15
15
|
begin
|
@@ -1,11 +1,10 @@
|
|
1
1
|
module Thrust
|
2
|
-
class
|
3
|
-
def initialize(out, xcode_tools, agv_tool, git,
|
2
|
+
class IPABuilder
|
3
|
+
def initialize(out, xcode_tools, agv_tool, git, app_config, deployment_config, deployment_target)
|
4
4
|
@out = out
|
5
5
|
@xcode_tools = xcode_tools
|
6
6
|
@agv_tool = agv_tool
|
7
7
|
@git = git
|
8
|
-
@testflight = testflight
|
9
8
|
@app_config = app_config
|
10
9
|
@deployment_config = deployment_config
|
11
10
|
@deployment_target = deployment_target
|
@@ -32,14 +31,11 @@ module Thrust
|
|
32
31
|
|
33
32
|
ipa_file = @xcode_tools.cleanly_create_ipa(target, app_name, @app_config.distribution_certificate, @deployment_config.provisioning_search_query)
|
34
33
|
|
35
|
-
dsym_path = "#{@xcode_tools.build_configuration_directory}/#{app_name}.app.dSYM"
|
36
|
-
dsym_path = nil unless File.exist?(dsym_path)
|
37
|
-
|
38
|
-
autogenerate_notes = @deployment_config.note_generation_method == 'autotag'
|
39
|
-
@testflight.upload(ipa_file, @deployment_config.notify, @deployment_config.distribution_list, autogenerate_notes, @deployment_target, dsym_path)
|
40
|
-
|
41
|
-
@git.create_tag(@deployment_target)
|
42
34
|
@git.reset
|
35
|
+
|
36
|
+
@out.puts "\n\n"
|
37
|
+
@out.puts "Successfully built .ipa:".green
|
38
|
+
@out.puts ipa_file
|
43
39
|
rescue Exception => e
|
44
40
|
@out.puts "\n\n"
|
45
41
|
@out.puts e.message.red
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Thrust
|
2
|
-
class
|
2
|
+
class IPABuilderProvider
|
3
3
|
def instance(app_config, deployment_config, deployment_target)
|
4
4
|
stdout = $stdout
|
5
5
|
thrust_executor = Thrust::Executor.new
|
@@ -8,10 +8,8 @@ module Thrust
|
|
8
8
|
xcode_tools = Thrust::XcodeToolsProvider.new.instance(stdout, build_configuration, app_config.build_directory, tools_options)
|
9
9
|
git = Thrust::Git.new(stdout, thrust_executor)
|
10
10
|
agv_tool = Thrust::AgvTool.new(thrust_executor, git)
|
11
|
-
testflight_config = app_config.testflight
|
12
|
-
testflight = Thrust::Testflight.new(thrust_executor, stdout, $stdin, testflight_config.api_token, testflight_config.team_token)
|
13
11
|
|
14
|
-
Thrust::
|
12
|
+
Thrust::IPABuilder.new(stdout, xcode_tools, agv_tool, git, app_config, deployment_config, deployment_target)
|
15
13
|
end
|
16
14
|
end
|
17
15
|
end
|
data/lib/thrust/tasks.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
load File.expand_path('../../tasks/cedar.rake', __FILE__)
|
2
2
|
load File.expand_path('../../tasks/autotag.rake', __FILE__)
|
3
|
-
load File.expand_path('../../tasks/testflight.rake', __FILE__)
|
4
3
|
load File.expand_path('../../tasks/version.rake', __FILE__)
|
4
|
+
load File.expand_path('../../tasks/build_ipa.rake', __FILE__)
|
data/lib/thrust/xcode_tools.rb
CHANGED
@@ -125,6 +125,7 @@ module Thrust
|
|
125
125
|
].join(' ')
|
126
126
|
@thrust_executor.system_or_exit(package_command)
|
127
127
|
|
128
|
+
@thrust_executor.system_or_exit("rm -rf #{build_configuration_directory}/Payload")
|
128
129
|
@thrust_executor.system_or_exit("cd '#{build_configuration_directory}' && unzip '#{app_name}.ipa'")
|
129
130
|
@thrust_executor.system_or_exit("/usr/bin/codesign --verify --force --preserve-metadata=identifier,entitlements --sign '#{signing_identity}' '#{build_configuration_directory}/Payload/#{app_name}.app'")
|
130
131
|
@thrust_executor.system_or_exit("cd '#{build_configuration_directory}' && zip -qr '#{app_name}.ipa' 'Payload'")
|
@@ -153,7 +154,7 @@ module Thrust
|
|
153
154
|
end
|
154
155
|
|
155
156
|
def project_or_workspace_flag
|
156
|
-
@workspace_name ? "-workspace #{@workspace_name}.xcworkspace" : "-project #{@project_name}.xcodeproj"
|
157
|
+
@workspace_name ? "-workspace \"#{@workspace_name}.xcworkspace\"" : "-project \"#{@project_name}.xcodeproj\""
|
157
158
|
end
|
158
159
|
end
|
159
160
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thrust
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Levine
|
@@ -27,7 +27,7 @@ authors:
|
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2015-
|
30
|
+
date: 2015-02-27 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: colorize
|
@@ -77,14 +77,14 @@ dependencies:
|
|
77
77
|
requirements:
|
78
78
|
- - "~>"
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: 2.4
|
80
|
+
version: '2.4'
|
81
81
|
type: :runtime
|
82
82
|
prerelease: false
|
83
83
|
version_requirements: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
85
|
- - "~>"
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version: 2.4
|
87
|
+
version: '2.4'
|
88
88
|
- !ruby/object:Gem::Dependency
|
89
89
|
name: fakefs
|
90
90
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,8 +128,8 @@ dependencies:
|
|
128
128
|
- !ruby/object:Gem::Version
|
129
129
|
version: '0.7'
|
130
130
|
description: Thrust provides a collection of rake tasks for iOS projects. These include
|
131
|
-
tasks for running Cedar test suites and for
|
132
|
-
email:
|
131
|
+
tasks for running Cedar test suites and for building iOS app archives for deployment.
|
132
|
+
email: avonderhaar@pivotal.io
|
133
133
|
executables:
|
134
134
|
- thrust
|
135
135
|
extensions: []
|
@@ -138,21 +138,21 @@ files:
|
|
138
138
|
- bin/thrust
|
139
139
|
- lib/config/thrust_example.yml
|
140
140
|
- lib/tasks/autotag.rake
|
141
|
+
- lib/tasks/build_ipa.rake
|
141
142
|
- lib/tasks/cedar.rake
|
142
|
-
- lib/tasks/testflight.rake
|
143
143
|
- lib/tasks/version.rake
|
144
144
|
- lib/thrust.rb
|
145
145
|
- lib/thrust/agv_tool.rb
|
146
146
|
- lib/thrust/app_config.rb
|
147
147
|
- lib/thrust/cedar_results_parser.rb
|
148
148
|
- lib/thrust/config_loader.rb
|
149
|
-
- lib/thrust/deploy.rb
|
150
|
-
- lib/thrust/deploy_provider.rb
|
151
149
|
- lib/thrust/deployment_target.rb
|
152
150
|
- lib/thrust/execution_helper.rb
|
153
151
|
- lib/thrust/executor.rb
|
154
152
|
- lib/thrust/git.rb
|
155
153
|
- lib/thrust/ios_spec_launcher.rb
|
154
|
+
- lib/thrust/ipa_builder.rb
|
155
|
+
- lib/thrust/ipa_builder_provider.rb
|
156
156
|
- lib/thrust/osx_spec_launcher.rb
|
157
157
|
- lib/thrust/scheme_parser.rb
|
158
158
|
- lib/thrust/spec_target.rb
|
@@ -164,8 +164,6 @@ files:
|
|
164
164
|
- lib/thrust/tasks/nof.rb
|
165
165
|
- lib/thrust/tasks/spec_runner.rb
|
166
166
|
- lib/thrust/tasks/trim.rb
|
167
|
-
- lib/thrust/testflight.rb
|
168
|
-
- lib/thrust/testflight_credentials.rb
|
169
167
|
- lib/thrust/user_prompt.rb
|
170
168
|
- lib/thrust/xcode_tools.rb
|
171
169
|
- lib/thrust/xcode_tools_provider.rb
|
@@ -194,4 +192,3 @@ signing_key:
|
|
194
192
|
specification_version: 4
|
195
193
|
summary: Thrust is a collection of rake tasks for iOS development and deployment
|
196
194
|
test_files: []
|
197
|
-
has_rdoc:
|
data/lib/thrust/testflight.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
module Thrust
|
2
|
-
class Testflight
|
3
|
-
UploadFailed = Class.new(StandardError)
|
4
|
-
|
5
|
-
def initialize(thrust_executor, out, input, api_token, team_token)
|
6
|
-
@thrust_executor = thrust_executor
|
7
|
-
@out = out
|
8
|
-
@in = input
|
9
|
-
@git = Thrust::Git.new(@out, @thrust_executor)
|
10
|
-
@api_token = api_token
|
11
|
-
@team_token = team_token
|
12
|
-
end
|
13
|
-
|
14
|
-
def upload(package_file, notify, distribution_list, autogenerate_deploy_notes, deployment_target, dsym_path = nil)
|
15
|
-
if dsym_path
|
16
|
-
@out.puts 'Zipping dSYM...'
|
17
|
-
zipped_dsym_path = "#{dsym_path}.zip"
|
18
|
-
@thrust_executor.system_or_exit "zip -r -T -y '#{zipped_dsym_path}' '#{dsym_path}'"
|
19
|
-
@out.puts 'Done!'
|
20
|
-
end
|
21
|
-
|
22
|
-
if autogenerate_deploy_notes
|
23
|
-
message_file_path = @git.generate_notes_for_deployment(deployment_target)
|
24
|
-
else
|
25
|
-
message_file_path = Thrust::UserPrompt.get_user_input('Deploy Notes: ', @out, @in)
|
26
|
-
end
|
27
|
-
|
28
|
-
@out.puts 'Uploading to TestFlight...'.green
|
29
|
-
|
30
|
-
testflight_response = @thrust_executor.capture_output_from_system(['curl -sw "thrust_testflight_status_code:%{http_code}" http://testflightapp.com/api/builds.json',
|
31
|
-
"-F file=@#{package_file}",
|
32
|
-
("-F dsym=@#{zipped_dsym_path}" if dsym_path),
|
33
|
-
"-F api_token='#{(ENV['TESTFLIGHT_API_TOKEN'] || @api_token)}'",
|
34
|
-
"-F team_token='#{@team_token}'",
|
35
|
-
"-F notes=@#{message_file_path}",
|
36
|
-
"-F notify=#{(ENV['NOTIFY'] || notify).to_s.downcase.capitalize}",
|
37
|
-
("-F distribution_lists='#{distribution_list}'" if distribution_list)
|
38
|
-
].compact.join(' '))
|
39
|
-
|
40
|
-
status_code = testflight_response.match(/thrust_testflight_status_code:(\d+)/).captures.first
|
41
|
-
if status_code.to_i >= 400
|
42
|
-
error_message = testflight_response.gsub(/thrust_testflight_status_code:(\d+)/, '')
|
43
|
-
raise(UploadFailed, "******** Upload Failed: #{error_message} ********")
|
44
|
-
else
|
45
|
-
@out.puts 'Finished uploading to TestFlight'.green
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|