- Update
This commit is contained in:
1 parent
d281d765ea
commit
5b074a5176
1261 files changed
+199158
-7303
No files matched your search
+165
@@ -0,0 +1,165 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
class Builder
|
||||
|
||||
def initialize
|
||||
@env = Environment.new()
|
||||
@worker = CompositeWorker.new([Logger.new(), Executer.new()])
|
||||
end
|
||||
|
||||
def makeRelease
|
||||
createWorkingDirectories
|
||||
downloadSource
|
||||
copySource
|
||||
buildModules
|
||||
createPackage "ocmock-2.1.1.dmg", "OCMock 2.1.1"
|
||||
openPackageDir
|
||||
end
|
||||
|
||||
def justBuild
|
||||
createWorkingDirectories
|
||||
downloadSource
|
||||
buildModules
|
||||
openPackageDir
|
||||
end
|
||||
|
||||
def createWorkingDirectories
|
||||
@worker.run("mkdir -p #{@env.sourcedir}")
|
||||
@worker.run("mkdir -p #{@env.productdir}")
|
||||
@worker.run("mkdir -p #{@env.packagedir}")
|
||||
end
|
||||
|
||||
def downloadSource
|
||||
@worker.run("git archive master | tar -x -v -C #{@env.sourcedir}")
|
||||
end
|
||||
|
||||
def copySource
|
||||
@worker.run("cp -R #{@env.sourcedir}/Source #{@env.productdir}")
|
||||
end
|
||||
|
||||
def buildModules
|
||||
@worker.chdir("#{@env.sourcedir}/Source")
|
||||
@worker.run("xcodebuild -project OCMock.xcodeproj -target OCMock")
|
||||
osxproductdir = "#{@env.productdir}/OSX"
|
||||
@worker.run("mkdir -p #{osxproductdir}")
|
||||
@worker.run("cp -R build/Release/OCMock.framework #{osxproductdir}")
|
||||
@worker.run("xcodebuild -project OCMock.xcodeproj -target OCMockLib -sdk iphoneos6.1")
|
||||
@worker.run("xcodebuild -project OCMock.xcodeproj -target OCMockLib -sdk iphonesimulator6.1")
|
||||
@worker.run("lipo -create -output build/Release/libOCMock.a build/Release-*/libOCMock.a")
|
||||
iosproductdir = "#{@env.productdir}/iOS"
|
||||
@worker.run("mkdir -p #{iosproductdir}")
|
||||
@worker.run("cp -R build/Release/libOCMock.a #{iosproductdir}")
|
||||
@worker.run("cp -R build/Release-iphoneos/OCMock #{iosproductdir}")
|
||||
end
|
||||
|
||||
def createPackage(packagename, volumename)
|
||||
@worker.chdir(@env.packagedir)
|
||||
@worker.run("hdiutil create -size 4m temp.dmg -layout NONE")
|
||||
disk_id = nil
|
||||
@worker.run("hdid -nomount temp.dmg") { |hdid| disk_id = hdid.readline.split[0] }
|
||||
@worker.run("newfs_hfs -v '#{volumename}' #{disk_id}")
|
||||
@worker.run("hdiutil eject #{disk_id}")
|
||||
@worker.run("hdid temp.dmg") { |hdid| disk_id = hdid.readline.split[0] }
|
||||
@worker.run("cp -R #{@env.productdir}/* '/Volumes/#{volumename}'")
|
||||
@worker.run("hdiutil eject #{disk_id}")
|
||||
@worker.run("hdiutil convert -format UDZO temp.dmg -o #{@env.packagedir}/#{packagename} -imagekey zlib-level=9")
|
||||
@worker.run("hdiutil internet-enable -yes #{@env.packagedir}/#{packagename}")
|
||||
@worker.run("rm temp.dmg")
|
||||
end
|
||||
|
||||
def openPackageDir
|
||||
@worker.run("open #{@env.packagedir}")
|
||||
end
|
||||
|
||||
def upload(packagename, dest)
|
||||
@worker.run("scp #{@env.packagedir}/#{packagename} #{dest}")
|
||||
end
|
||||
|
||||
def cleanup
|
||||
@worker.run("chmod -R u+w #{@env.tmpdir}")
|
||||
@worker.run("rm -rf #{@env.tmpdir}");
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
## Environment
|
||||
## use attributes to configure manager for your environment
|
||||
|
||||
class Environment
|
||||
def initialize()
|
||||
@tmpdir = "/tmp/ocmock.#{Process.pid}"
|
||||
@sourcedir = tmpdir + "/Source"
|
||||
@productdir = tmpdir + "/Products"
|
||||
@packagedir = tmpdir
|
||||
end
|
||||
|
||||
attr_accessor :tmpdir, :sourcedir, :productdir, :packagedir
|
||||
end
|
||||
|
||||
|
||||
## Logger (Worker)
|
||||
## prints commands
|
||||
|
||||
class Logger
|
||||
def chdir(dir)
|
||||
puts "## chdir #{dir}"
|
||||
end
|
||||
|
||||
def run(cmd)
|
||||
puts "## #{cmd}"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
## Executer (Worker)
|
||||
## actually runs commands
|
||||
|
||||
class Executer
|
||||
def chdir(dir)
|
||||
Dir.chdir(dir)
|
||||
end
|
||||
|
||||
def run(cmd, &block)
|
||||
if block == nil
|
||||
system(cmd)
|
||||
else
|
||||
IO.popen(cmd, &block)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
## Composite Worker (Worker)
|
||||
## sends commands to multiple workers
|
||||
|
||||
class CompositeWorker
|
||||
def initialize(workers)
|
||||
@workers = workers
|
||||
end
|
||||
|
||||
def chdir(dir)
|
||||
@workers.each { |w| w.chdir(dir) }
|
||||
end
|
||||
|
||||
def run(cmd)
|
||||
@workers.each { |w| w.run(cmd) }
|
||||
end
|
||||
|
||||
def run(cmd, &block)
|
||||
@workers.each { |w| w.run(cmd, &block) }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if /Tools$/.match(Dir.pwd)
|
||||
Dir.chdir("..")
|
||||
end
|
||||
|
||||
if ARGV[0] == '-r'
|
||||
Builder.new.makeRelease
|
||||
else
|
||||
Builder.new.justBuild
|
||||
end
|
||||
|
||||
|
||||
Reference in new issue
Block a user