choctop 0.10.0 → 0.11.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.
- data/History.txt +12 -0
- data/Manifest.txt +0 -57
- data/README.rdoc +6 -0
- data/Rakefile +18 -22
- data/features/development.feature +1 -1
- data/features/dmg.feature +8 -0
- data/features/rake_tasks.feature +1 -0
- data/features/step_definitions/common_steps.rb +0 -9
- data/features/step_definitions/dmg_steps.rb +2 -6
- data/features/step_definitions/generator_steps.rb +13 -2
- data/features/step_definitions/remote_steps.rb +5 -5
- data/features/support/env.rb +10 -3
- data/lib/choctop.rb +41 -12
- data/lib/choctop/appcast.rb +17 -4
- data/lib/choctop/dmg.rb +38 -6
- data/spec/choctop_spec.rb +30 -2
- metadata +16 -95
- data/features/fixtures/App With Whitespace/App With Whitespace.xcodeproj/TemplateIcon.icns +0 -0
- data/features/fixtures/App With Whitespace/App With Whitespace.xcodeproj/drnic.mode1v3 +0 -1360
- data/features/fixtures/App With Whitespace/App With Whitespace.xcodeproj/drnic.pbxuser +0 -108
- data/features/fixtures/App With Whitespace/App With Whitespace.xcodeproj/project.pbxproj +0 -276
- data/features/fixtures/App With Whitespace/App With Whitespace_Prefix.pch +0 -7
- data/features/fixtures/App With Whitespace/English.lproj/InfoPlist.strings +0 -0
- data/features/fixtures/App With Whitespace/English.lproj/MainMenu.xib +0 -3034
- data/features/fixtures/App With Whitespace/Info.plist +0 -30
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/categories.pbxbtree +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/cdecls.pbxbtree +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/decls.pbxbtree +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/files.pbxbtree +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/imports.pbxbtree +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/pbxindex.header +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/protocols.pbxbtree +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/refs.pbxbtree +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/strings.pbxstrings/control +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/strings.pbxstrings/strings +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/subclasses.pbxbtree +0 -0
- data/features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/symbols0.pbxsymbols +0 -0
- data/features/fixtures/App With Whitespace/main.m +0 -14
- data/features/fixtures/SampleApp/English.lproj/InfoPlist.strings +0 -0
- data/features/fixtures/SampleApp/English.lproj/MainMenu.xib +0 -3034
- data/features/fixtures/SampleApp/Info.plist +0 -30
- data/features/fixtures/SampleApp/README.txt +0 -1
- data/features/fixtures/SampleApp/SampleApp.xcodeproj/TemplateIcon.icns +0 -0
- data/features/fixtures/SampleApp/SampleApp.xcodeproj/project.pbxproj +0 -284
- data/features/fixtures/SampleApp/SampleApp_Prefix.pch +0 -7
- data/features/fixtures/SampleApp/build/Release/README.txt +0 -1
- data/features/fixtures/SampleApp/build/Release/dmg/README.txt +0 -1
- data/features/fixtures/SampleApp/main.m +0 -14
- data/website/_layouts/default.html +0 -41
- data/website/_layouts/post.html +0 -86
- data/website/_posts/2009-02-02-first-post.markdown +0 -6
- data/website/_site/2009/02/02/first-post.html +0 -86
- data/website/_site/atom.xml +0 -24
- data/website/_site/config.yml +0 -6
- data/website/_site/css/stylesheet.css +0 -135
- data/website/_site/images/logo.gif +0 -0
- data/website/_site/images/logo.jpg +0 -0
- data/website/_site/images/logo.png +0 -0
- data/website/_site/images/love-16.gif +0 -0
- data/website/_site/images/love.gif +0 -0
- data/website/_site/images/mocra-keynote-bg.jpg +0 -0
- data/website/_site/images/title slide.jpg +0 -0
- data/website/_site/images/title-slide.png +0 -0
- data/website/_site/index.html +0 -85
- data/website/atom.xml +0 -27
- data/website/config.yml +0 -6
- data/website/css/stylesheet.css +0 -135
- data/website/images/logo.gif +0 -0
- data/website/images/logo.png +0 -0
- data/website/images/love-16.gif +0 -0
- data/website/images/love.gif +0 -0
- data/website/images/mocra-keynote-bg.jpg +0 -0
- data/website/images/title-slide.png +0 -0
- data/website/index.markdown +0 -63
data/History.txt
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
* ChocTop no longer solely for Cocoa applications
|
|
3
|
+
* Applications shortcut only included if the primary target is a .app bundle
|
|
4
|
+
* Creates a non-versioned symlink to latest released DMG
|
|
5
|
+
* Files to be included can be specified by relative path, method helper (as a symbol) or a proc that returns a string path.
|
|
6
|
+
Examples:
|
|
7
|
+
file 'build/Release/SampleApp.app', :position => [50, 100]
|
|
8
|
+
file :target_bundle, :position => [50, 100]
|
|
9
|
+
file proc { 'README.txt' }, :position => [50, 100]
|
|
10
|
+
file :position => [50, 100] { 'README.txt' }
|
|
11
|
+
|
|
12
|
+
|
|
1
13
|
== 0.10.0 2009-06-11
|
|
2
14
|
|
|
3
15
|
* Extra files supported: +add_file 'project/path/to/file_or_folder_or_bundle', :position => [x, y]+
|
data/Manifest.txt
CHANGED
|
@@ -14,37 +14,6 @@ assets/wood.jpg
|
|
|
14
14
|
bin/install_choctop
|
|
15
15
|
features/development.feature
|
|
16
16
|
features/dmg.feature
|
|
17
|
-
features/fixtures/App With Whitespace/App With Whitespace.xcodeproj/TemplateIcon.icns
|
|
18
|
-
features/fixtures/App With Whitespace/App With Whitespace.xcodeproj/drnic.mode1v3
|
|
19
|
-
features/fixtures/App With Whitespace/App With Whitespace.xcodeproj/drnic.pbxuser
|
|
20
|
-
features/fixtures/App With Whitespace/App With Whitespace.xcodeproj/project.pbxproj
|
|
21
|
-
features/fixtures/App With Whitespace/App With Whitespace_Prefix.pch
|
|
22
|
-
features/fixtures/App With Whitespace/English.lproj/InfoPlist.strings
|
|
23
|
-
features/fixtures/App With Whitespace/English.lproj/MainMenu.xib
|
|
24
|
-
features/fixtures/App With Whitespace/Info.plist
|
|
25
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/categories.pbxbtree
|
|
26
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/cdecls.pbxbtree
|
|
27
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/decls.pbxbtree
|
|
28
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/files.pbxbtree
|
|
29
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/imports.pbxbtree
|
|
30
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/pbxindex.header
|
|
31
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/protocols.pbxbtree
|
|
32
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/refs.pbxbtree
|
|
33
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/strings.pbxstrings/control
|
|
34
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/strings.pbxstrings/strings
|
|
35
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/subclasses.pbxbtree
|
|
36
|
-
features/fixtures/App With Whitespace/build/App With Whitespace.build/App With Whitespace.pbxindex/symbols0.pbxsymbols
|
|
37
|
-
features/fixtures/App With Whitespace/main.m
|
|
38
|
-
features/fixtures/SampleApp/English.lproj/InfoPlist.strings
|
|
39
|
-
features/fixtures/SampleApp/English.lproj/MainMenu.xib
|
|
40
|
-
features/fixtures/SampleApp/Info.plist
|
|
41
|
-
features/fixtures/SampleApp/README.txt
|
|
42
|
-
features/fixtures/SampleApp/SampleApp.xcodeproj/TemplateIcon.icns
|
|
43
|
-
features/fixtures/SampleApp/SampleApp.xcodeproj/project.pbxproj
|
|
44
|
-
features/fixtures/SampleApp/SampleApp_Prefix.pch
|
|
45
|
-
features/fixtures/SampleApp/build/Release/README.txt
|
|
46
|
-
features/fixtures/SampleApp/build/Release/dmg/README.txt
|
|
47
|
-
features/fixtures/SampleApp/main.m
|
|
48
17
|
features/fixtures/custom_assets/appicon.icns
|
|
49
18
|
features/initial_generator.feature
|
|
50
19
|
features/rake_tasks.feature
|
|
@@ -68,29 +37,3 @@ spec/choctop_spec.rb
|
|
|
68
37
|
spec/spec.opts
|
|
69
38
|
spec/spec_helper.rb
|
|
70
39
|
tasks/rspec.rake
|
|
71
|
-
website/_layouts/default.html
|
|
72
|
-
website/_layouts/post.html
|
|
73
|
-
website/_posts/2009-02-02-first-post.markdown
|
|
74
|
-
website/_site/2009/02/02/first-post.html
|
|
75
|
-
website/_site/atom.xml
|
|
76
|
-
website/_site/config.yml
|
|
77
|
-
website/_site/css/stylesheet.css
|
|
78
|
-
website/_site/images/logo.gif
|
|
79
|
-
website/_site/images/logo.jpg
|
|
80
|
-
website/_site/images/logo.png
|
|
81
|
-
website/_site/images/love-16.gif
|
|
82
|
-
website/_site/images/love.gif
|
|
83
|
-
website/_site/images/mocra-keynote-bg.jpg
|
|
84
|
-
website/_site/images/title slide.jpg
|
|
85
|
-
website/_site/images/title-slide.png
|
|
86
|
-
website/_site/index.html
|
|
87
|
-
website/atom.xml
|
|
88
|
-
website/config.yml
|
|
89
|
-
website/css/stylesheet.css
|
|
90
|
-
website/images/logo.gif
|
|
91
|
-
website/images/logo.png
|
|
92
|
-
website/images/love-16.gif
|
|
93
|
-
website/images/love.gif
|
|
94
|
-
website/images/mocra-keynote-bg.jpg
|
|
95
|
-
website/images/title-slide.png
|
|
96
|
-
website/index.markdown
|
data/README.rdoc
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
== DESCRIPTION:
|
|
6
6
|
|
|
7
|
+
Build and deploy tools for Cocoa apps using Sparkle for distributions and upgrades;
|
|
8
|
+
it’s like Hoe but for Cocoa apps.
|
|
9
|
+
|
|
7
10
|
Package up your OS X/Cocoa applications into Custom DMGs, generate Sparkle XML, and
|
|
8
11
|
upload. Instead of hours, its only 30 seconds to release each new version of an application.
|
|
9
12
|
|
|
@@ -67,6 +70,9 @@ to the end:
|
|
|
67
70
|
|
|
68
71
|
# Extra files
|
|
69
72
|
s.add_file 'path/to/README.txt', :position => [250, 90]
|
|
73
|
+
s.file :target_bundle, :position => [50, 100]
|
|
74
|
+
s.file proc { 'README.txt' }, :position => [50, 100]
|
|
75
|
+
s.file :position => [50, 100] { 'README.txt' }
|
|
70
76
|
|
|
71
77
|
# Custom DMG options
|
|
72
78
|
s.volume_icon = "dmg.icns"
|
data/Rakefile
CHANGED
|
@@ -1,29 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
1
|
+
gem 'hoe', '>= 2.3.2'
|
|
2
|
+
require 'hoe'
|
|
3
|
+
gem 'newgem', '>= 1.5.0'
|
|
4
|
+
require 'newgem'
|
|
5
|
+
require './lib/choctop'
|
|
3
6
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
$hoe = Hoe.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
]
|
|
18
|
-
|
|
19
|
-
p.clean_globs |= %w[**/.DS_Store tmp *.log]
|
|
20
|
-
path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
|
|
21
|
-
p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
|
|
22
|
-
p.rsync_args = '-av --delete --ignore-errors'
|
|
7
|
+
Hoe.plugin :newgem
|
|
8
|
+
|
|
9
|
+
$hoe = Hoe.spec 'choctop' do
|
|
10
|
+
developer 'Dr Nic Williams', 'drnicwilliams@gmail.com'
|
|
11
|
+
developer 'Chris Bailey', 'chris@cobaltedge.com'
|
|
12
|
+
|
|
13
|
+
extra_deps << ['activesupport']
|
|
14
|
+
extra_deps << ['builder','>= 2.1.2']
|
|
15
|
+
extra_dev_deps << ['newgem', ">= #{::Newgem::VERSION}"]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
task :release do
|
|
19
|
+
sh "gem push pkg/#{$hoe.name}-#{$hoe.version}.gem"
|
|
23
20
|
end
|
|
24
21
|
|
|
25
22
|
require 'newgem/tasks' # load /tasks/*.rake
|
|
26
23
|
Dir['tasks/**/*.rake'].each { |t| load t }
|
|
27
24
|
|
|
28
|
-
# TODO - want other tests/tasks run by default? Add them to the list
|
|
29
25
|
task :default => [:features]
|
|
@@ -10,4 +10,4 @@ Feature: Development processes of newgem itself (rake tasks)
|
|
|
10
10
|
When I invoke task "rake gem"
|
|
11
11
|
Then folder "pkg" is created
|
|
12
12
|
And file with name matching "pkg/*.gem" is created else you should run "rake manifest" to fix this
|
|
13
|
-
And gem spec key "rdoc_options" contains
|
|
13
|
+
And gem spec key "rdoc_options" contains /(--mainREADME.rdoc|\[\"--main\", \"README.rdoc\"\])/
|
data/features/dmg.feature
CHANGED
|
@@ -43,3 +43,11 @@ Feature: Can build a customised DMG image from application build
|
|
|
43
43
|
And dmg "appcast/build/SampleApp-0.1.0.dmg" is mounted as "SampleApp"
|
|
44
44
|
And file "README.txt" in mounted volume is created
|
|
45
45
|
And file "SampleApp.app.dSYM" in mounted volume is not created
|
|
46
|
+
|
|
47
|
+
Scenario: Build a DMG for non-Xcode project
|
|
48
|
+
Given a non-Xcode chcotop project "MyProject" with files: README.txt, SomeBundle.thingy
|
|
49
|
+
When I invoke task "rake dmg"
|
|
50
|
+
And dmg "appcast/build/MyProject.dmg" is mounted as "MyProject"
|
|
51
|
+
And file "README.txt" in mounted volume is created
|
|
52
|
+
And file "SomeBundle.thingy" in mounted volume is created
|
|
53
|
+
And file "Applications" in mounted volume is not created
|
data/features/rake_tasks.feature
CHANGED
|
@@ -20,6 +20,7 @@ Feature: Rake tasks are available to build and deploy Cocoa apps with Sparkle
|
|
|
20
20
|
When I invoke task "rake upload"
|
|
21
21
|
Then remote file "my_feed.xml" is created
|
|
22
22
|
Then remote file "SampleApp-0.1.0.dmg" is created
|
|
23
|
+
Then remote file "SampleApp.dmg" is created
|
|
23
24
|
Then remote file "index.php" is created
|
|
24
25
|
|
|
25
26
|
Scenario: change the version number in the Info.plist
|
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
Given /^a safe folder/ do
|
|
2
|
-
FileUtils.rm_rf @tmp_root = File.dirname(__FILE__) + "/../../tmp"
|
|
3
|
-
FileUtils.mkdir_p @tmp_root
|
|
4
|
-
FileUtils.mkdir_p @home_path = File.expand_path(File.join(@tmp_root, "home"))
|
|
5
|
-
@lib_path = File.expand_path(File.dirname(__FILE__) + '/../../lib')
|
|
6
|
-
Given %Q{env variable $HOME set to "#{@home_path}"}
|
|
7
|
-
end
|
|
8
|
-
|
|
9
1
|
Given /^this project is active project folder/ do
|
|
10
|
-
Given "a safe folder"
|
|
11
2
|
@active_project_folder = File.expand_path(File.dirname(__FILE__) + "/../..")
|
|
12
3
|
end
|
|
13
4
|
|
|
@@ -2,18 +2,14 @@ Given /is configured for custom Applications icon$/ do
|
|
|
2
2
|
appicon = File.expand_path(File.dirname(__FILE__) + "/../fixtures/custom_assets/appicon.icns")
|
|
3
3
|
in_project_folder do
|
|
4
4
|
append_to_file "Rakefile", <<-RUBY.gsub(/^ /, '')
|
|
5
|
-
$
|
|
5
|
+
$choctop.applications_icon = "appicon.icns"
|
|
6
6
|
RUBY
|
|
7
7
|
FileUtils.cp(appicon, "appicon.icns")
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
Given /^is configured for an asset file "([^\"]*)" to be included in dmg$/ do |file|
|
|
12
|
-
|
|
13
|
-
append_to_file "Rakefile", <<-RUBY.gsub(/^ /, '')
|
|
14
|
-
$sparkle.add_file "#{file}", :position=> [347, 65]
|
|
15
|
-
RUBY
|
|
16
|
-
end
|
|
12
|
+
choctop_add_file(file)
|
|
17
13
|
end
|
|
18
14
|
|
|
19
15
|
When /^dmg "(.*)" is mounted as "(.*)"$/ do |dmg, name|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
Given /^a Cocoa app that does not have an existing Rakefile$/ do
|
|
2
|
-
Given "a safe folder"
|
|
3
2
|
setup_active_project_folder "SampleApp"
|
|
4
3
|
end
|
|
5
4
|
|
|
@@ -25,7 +24,6 @@ Given /Rakefile constants rewired for local rsync/ do
|
|
|
25
24
|
end
|
|
26
25
|
|
|
27
26
|
Given /^a Cocoa app with choctop installed called "(.*)"$/ do |name|
|
|
28
|
-
Given "a safe folder"
|
|
29
27
|
@remote_folder = File.expand_path(File.join(@tmp_root, 'website'))
|
|
30
28
|
FileUtils.rm_rf @remote_folder
|
|
31
29
|
FileUtils.mkdir_p @remote_folder
|
|
@@ -38,3 +36,16 @@ Given /^a Cocoa app with choctop installed called "(.*)"$/ do |name|
|
|
|
38
36
|
Given "Rakefile constants rewired for local rsync"
|
|
39
37
|
ENV['NO_FINDER'] = 'YES' # disable Finder during tests
|
|
40
38
|
end
|
|
39
|
+
|
|
40
|
+
Given /^a non\-Xcode chcotop project "([^\"]*)" with files: (.*)$/ do |name, files|
|
|
41
|
+
files = files.strip.split(/\s*,\s*/)
|
|
42
|
+
setup_active_project_folder name
|
|
43
|
+
Given %Q{I run local executable "install_choctop" with arguments "."}
|
|
44
|
+
Given "Rakefile wired to use development code instead of installed RubyGem"
|
|
45
|
+
Given "Rakefile constants rewired for local rsync"
|
|
46
|
+
ENV['NO_FINDER'] = 'YES' # disable Finder during tests
|
|
47
|
+
in_project_folder do
|
|
48
|
+
files.each { |file| `touch #{file}` }
|
|
49
|
+
end
|
|
50
|
+
files.each { |file| choctop_add_file(file) }
|
|
51
|
+
end
|
|
@@ -13,8 +13,8 @@ end
|
|
|
13
13
|
Given /^ChocTop config is configured for local rsync$/ do
|
|
14
14
|
in_project_folder do
|
|
15
15
|
append_to_file "Rakefile", <<-RUBY.gsub(/^ /, '')
|
|
16
|
-
$
|
|
17
|
-
$
|
|
16
|
+
$choctop.host = ""
|
|
17
|
+
$choctop.remote_dir = #{@remote_folder.inspect}
|
|
18
18
|
RUBY
|
|
19
19
|
end
|
|
20
20
|
end
|
|
@@ -22,9 +22,9 @@ end
|
|
|
22
22
|
Given /^ChocTop config is configured for remote Sparkle$/ do
|
|
23
23
|
in_project_folder do
|
|
24
24
|
append_to_file "Rakefile", <<-RUBY.gsub(/^ /, '')
|
|
25
|
-
$
|
|
26
|
-
$
|
|
27
|
-
$
|
|
25
|
+
$choctop.host = "mocra.com"
|
|
26
|
+
$choctop.base_url = "http://mocra.com/sample_app"
|
|
27
|
+
$choctop.remote_dir = "/opt/apps/mocra/downloads/sample_app"
|
|
28
28
|
RUBY
|
|
29
29
|
end
|
|
30
30
|
end
|
data/features/support/env.rb
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + "/../../lib/choctop"
|
|
2
2
|
|
|
3
3
|
require "rubygems"
|
|
4
|
-
gem 'cucumber'
|
|
5
4
|
require 'cucumber'
|
|
6
|
-
gem 'rspec'
|
|
7
5
|
require 'spec'
|
|
8
6
|
|
|
9
|
-
require "activesupport"
|
|
7
|
+
require "activesupport"
|
|
8
|
+
|
|
9
|
+
Before do
|
|
10
|
+
@tmp_root = File.dirname(__FILE__) + "/../../tmp"
|
|
11
|
+
@home_path = File.expand_path(File.join(@tmp_root, "home"))
|
|
12
|
+
FileUtils.rm_rf @tmp_root
|
|
13
|
+
FileUtils.mkdir_p @home_path
|
|
14
|
+
ENV['HOME'] = @home_path
|
|
15
|
+
@lib_path = File.expand_path(File.dirname(__FILE__) + '/../../lib')
|
|
16
|
+
end
|
data/lib/choctop.rb
CHANGED
|
@@ -11,7 +11,7 @@ require "active_support"
|
|
|
11
11
|
require "RedCloth"
|
|
12
12
|
|
|
13
13
|
class ChocTop
|
|
14
|
-
VERSION = '0.
|
|
14
|
+
VERSION = '0.11.0'
|
|
15
15
|
|
|
16
16
|
# Path to the Info.plist
|
|
17
17
|
# Default: "Info.plist"
|
|
@@ -28,6 +28,13 @@ class ChocTop
|
|
|
28
28
|
# The target name of the distributed DMG file
|
|
29
29
|
# Default: #{name}.app
|
|
30
30
|
attr_accessor :target
|
|
31
|
+
def target
|
|
32
|
+
@target ||= File.basename(target_bundle) if target_bundle
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def target_bundle
|
|
36
|
+
@target_bundle ||= Dir["build/#{build_type}/#{name}.*"].first
|
|
37
|
+
end
|
|
31
38
|
|
|
32
39
|
# The build type of the distributed DMG file
|
|
33
40
|
# Default: Release
|
|
@@ -39,7 +46,11 @@ class ChocTop
|
|
|
39
46
|
|
|
40
47
|
# The host name, e.g. some-domain.com
|
|
41
48
|
# Default: host from base_url
|
|
42
|
-
attr_accessor :host
|
|
49
|
+
attr_accessor :host
|
|
50
|
+
|
|
51
|
+
# The user to log in on the remote server.
|
|
52
|
+
# Default: empty
|
|
53
|
+
attr_accessor :user
|
|
43
54
|
|
|
44
55
|
# The url from where the xml + dmg files will be downloaded
|
|
45
56
|
# Default: dir path from appcast_filename
|
|
@@ -49,6 +60,10 @@ class ChocTop
|
|
|
49
60
|
# Default: release_notes.html
|
|
50
61
|
attr_accessor :release_notes
|
|
51
62
|
|
|
63
|
+
# The file name for the project readme file
|
|
64
|
+
# Default: README.txt
|
|
65
|
+
attr_accessor :readme
|
|
66
|
+
|
|
52
67
|
# List of files/bundles to be packaged into the DMG
|
|
53
68
|
attr_accessor :files
|
|
54
69
|
|
|
@@ -84,7 +99,13 @@ class ChocTop
|
|
|
84
99
|
# Generated filename for a distribution, from name, version and .dmg
|
|
85
100
|
# e.g. MyApp-1.0.0.dmg
|
|
86
101
|
def pkg_name
|
|
87
|
-
"#{name}-#{version}.dmg"
|
|
102
|
+
version ? "#{name}-#{version}.dmg" : versionless_pkg_name
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Version-less generated filename for a distribution, from name and .dmg
|
|
106
|
+
# e.g. MyApp.dmg
|
|
107
|
+
def versionless_pkg_name
|
|
108
|
+
"#{name}.dmg"
|
|
88
109
|
end
|
|
89
110
|
|
|
90
111
|
# Path to generated package DMG
|
|
@@ -161,25 +182,31 @@ class ChocTop
|
|
|
161
182
|
end
|
|
162
183
|
|
|
163
184
|
# Add an explicit file/bundle/folder into the DMG
|
|
185
|
+
# Examples:
|
|
186
|
+
# file 'build/Release/SampleApp.app', :position => [50, 100]
|
|
187
|
+
# file :target_bundle, :position => [50, 100]
|
|
188
|
+
# file proc { 'README.txt' }, :position => [50, 100]
|
|
189
|
+
# file :position => [50, 100] { 'README.txt' }
|
|
164
190
|
# Required option:
|
|
165
191
|
# +:position+ - two item array [x, y] window position
|
|
166
|
-
def
|
|
167
|
-
|
|
192
|
+
def file(*args, &block)
|
|
193
|
+
path_or_helper, options = args.first.is_a?(Hash) ? [block, args.first] : [args.first, args.last]
|
|
194
|
+
throw "add_files #{path_or_helper}, :position => [x,y] option is missing" unless options[:position]
|
|
168
195
|
self.files ||= {}
|
|
169
|
-
files[
|
|
196
|
+
files[path_or_helper] = options
|
|
170
197
|
end
|
|
171
|
-
|
|
198
|
+
alias_method :add_file, :file
|
|
199
|
+
|
|
172
200
|
def initialize
|
|
173
|
-
$sparkle = self # define a global variable for this object
|
|
201
|
+
$choctop = $sparkle = self # define a global variable for this object ($sparkle is legacy)
|
|
174
202
|
|
|
175
203
|
yield self if block_given?
|
|
176
204
|
|
|
177
205
|
# Defaults
|
|
178
206
|
@info_plist_path ||= 'Info.plist'
|
|
179
|
-
@name ||= info_plist['CFBundleExecutable']
|
|
180
|
-
@name = File.basename(File.expand_path(".")) if name
|
|
207
|
+
@name ||= info_plist['CFBundleExecutable'] || File.basename(File.expand_path("."))
|
|
208
|
+
@name = File.basename(File.expand_path(".")) if @name == '${EXECUTABLE_NAME}'
|
|
181
209
|
@version ||= info_plist['CFBundleVersion']
|
|
182
|
-
@target ||= "#{name}.app"
|
|
183
210
|
@build_type = ENV['BUILD_TYPE'] || 'Release'
|
|
184
211
|
|
|
185
212
|
if @su_feed_url = info_plist['SUFeedURL']
|
|
@@ -190,6 +217,7 @@ class ChocTop
|
|
|
190
217
|
@host ||= URI.parse(base_url).host
|
|
191
218
|
end
|
|
192
219
|
@release_notes ||= 'release_notes.html'
|
|
220
|
+
@readme ||= 'README.txt'
|
|
193
221
|
@release_notes_template ||= "release_notes_template.html.erb"
|
|
194
222
|
@rsync_args ||= '-aCv --progress'
|
|
195
223
|
|
|
@@ -200,7 +228,7 @@ class ChocTop
|
|
|
200
228
|
@icon_size ||= 104
|
|
201
229
|
@icon_text_size ||= 12
|
|
202
230
|
|
|
203
|
-
add_file
|
|
231
|
+
add_file :target_bundle, :position => app_icon_position
|
|
204
232
|
|
|
205
233
|
define_tasks
|
|
206
234
|
end
|
|
@@ -227,6 +255,7 @@ class ChocTop
|
|
|
227
255
|
desc "Create/update the appcast file"
|
|
228
256
|
task :feed do
|
|
229
257
|
make_appcast
|
|
258
|
+
make_dmg_symlink
|
|
230
259
|
make_index_redirect
|
|
231
260
|
make_release_notes
|
|
232
261
|
end
|
data/lib/choctop/appcast.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module ChocTop::Appcast
|
|
2
2
|
def make_build
|
|
3
|
-
if
|
|
3
|
+
if skip_build
|
|
4
4
|
puts "Skipping build task..."
|
|
5
5
|
else
|
|
6
6
|
sh "xcodebuild -configuration #{build_type}"
|
|
@@ -9,8 +9,7 @@ module ChocTop::Appcast
|
|
|
9
9
|
|
|
10
10
|
def make_appcast
|
|
11
11
|
app_name = File.basename(File.expand_path('.'))
|
|
12
|
-
|
|
13
|
-
FileUtils.mkdir_p "#{build_path}"
|
|
12
|
+
FileUtils.mkdir_p(build_path)
|
|
14
13
|
appcast = File.open("#{build_path}/#{appcast_filename}", 'w') do |f|
|
|
15
14
|
xml = Builder::XmlMarkup.new(:indent => 2)
|
|
16
15
|
xml.instruct!
|
|
@@ -44,12 +43,25 @@ module ChocTop::Appcast
|
|
|
44
43
|
end
|
|
45
44
|
end
|
|
46
45
|
|
|
46
|
+
def make_dmg_symlink
|
|
47
|
+
FileUtils.chdir(build_path) do
|
|
48
|
+
`ln -s #{pkg_name} #{versionless_pkg_name}`
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
47
52
|
def make_index_redirect
|
|
48
53
|
File.open("#{build_path}/index.php", 'w') do |f|
|
|
49
54
|
f << %Q{<?php header("Location: #{pkg_relative_url}"); ?>}
|
|
50
55
|
end
|
|
51
56
|
end
|
|
52
57
|
|
|
58
|
+
def skip_build
|
|
59
|
+
return true if ENV['NO_BUILD']
|
|
60
|
+
return false if File.exists?('Info.plist')
|
|
61
|
+
return false if Dir['*.xcodeproj'].size > 0
|
|
62
|
+
true
|
|
63
|
+
end
|
|
64
|
+
|
|
53
65
|
def make_release_notes
|
|
54
66
|
File.open("#{build_path}/#{release_notes}", "w") do |f|
|
|
55
67
|
template = File.read(release_notes_template)
|
|
@@ -75,7 +87,8 @@ module ChocTop::Appcast
|
|
|
75
87
|
|
|
76
88
|
def upload_appcast
|
|
77
89
|
_host = host.blank? ? "" : "#{host}:"
|
|
78
|
-
|
|
90
|
+
_user = user.blank? ? "" : "#{user}@"
|
|
91
|
+
sh %{rsync #{rsync_args} #{build_path}/ #{_user}#{_host}#{remote_dir}}
|
|
79
92
|
end
|
|
80
93
|
|
|
81
94
|
# Returns a file path to the dsa_priv.pem file
|