thrust 0.6.0 → 0.7.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 +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
|