xcode 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -11,7 +11,8 @@ Jeweler::Tasks.new do |gem|
11
11
  gem.license = 'MIT'
12
12
  gem.authors = ['Ivan Kuchin']
13
13
  gem.add_runtime_dependency 'plist'
14
- gem.add_runtime_dependency 'fspath'
14
+ gem.add_runtime_dependency 'net-github-upload'
15
+ gem.add_runtime_dependency 'keychain_services'
15
16
  gem.add_development_dependency 'jeweler', '~> 1.5.2'
16
17
  gem.add_development_dependency 'rake-gem-ghost'
17
18
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/lib/xcode/project.rb CHANGED
@@ -1,15 +1,15 @@
1
- require 'fspath'
2
-
3
1
  module Xcode
4
2
  class Project
5
3
  autoload :PlistChanger, 'xcode/project/plist_changer'
6
4
  autoload :Version, 'xcode/project/version'
7
5
  autoload :Build, 'xcode/project/build'
8
6
  autoload :Config, 'xcode/project/config'
7
+ autoload :Packer, 'xcode/project/packer'
8
+ autoload :Tagger, 'xcode/project/tagger'
9
9
 
10
10
  attr_reader :path
11
11
  def initialize(path)
12
- @path = FSPath(path)
12
+ @path = Pathname(path)
13
13
  end
14
14
 
15
15
  def name
@@ -36,5 +36,13 @@ module Xcode
36
36
  def config
37
37
  Config.new(path)
38
38
  end
39
+
40
+ def packer
41
+ Packer.new(self)
42
+ end
43
+
44
+ def tagger
45
+ Tagger.new(self)
46
+ end
39
47
  end
40
48
  end
@@ -1,5 +1,3 @@
1
- require 'plist'
2
-
3
1
  module Xcode
4
2
  class Project
5
3
  class Build < PlistChanger
@@ -1,5 +1,3 @@
1
- require 'fspath'
2
-
3
1
  module Xcode
4
2
  class Project
5
3
  class Config
@@ -10,8 +8,8 @@ module Xcode
10
8
 
11
9
  attr_reader :path, :pbxproj_path, :root
12
10
  def initialize(path)
13
- @path = FSPath(path)
14
- @pbxproj_path = path / 'project.pbxproj'
11
+ @path = Pathname(path)
12
+ @pbxproj_path = path + 'project.pbxproj'
15
13
  parse
16
14
  end
17
15
 
