dolphins7.skeleton/host/rake/lib/builders.rb

94 lines
2.3 KiB
Ruby
Raw Normal View History

2024-02-07 23:39:42 +01:00
class Builder
ROOTDIR = Dir.getwd
STAGEDIR = File.join(ROOTDIR, "stage")
PKGDIR = File.join(ROOTDIR, "pkgs")
PARENT = File.basename File.realpath(File.join(__dir__, "..", "..", ".."))
CHILDREN = %w[cli server client]
2024-02-07 23:39:42 +01:00
include FileUtils
def self.call(...)
new.call(...)
end
end
class GemSpec < Builder
require "erb"
def call(version)
[PARENT, *CHILDREN].each do |node|
path = find_path(node)
spec = ERB.new(File.binread(path)).result_with_hash({parent: PARENT, version:})
2024-02-07 23:39:42 +01:00
File.binwrite File.join(File.dirname(path), "#{node}.gemspec"), spec
end
end
private
def find_path(node)
if node == PARENT
2024-04-22 03:54:47 +02:00
File.join(Dir.getwd, "#{node}.gemspec.tt")
2024-02-07 23:39:42 +01:00
else
2024-04-22 03:54:47 +02:00
File.join(Dir.getwd,node, "#{node}.gemspec.tt")
2024-02-07 23:39:42 +01:00
end
end
end
class Copy < Builder
def call(version)
[PARENT, *CHILDREN].each do
dest = File.join(STAGEDIR, version, _1)
mkdir_p(dest)
if _1 == PARENT
sh "cp -fv *.gemspec #{dest}"
2024-04-25 06:46:22 +02:00
sh "cp -Rfv host/lib/ #{dest}"
2024-02-07 23:39:42 +01:00
else
2024-02-08 18:36:01 +01:00
sh [
"find #{_1}",
excludes.map { |n| "-not -name #{n}" }.join(" "),
"-mindepth 1 -maxdepth 1",
"-exec cp -Rfv {} #{dest} \\;"
].join(" ")
2024-02-07 23:39:42 +01:00
end
2024-02-08 18:36:01 +01:00
chmod!(dest)
2024-02-08 00:56:05 +01:00
end
end
private
2024-02-08 18:36:01 +01:00
def chmod!(dest)
2024-04-27 02:46:23 +02:00
sh "find #{dest} -type d -exec chmod u=rwx,go=rx {} +"
sh "find #{dest} -type f -exec chmod u=rw,go=r {} +"
2024-02-08 00:56:05 +01:00
[File.join(dest, "libexec"), File.join(dest, "bin")].each do |exedir|
next unless File.exist?(exedir)
2024-04-27 02:46:23 +02:00
sh "find #{exedir} -type f -exec chmod u=rwx,go=rx {} +"
2024-02-07 23:39:42 +01:00
end
end
2024-02-08 18:36:01 +01:00
def excludes
%w[.gems node_modules]
end
2024-02-07 23:39:42 +01:00
end
class Build < Builder
def call(version)
dest = File.join(PKGDIR, version)
mkdir_p(dest)
2024-04-25 06:46:22 +02:00
[*CHILDREN.map { "#{PARENT}-#{_1}" }, PARENT].each do |gem|
stagedir = File.join(STAGEDIR, version, gem.sub(/^#{Regexp.escape(PARENT)}-/, ""))
Dir.chdir(stagedir) do
sh "gem build #{File.basename(stagedir)}.gemspec"
2024-02-07 23:39:42 +01:00
sh "mv #{gem}-#{version}.gem #{dest}"
end
end
end
end
class Deploy < Builder
def call(version)
Dir.chdir File.join(PKGDIR, version) do
2024-04-25 06:46:22 +02:00
[*CHILDREN.map { "#{PARENT}-#{_1}" }, PARENT].each do |gem|
2024-02-07 23:39:42 +01:00
sh "gem push #{gem}-#{version}.gem"
end
end
end
end