Skip to content

Commit a45019a

Browse files
committed
bring back code of packaging task
1 parent cc1d33a commit a45019a

1 file changed

Lines changed: 179 additions & 7 deletions

File tree

Rakefile

Lines changed: 179 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,184 @@ task :release => :compile do
112112
end
113113
end
114114

115-
MRBGEMS_ROOT = "#{MRUBY_ROOT}/build/mrbgems"
116-
if Dir.exist?("#{MRBGEMS_ROOT}/mruby-cli-distpackage")
117-
import "#{MRBGEMS_ROOT}/mruby-cli-distpackage/tasks/package.rake"
118-
task :package => :release
119-
else
120-
task :package do
121-
puts "not installed"
115+
namespace :package do
116+
require 'fileutils'
117+
require 'tmpdir'
118+
require_relative "#{MRUBY_ROOT}/../mrblib/mruby-cli/version"
119+
120+
version = MRubyCLI::Version::VERSION
121+
release_dir = "releases/v#{version}"
122+
package_dir = "packages/v#{version}"
123+
release_path = Dir.pwd + "/../#{release_dir}"
124+
package_path = Dir.pwd + "/../#{package_dir}"
125+
FileUtils.mkdir_p(package_path)
126+
127+
def check_fpm_installed?
128+
`gem list -i fpm`.chomp == "true"
129+
end
130+
131+
def check_msi_installed?
132+
`wixl --version`
133+
$?.success?
134+
end
135+
136+
def check_dmg_installed?
137+
`genisoimage --version`
138+
$?.success?
139+
end
140+
141+
def wxs_content(version, arch)
142+
arch_wxs = case arch
143+
when "x86_64"
144+
{
145+
string: "64-bit",
146+
program_files_folder: "ProgramFiles64Folder",
147+
define: "<?define Win64 = \"yes\"?>"
148+
}
149+
else
150+
{
151+
string: "32-bit",
152+
program_files_folder: "ProgramFilesFolder",
153+
define: "<?define Win64 = \"no\"?>"
154+
}
155+
end
156+
157+
<<-EOF
158+
<?xml version='1.0' encoding='utf-8'?>
159+
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
160+
161+
#{arch_wxs[:define]}
162+
163+
<Product
164+
Name='mruby-cli #{arch_wxs[:string]}'
165+
Id='F43E56B6-5FF2-450C-B7B7-0B12BF066ABD'
166+
Version='#{version}'
167+
Language='1033'
168+
Manufacturer='mruby-cli'
169+
UpgradeCode='12268671-59a0-42d3-b1f2-79e52b5657a6'
170+
>
171+
172+
<Package InstallerVersion="200" Compressed="yes" Comments="comments" InstallScope="perMachine"/>
173+
174+
<Media Id="1" Cabinet="cabinet.cab" EmbedCab="yes"/>
175+
176+
<Directory Id='TARGETDIR' Name='SourceDir'>
177+
<Directory Id='#{arch_wxs[:program_files_folder]}' Name='PFiles'>
178+
<Directory Id='INSTALLDIR' Name='mruby-cli'>
179+
<Component Id='MainExecutable' Guid='3DCA4C4D-205C-4FA4-8BB1-C0BF41CA5EFA'>
180+
<File Id='mruby-cliEXE' Name='mruby-cli.exe' DiskId='1' Source='mruby-cli.exe' KeyPath='yes'/>
181+
</Component>
182+
</Directory>
183+
</Directory>
184+
</Directory>
185+
186+
<Feature Id='Complete' Level='1'>
187+
<ComponentRef Id='MainExecutable' />
188+
</Feature>
189+
</Product>
190+
</Wix>
191+
EOF
192+
end
193+
194+
def info_plist_content(version, arch)
195+
<<-EOF
196+
<?xml version="1.0" encoding="UTF-8"?>
197+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
198+
<plist version="1.0">
199+
<dict>
200+
<key>CFBundleExecutable</key>
201+
<string>mruby-cli</string>
202+
<key>CFBundleGetInfoString</key>
203+
<string>mruby-cli #{version} #{arch}</string>
204+
<key>CFBundleName</key>
205+
<string>mruby-cli</string>
206+
<key>CFBundleIdentifier</key>
207+
<string>mruby-cli</string>
208+
<key>CFBundlePackageType</key>
209+
<string>APPL</string>
210+
<key>CFBundleShortVersionString</key>
211+
<string>#{version}</string>
212+
<key>CFBundleSignature</key>
213+
<string>mrbc</string>
214+
<key>CFBundleInfoDictionaryVersion</key>
215+
<string>6.0</string>
216+
</dict>
217+
</plist>
218+
EOF
219+
end
220+
221+
def osx_setup_bash_path_script
222+
<<-EOF
223+
#!/bin/bash
224+
echo "export PATH=$PATH:/Applications/mruby-cli.app/Contents/MacOs" >> $HOME/.bash_profile
225+
source $HOME/.bash_profile
226+
EOF
227+
end
228+
229+
def log(package_dir, version, package)
230+
puts "Writing packages #{package_dir}/#{version}/#{package}"
231+
end
232+
233+
desc "create deb package"
234+
task :deb => [:release] do
235+
abort("fpm is not installed. Please check your docker install.") unless check_fpm_installed?
236+
237+
["x86_64", "i686"].each do |arch|
238+
release_tar_file = "mruby-cli-#{version}-#{arch}-pc-linux-gnu.tgz"
239+
arch_name = (arch == "x86_64" ? "amd64" : arch)
240+
log(package_dir, version, "mruby-cli_#{version}_#{arch_name}.deb")
241+
`fpm -s tar -t deb -a #{arch} -n mruby-cli -v #{version} --prefix /usr/bin -p #{package_path} #{release_path}/#{release_tar_file}`
242+
end
243+
end
244+
245+
desc "create rpm package"
246+
task :rpm => [:release] do
247+
abort("fpm is not installed. Please check your docker install.") unless check_fpm_installed?
248+
249+
["x86_64", "i686"].each do |arch|
250+
release_tar_file = "mruby-cli-#{version}-#{arch}-pc-linux-gnu.tgz"
251+
log(package_dir, version, "mruby-cli-#{version}-1.#{arch}.rpm")
252+
`fpm -s tar -t rpm -a #{arch} -n mruby-cli -v #{version} --prefix /usr/bin -p #{package_path} #{release_path}/#{release_tar_file}`
253+
end
122254
end
255+
256+
desc "create msi package"
257+
task :msi => [:release] do
258+
abort("msitools is not installed. Please check your docker install.") unless check_msi_installed?
259+
["x86_64", "i686"].each do |arch|
260+
log(package_dir, version, "mruby-cli-#{version}-#{arch}.msi")
261+
release_tar_file = "mruby-cli-#{version}-#{arch}-w64-mingw32.tgz"
262+
Dir.mktmpdir do |dest_dir|
263+
Dir.chdir dest_dir
264+
`tar -zxf #{release_path}/#{release_tar_file}`
265+
File.write("mruby-cli-#{version}-#{arch}.wxs", wxs_content(version, arch))
266+
`wixl -v mruby-cli-#{version}-#{arch}.wxs && mv mruby-cli-#{version}-#{arch}.msi #{package_path}`
267+
end
268+
end
269+
end
270+
271+
desc "create dmg package"
272+
task :dmg => [:release] do
273+
abort("dmg tools are not installed. Please check your docker install.") unless check_dmg_installed?
274+
["x86_64", "i386"].each do |arch|
275+
log(package_dir, version, "mruby-cli-#{version}-#{arch}.dmg")
276+
release_tar_file = "mruby-cli-#{version}-#{arch}-apple-darwin14.tgz"
277+
Dir.mktmpdir do |dest_dir|
278+
Dir.chdir dest_dir
279+
`tar -zxf #{release_path}/#{release_tar_file}`
280+
FileUtils.chmod 0755, "mruby-cli"
281+
FileUtils.mkdir_p "mruby-cli.app/Contents/MacOs"
282+
FileUtils.mv "mruby-cli", "mruby-cli.app/Contents/MacOs"
283+
File.write("mruby-cli.app/Contents/Info.plist", info_plist_content(version, arch))
284+
File.write("add-mruby-cli-to-my-path.sh", osx_setup_bash_path_script)
285+
FileUtils.chmod 0755, "add-mruby-cli-to-my-path.sh"
286+
`genisoimage -V mruby-cli -D -r -apple -no-pad -o #{package_path}/mruby-cli-#{version}-#{arch}.dmg #{dest_dir}`
287+
end
288+
end
289+
end
290+
123291
end
292+
293+
desc "create all packages"
294+
task :package => ["package:deb", "package:rpm", "package:msi", "package:dmg"]
295+

0 commit comments

Comments
 (0)