ios_build_kit 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,54 @@
1
+ module BuildKit
2
+
3
+ module Tasks
4
+
5
+ def self.run_tests runner, task_opts
6
+ task = RunTestsTask.new({ runner: runner, opts: task_opts })
7
+ task.run!
8
+ end
9
+
10
+ private
11
+
12
+ class RunTestsTask < BuildKitTask
13
+
14
+ attr_reader :output
15
+
16
+ def run!
17
+ run_command!
18
+ complete_task!
19
+ end
20
+
21
+ private
22
+
23
+ def assert_requirements
24
+ BuildKit::Utilities::Assertions.assert_required_config [:workspace, :scheme], @runner
25
+ BuildKit::Utilities::Assertions.assert_files_exist [@config.workspace]
26
+ end
27
+
28
+ def build_command
29
+ workspace_arg = "-workspace \"#{@config.workspace}\""
30
+ scheme_arg = "-scheme \"#{@config.scheme}\""
31
+ "xctool #{workspace_arg} #{scheme_arg} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO test -freshSimulator -parallelize"
32
+ end
33
+
34
+ def run_command!
35
+ command = build_command
36
+ @output = %x[#{command}]
37
+ puts @output if @task_options[:log]
38
+ end
39
+
40
+ def tests_passed?
41
+ @output.include? "TEST SUCCEEDED"
42
+ end
43
+
44
+ def complete_task!
45
+ runner.store[:tests_passed] = tests_passed?
46
+ message = (tests_passed?) ? "run_tests completed successfully, tests all passed" : "run_tests completed successfully, tests failed"
47
+ @runner.task_completed! :run_tests, message, @output
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,57 @@
1
+ module BuildKit
2
+
3
+ module Tasks
4
+
5
+ def self.xcode_build runner, task_opts
6
+ task = XcodeBuildTask.new({ runner: runner, opts: task_opts })
7
+ task.run!
8
+ end
9
+
10
+ private
11
+
12
+ class XcodeBuildTask < BuildKitTask
13
+
14
+ attr_reader :output
15
+
16
+ def run!
17
+ run_command!
18
+ complete_task!
19
+ end
20
+
21
+ private
22
+
23
+ def assert_requirements
24
+ BuildKit::Utilities::Assertions.assert_required_config [:app_name, :workspace, :sdk, :build_configuration, :build_dir, :scheme], @runner
25
+ BuildKit::Utilities::Assertions.assert_files_exist [@config.workspace, @config.build_dir]
26
+ end
27
+
28
+ def build_command
29
+ workspace_arg = "-workspace \"#{@config.workspace}\""
30
+ sdk_arg = "-sdk \"#{@config.sdk}\""
31
+ scheme_arg = "-scheme \"#{@config.scheme}\""
32
+ configuration_arg = "-configuration \"#{@config.build_configuration}\""
33
+ build_dir_arg = "CONFIGURATION_BUILD_DIR=\"#{@config.build_dir}\""
34
+ "xctool #{workspace_arg} #{sdk_arg} #{scheme_arg} #{configuration_arg} #{build_dir_arg} build"
35
+ end
36
+
37
+ def run_command!
38
+ command = build_command
39
+ @output = %x[#{command}]
40
+ puts @output if @task_options[:log]
41
+ end
42
+
43
+ def build_succeeded?
44
+ @output.include? "BUILD SUCCEEDED"
45
+ end
46
+
47
+ def complete_task!
48
+ @runner.store[:xcode_build_succeeded] = build_succeeded?
49
+ message = (build_succeeded?) ? "xcode_build completed, project built successfully" : "xcode_build completed, but the project failed to build"
50
+ @runner.task_completed! :xcode_build, message, @output
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
@@ -0,0 +1,29 @@
1
+ module BuildKit
2
+
3
+ module Utilities
4
+
5
+ module Assertions
6
+
7
+ def self.assert_files_exist files
8
+ files.each do |file|
9
+ BuildKit::Utilities::Console.terminate_with_err "Missing File: #{file} does not exist" unless File.exists? file
10
+ end
11
+ end
12
+
13
+ def self.assert_required_config req_keys, runner
14
+ req_keys.each do |k|
15
+ runner.terminate_with_err "Missing Configuration: #{k} is required to run #{runner.tasks[:running]}" if runner.config[k].nil?
16
+ end
17
+ end
18
+
19
+ def self.assert_tasks_completed req_tasks, runner
20
+ req_tasks.each do |t|
21
+ runner.terminate_with_err "Task Required: #{t.to_s} should be completed to run #{runner.tasks[:running]}" unless runner.has_completed_task? t
22
+ end
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,28 @@
1
+ module BuildKit
2
+
3
+ module Utilities
4
+
5
+ module Console
6
+
7
+ def self.header_msg h
8
+ puts "\n\n" + h + "\n" + ("-" * h.length) + "\n"
9
+ end
10
+
11
+ def self.warning_msg m
12
+ puts "\nNotice:" + m + "\n"
13
+ end
14
+
15
+ def self.success_msg m
16
+ puts "\n#{m}\n"
17
+ end
18
+
19
+ def self.terminate_with_err err
20
+ puts "\n💣 Terminating with error: #{err}\n\n"
21
+ exit
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,28 @@
1
+ module BuildKit
2
+
3
+ Dir["./*.rb"].each {|file| require file }
4
+
5
+ module Utilities
6
+
7
+ module PlistPal
8
+
9
+ def self.read_value_in_plist plist, key
10
+ %x[/usr/libexec/PlistBuddy -c "Print #{key}" \"#{plist}\"]
11
+ end
12
+
13
+ def self.write_value_in_plist plist, key, value
14
+ plist_buddy_command = "\"Set :#{key} #{value}\" \"#{plist}\""
15
+ system "/usr/libexec/PlistBuddy -c #{plist_buddy_command}"
16
+ end
17
+
18
+ def self.brute_replace_in_plist plist, value, new_value
19
+ original = File.read plist
20
+ updated = original.gsub value, new_value
21
+ File.open(plist, "w") { |file| file.write updated }
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,21 @@
1
+ module BuildKit
2
+
3
+ require 'json'
4
+
5
+ module Utilities
6
+
7
+ module Reporter
8
+
9
+ def self.create_report runner
10
+ to_write = { time: Time.now.to_s, config: runner.config.to_h, preferences: runner.preferences.to_h, runtime_store: runner.store, outputs: {} }
11
+ runner.tasks[:run].each { |task| to_write[:outputs][task.keys.first] = runner.outputs[task.keys.first] }
12
+ file_name = "#{runner.preferences.reports}report-#{Time.now.to_i}.json"
13
+ File.open(file_name, 'w') { |f| f.write to_write.to_json }
14
+ file_name
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,29 @@
1
+ module BuildKit
2
+
3
+ module Utilities
4
+
5
+ module VersionNumber
6
+
7
+ def self.plist_version_number plist
8
+ version = BuildKit::Utilities::PlistPal.read_value_in_plist plist, "CFBundleShortVersionString"
9
+ build = BuildKit::Utilities::PlistPal.read_value_in_plist(plist, "CFBundleVersion").to_i
10
+ hash_from_version_and_build version, build
11
+ end
12
+
13
+ def self.hash_from_version_and_build version, build
14
+ hash = {}
15
+ split_version = version.split(".").map { |s| s.to_i }
16
+ hash[:major] = split_version[0].nil? ? 0 : split_version[0]
17
+ hash[:minor] = split_version[1].nil? ? 0 : split_version[1]
18
+ hash[:revision] = split_version[2].nil? ? 0 : split_version[2]
19
+ hash[:major_minor_revision] = [hash[:major], hash[:minor], hash[:revision]].join(".")
20
+ hash[:build] = build
21
+ hash[:full] = [hash[:major_minor_revision], hash[:build]].join(".")
22
+ hash
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,3 @@
1
+ module BuildKit
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ios_build_kit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Adam Waite
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: commander
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.8'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: paint
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.8'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: nomad-cli
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.2
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: rmagick
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '2.13'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '2.13'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: iOS Build Tool CLI - Increment version • Decorate icon • Build app •
126
+ Run unit tests • Create ipa artefact
127
+ email: adam@adamjwaite.co.uk
128
+ executables:
129
+ - buildkit
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ./Gemfile
134
+ - ./Gemfile.lock
135
+ - ./ios_build_kit-0.0.1.gem
136
+ - ./ios_build_kit.gemspec
137
+ - ./lib/ios_build_kit/task.rb
138
+ - ./lib/ios_build_kit/task_configuration.rb
139
+ - ./lib/ios_build_kit/task_runner.rb
140
+ - ./lib/ios_build_kit/tasks/create_ipa.rb
141
+ - ./lib/ios_build_kit/tasks/decorate_icon.rb
142
+ - ./lib/ios_build_kit/tasks/increment_version.rb
143
+ - ./lib/ios_build_kit/tasks/run_tests.rb
144
+ - ./lib/ios_build_kit/tasks/xcode_build.rb
145
+ - ./lib/ios_build_kit/utils/assertions.rb
146
+ - ./lib/ios_build_kit/utils/console.rb
147
+ - ./lib/ios_build_kit/utils/plist_pal.rb
148
+ - ./lib/ios_build_kit/utils/report_creator.rb
149
+ - ./lib/ios_build_kit/utils/version_number.rb
150
+ - ./lib/ios_build_kit/version.rb
151
+ - ./lib/ios_build_kit.rb
152
+ - ./LICENSE
153
+ - ./Rakefile
154
+ - ./README.md
155
+ - ./README.rdoc
156
+ - bin/buildkit
157
+ homepage: https://github.com/adamwaite/iOS-Build-Kit
158
+ licenses: []
159
+ metadata: {}
160
+ post_install_message:
161
+ rdoc_options: []
162
+ require_paths:
163
+ - lib
164
+ required_ruby_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - '>='
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubyforge_project:
176
+ rubygems_version: 2.0.8
177
+ signing_key:
178
+ specification_version: 4
179
+ summary: iOS Build Kit
180
+ test_files: []
181
+ has_rdoc: