ios_build_kit 0.0.1

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.
@@ -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: