-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRakefile
77 lines (65 loc) · 2.53 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# frozen_string_literal: true
require "io/console"
require "bundler/gem_tasks"
GEMSPEC = Bundler.load_gemspec("libclang.gemspec")
ARCH_MAP = {
"x86_64-darwin" => "macosx_10_9_x86_64",
"x86_64-linux" => "manylinux1_x86_64",
"x86_64-linux-musl" => "musllinux_1_2_x86_64",
"aarch64-linux" => "manylinux2014_aarch64",
"arm64-darwin" => "macosx_11_0_arm64",
"x64-mingw32" => "win_amd64",
"x64-mingw-ucrt" => "win_amd64",
}
ARCH_MAP.each do |ruby_platform, py_platform|
desc "Download libclang for from PyPI for #{py_platform}"
task "vendor:#{ruby_platform}" do
cmd = "python3 -m pip install --platform #{py_platform} -t tmp/#{ruby_platform} --no-deps libclang==#{GEMSPEC.version}"
puts "==== #{ruby_platform} ===="
puts "Running: #{cmd}"
system cmd, exception: true
FileUtils.mkdir_p("tmp/stage/#{ruby_platform}/vendor/lib/")
libclang = Dir["tmp/#{ruby_platform}/clang/native/libclang.*"].first
FileUtils.cp(libclang, "tmp/stage/#{ruby_platform}/vendor/lib/")
FileUtils.rm_rf("tmp/#{ruby_platform}")
end
desc "Build staging gem directory (#{ruby_platform})"
task "stage:#{ruby_platform}" => "vendor:#{ruby_platform}" do
spec = GEMSPEC.dup
FileUtils.mkdir_p("tmp/stage/#{ruby_platform}")
spec.files.each do |file|
FileUtils.mkdir_p(File.dirname("tmp/stage/#{ruby_platform}/#{file}"))
FileUtils.cp file, "tmp/stage/#{ruby_platform}/#{file}"
end
spec.cert_chain.each do |file|
FileUtils.mkdir_p(File.dirname("tmp/stage/#{ruby_platform}/#{file}"))
FileUtils.cp file, "tmp/stage/#{ruby_platform}/#{file}"
end
spec.platform = Gem::Platform.new(ruby_platform)
spec.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") unless ENV['CI']
Dir.chdir "tmp/stage/#{ruby_platform}" do
spec.files = Dir["**/*"].select { |f| File.file?(f) }
File.write("libclang.gemspec", spec.to_ruby)
system "gem build libclang.gemspec", exception: true
FileUtils.mkdir_p("../../../pkg")
FileUtils.mv Dir["*.gem"].first, "../../../pkg/"
end
end
task "stage" => "stage:#{ruby_platform}"
end
task "sign" do
next if ENV['CI']
ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = $stdin.getpass("Enter passphrase of gem signature key: ")
end
task :clean do
FileUtils.rm_rf("tmp")
FileUtils.rm_rf("pkg")
end
task :publish do
require_relative "./lib/libclang/version"
Dir["pkg/*.gem"].each do |gem|
system "gem push #{gem}", exception: true
system "gh release create v#{Libclang::VERSION} --generate-notes"
end
end
task default: ["clean", "sign", "stage"]