@@ -0,0 +1,79 @@
1
+ require 'keychain'
2
+ require 'net/github-upload'
3
+
4
+ module Xcode
5
+ class Project
6
+ class Packer
7
+ attr_reader :project
8
+ def initialize(project)
9
+ @project = project
10
+ end
11
+
12
+ def pack_path
13
+ @pack_path ||= begin
14
+ pkg_dir = Pathname('pkg')
15
+ pkg_dir.mkpath
16
+ pkg_dir + "#{project.name}-#{project.version}.tbz"
17
+ end
18
+ end
19
+
20
+ def pack_description
21
+ @pack_description ||= "#{project.name} v#{project.version}"
22
+ end
23
+
24
+ def product_names
25
+ [].tap do |names|
26
+ objects = project.config.root['objects']
27
+ objects.each do |_, object|
28
+ if reference = object['productReference']
29
+ names << objects[reference]['path']
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ def products_dir
36
+ Pathname('build') + project.configuration
37
+ end
38
+
39
+ def build
40
+ arguments = %w[xcodebuild]
41
+ arguments += %W[-project #{project.path}]
42
+ arguments += %W[-configuration #{project.configuration}]
43
+ arguments += project.variables.map{ |key, value| "#{key}=#{value}" }
44
+ arguments += %w[clean build]
45
+
46
+ sh *arguments
47
+ end
48
+
49
+ def pack
50
+ if pack_path.exist?
51
+ abort "#{pack_path} already exists"
52
+ else
53
+ build
54
+
55
+ arguments = %W[tar -cjf #{pack_path.expand_path}]
56
+ arguments += product_names
57
+
58
+ Dir.chdir products_dir do
59
+ sh *arguments
60
+ end
61
+ end
62
+ end
63
+
64
+ def release
65
+ unless `git remote -v` =~ /git@github\.com:([^\/]+)\/(.+?)\.git/
66
+ abort 'can\'t find github remote'
67
+ else
68
+ login, repos = $1, $2
69
+ token = Keychain.items.find{ |item| item.label[/^github.com/] && item.account == "#{login}/token" }.password
70
+
71
+ pack
72
+
73
+ uploader = Net::GitHub::Upload.new(:login => login, :token => token)
74
+ uploader.upload(:repos => repos, :file => pack_path.to_s, :description => pack_description)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,21 @@
1
+ require 'keychain'
2
+ require 'net/github-upload'
3
+
4
+ module Xcode
5
+ class Project
6
+ class Tagger
7
+ attr_reader :project
8
+ def initialize(project)
9
+ @project = project
10
+ end
11
+
12
+ def version
13
+ @version ||= "v#{project.version}"
14
+ end
15
+
16
+ def tag
17
+ sh *%W[git tag -a #{version} -m #{"Released #{version}"}]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,3 @@
1
- require 'plist'
2
-
3
1
  module Xcode
4
2
  class Project
5
3
  class Version < PlistChanger
data/lib/xcode/tasks.rb CHANGED
@@ -1,6 +1,4 @@
1
- require 'fspath'
2
- require 'shellwords'
3
- require 'tempfile'
1
+ require 'pathname'
4
2
 
5
3
  module Xcode
6
4
  class Tasks
@@ -9,7 +7,7 @@ module Xcode
9
7
  attr_reader :project
10
8
 
11
9
  def initialize(project_name = nil, &block)
12
- project_path = FSPath("#{project_name || File.basename(Dir.pwd)}.xcodeproj")
10
+ project_path = Pathname("#{project_name || File.basename(Dir.pwd)}.xcodeproj")
13
11
  abort "project #{project_path} not found" unless project_path.directory?
14
12
  @project = Project.new(project_path)
15
13
  block.call(project)
@@ -22,39 +20,33 @@ module Xcode
22
20
 
23
21
  desc 'build'
24
22
  task :build do
25
- arguments = %w[xcodebuild]
26
- arguments += %W[-project #{project.path}]
27
- arguments += %W[-configuration #{project.configuration}]
28
- arguments += project.variables.map{ |key, value| "#{key}=#{value}" }
29
- arguments += %w[clean build]
30
-
31
- sh *arguments
23
+ packer = project.packer
24
+ if packer.build
25
+ $stderr.puts "Built #{packer.product_names.join(', ')}"
26
+ end
32
27
  end
33
28
 
34
29
  desc 'pack'
35
30
  task :pack do
36
- pkg_dir = FSPath('pkg')
37
- pkg_dir.mkpath
38
- pack_name = "#{project.name}-#{project.version}"
39
- pack_path = pkg_dir + "#{pack_name}.tbz"
40
- if pack_path.exist?
41
- abort "#{pack_path} already exists"
42
- else
43
- Rake::Task['build'].invoke
44
-
45
- products = []
46
- objects = project.config.root['objects']
47
- objects.each do |_, object|
48
- if reference = object['productReference']
49
- products << objects[reference]['path']
50
- end
51
- end
52
- products = products.map{ |product| FSPath('build') / project.configuration / product }.select(&:exist?)
31
+ packer = project.packer
32
+ if packer.pack
33
+ $stderr.puts "Packed #{packer.product_names.join(', ')} to #{packer.pack_path}"
34
+ end
35
+ end
53
36
 
54
- arguments = %W[tar -cjf #{pack_path}]
55
- arguments += products
37
+ desc 'release'
38
+ task :release do
39
+ packer = project.packer
40
+ if url = packer.release
41
+ $stderr.puts "Released #{packer.product_names.join(', ')} as #{packer.pack_path} to #{url}"
42
+ end
43
+ end
56
44
 
57
- sh *arguments
45
+ desc 'tag'
46
+ task :tag do
47
+ tagger = project.tagger
48
+ if tagger.tag
49
+ $stderr.puts "Tagged with #{tagger.version}"
58
50
  end
59
51
  end
60
52
 
data/xcode.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{xcode}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ivan Kuchin"]
@@ -30,7 +30,9 @@ Gem::Specification.new do |s|
30
30
  "lib/xcode/project/config/decomment.rb",
31
31
  "lib/xcode/project/config/io_scanner.rb",
32
32
  "lib/xcode/project/config/object_node.rb",
33
+ "lib/xcode/project/packer.rb",
33
34
  "lib/xcode/project/plist_changer.rb",
35
+ "lib/xcode/project/tagger.rb",
34
36
  "lib/xcode/project/version.rb",
35
37
  "lib/xcode/tasks.rb",
36
38
  "xcode.gemspec"
@@ -46,18 +48,21 @@ Gem::Specification.new do |s|
46
48
 
47
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
48
50
  s.add_runtime_dependency(%q<plist>, [">= 0"])
49
- s.add_runtime_dependency(%q<fspath>, [">= 0"])
51
+ s.add_runtime_dependency(%q<net-github-upload>, [">= 0"])
52
+ s.add_runtime_dependency(%q<keychain_services>, [">= 0"])
50
53
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
51
54
  s.add_development_dependency(%q<rake-gem-ghost>, [">= 0"])
52
55
  else
53
56
  s.add_dependency(%q<plist>, [">= 0"])
54
- s.add_dependency(%q<fspath>, [">= 0"])
57
+ s.add_dependency(%q<net-github-upload>, [">= 0"])
58
+ s.add_dependency(%q<keychain_services>, [">= 0"])
55
59
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
56
60
  s.add_dependency(%q<rake-gem-ghost>, [">= 0"])
57
61
  end
58
62
  else
59
63
  s.add_dependency(%q<plist>, [">= 0"])
60
- s.add_dependency(%q<fspath>, [">= 0"])
64
+ s.add_dependency(%q<net-github-upload>, [">= 0"])
65
+ s.add_dependency(%q<keychain_services>, [">= 0"])
61
66
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
62
67
  s.add_dependency(%q<rake-gem-ghost>, [">= 0"])
63
68
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcode
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ivan Kuchin
@@ -33,7 +33,7 @@ dependencies:
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: fspath
36
+ name: net-github-upload
37
37
  prerelease: false
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
@@ -47,9 +47,23 @@ dependencies:
47
47
  type: :runtime
48
48
  version_requirements: *id002
49
49
  - !ruby/object:Gem::Dependency
50
- name: jeweler
50
+ name: keychain_services
51
51
  prerelease: false
52
52
  requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: jeweler
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
53
67
  none: false
54
68
  requirements:
55
69
  - - ~>
@@ -61,11 +75,11 @@ dependencies:
61
75
  - 2
62
76
  version: 1.5.2
63
77
  type: :development
64
- version_requirements: *id003
78
+ version_requirements: *id004
65
79
  - !ruby/object:Gem::Dependency
66
80
  name: rake-gem-ghost
67
81
  prerelease: false
68
- requirement: &id004 !ruby/object:Gem::Requirement
82
+ requirement: &id005 !ruby/object:Gem::Requirement
69
83
  none: false
70
84
  requirements:
71
85
  - - ">="
@@ -75,7 +89,7 @@ dependencies:
75
89
  - 0
76
90
  version: "0"
77
91
  type: :development
78
- version_requirements: *id004
92
+ version_requirements: *id005
79
93
  description:
80
94
  email:
81
95
  executables: []
@@ -101,7 +115,9 @@ files:
101
115
  - lib/xcode/project/config/decomment.rb
102
116
  - lib/xcode/project/config/io_scanner.rb
103
117
  - lib/xcode/project/config/object_node.rb
118
+ - lib/xcode/project/packer.rb
104
119
  - lib/xcode/project/plist_changer.rb
120
+ - lib/xcode/project/tagger.rb
105
121
  - lib/xcode/project/version.rb
106
122
  - lib/xcode/tasks.rb
107
123
  - xcode.gemspec