-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathRakefile
More file actions
90 lines (72 loc) · 2.27 KB
/
Rakefile
File metadata and controls
90 lines (72 loc) · 2.27 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
# frozen_string_literal: true
require "bundler/gem_tasks"
require "rake/testtask"
require "rb_sys/extensiontask"
begin
require "standard/rake"
rescue LoadError
# standard gem not available in cross-compilation environment
end
GEMSPEC = Gem::Specification.load("wreq.gemspec") || abort("Could not load wreq.gemspec")
CRATE_PACKAGE_NAME = "wreq-ruby"
RbSys::ExtensionTask.new(CRATE_PACKAGE_NAME, GEMSPEC) do |ext|
ext.name = "wreq_ruby"
ext.ext_dir = "."
ext.lib_dir = "lib/wreq_ruby"
ext.cross_compile = true
# arm64-darwin is built natively on macOS (see .github/workflows/release.yml)
ext.cross_platform = %w[
x86_64-linux
aarch64-linux
]
# Override Ruby version for native gems (keep in sync with wreq.gemspec)
ext.cross_compiling do |spec|
spec.required_ruby_version = ">= 3.3", "< 4.1.dev"
end
end
Rake::TestTask.new(:ruby_test) do |t|
t.libs << "lib"
t.libs << "test"
t.pattern = "test/**/*_test.rb"
end
desc "Run Rust tests"
task :cargo_test do
sh "cargo test"
end
desc "Format Rust code"
task :fmt do
sh "cargo fmt"
end
desc "Run Clippy linter"
task :lint do
sh "cargo clippy -- -D warnings"
end
desc "Build native gem for platform (e.g., rake 'native[x86_64-linux]')"
task :native, [:platform] do |_t, args|
abort "Usage: rake 'native[PLATFORM]' (e.g., x86_64-linux, aarch64-linux)" unless args[:platform]
sh "bundle", "exec", "rb-sys-dock", "--platform", args[:platform], "--build"
end
task purge: %i[clean clobber]
desc "Print gem version"
task :version do
print GEMSPEC.version
end
task test: %i[compile ruby_test cargo_test]
task default: %i[compile test]
# Override bundler's release to push all platform gems
Rake::Task["release"].clear
Rake::Task["release:rubygem_push"].clear if Rake::Task.task_defined?("release:rubygem_push")
desc "Release all platform gems to RubyGems"
task release: ["release:guard_clean", "release:rubygem_push"]
namespace :release do
task :rubygem_push do
gem_files = Dir.glob("pkg/#{GEMSPEC.name}-*.gem").sort
abort "No gems found in pkg/" if gem_files.empty?
puts "Pushing #{gem_files.length} gem(s):"
gem_files.each { |f| puts " - #{File.basename(f)}" }
gem_files.each do |gem_file|
puts "\nPushing #{File.basename(gem_file)}..."
sh "gem push #{gem_file}"
end
end
end