From b090e96ff79ea44c880edb5a885c864c20fddf49 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Wed, 24 Apr 2024 22:52:52 -0400 Subject: [PATCH 01/10] [rust gem] Make cargo test work by default --- Manifest.txt | 1 + bundler/lib/bundler/cli/gem.rb | 1 + .../templates/newgem/ext/newgem/Cargo.toml.tt | 9 +++++++- .../templates/newgem/ext/newgem/build.rs.tt | 5 ++++ .../templates/newgem/ext/newgem/src/lib.rs.tt | 11 +++++++++ bundler/spec/commands/newgem_spec.rb | 23 +++++++++++++++++++ bundler/spec/support/filters.rb | 1 + 7 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt diff --git a/Manifest.txt b/Manifest.txt index e6bc5766a59a..95f6e9d79fe4 100644 --- a/Manifest.txt +++ b/Manifest.txt @@ -221,6 +221,7 @@ bundler/lib/bundler/templates/newgem/bin/setup.tt bundler/lib/bundler/templates/newgem/circleci/config.yml.tt bundler/lib/bundler/templates/newgem/exe/newgem.tt bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt diff --git a/bundler/lib/bundler/cli/gem.rb b/bundler/lib/bundler/cli/gem.rb index b6571d0e86cc..8cbb39d48406 100644 --- a/bundler/lib/bundler/cli/gem.rb +++ b/bundler/lib/bundler/cli/gem.rb @@ -205,6 +205,7 @@ def run templates.merge!( "Cargo.toml.tt" => "Cargo.toml", "ext/newgem/Cargo.toml.tt" => "ext/#{name}/Cargo.toml", + "ext/newgem/build.rs.tt" => "ext/#{name}/build.rs", "ext/newgem/extconf-rust.rb.tt" => "ext/#{name}/extconf.rb", "ext/newgem/src/lib.rs.tt" => "ext/#{name}/src/lib.rs", ) diff --git a/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt b/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt index 0ebce0e4a0c6..2084d808308d 100644 --- a/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +++ b/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt @@ -12,4 +12,11 @@ publish = false crate-type = ["cdylib"] [dependencies] -magnus = { version = "0.6.2" } +magnus = { version = "0.6.3" } +rb-sys = { version = "0.9", features = ["stable-api-compiled-fallback"] } + +[build-dependencies] +rb-sys-env = "0.1.2" + +[dev-dependencies] +rb-sys-test-helpers = { version = "0.2.0" } diff --git a/bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt b/bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt new file mode 100644 index 000000000000..8d812a4a3c17 --- /dev/null +++ b/bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt @@ -0,0 +1,5 @@ +pub fn main() -> Result<(), Box> { + let _rb_env = rb_sys_env::activate()?; + + Ok(()) +} diff --git a/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt b/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt index ba234529a3e8..8f32a93ab81f 100644 --- a/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +++ b/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt @@ -10,3 +10,14 @@ fn init(ruby: &Ruby) -> Result<(), Error> { module.define_singleton_method("hello", function!(hello, 1))?; Ok(()) } + +#[cfg(test)] +mod tests { + use rb_sys_test_helpers::ruby_test; + + #[ruby_test] + fn test_hello() { + use magnus::RString; + assert_eq!(12, RString::new("rust ❤️ ruby").length()) + } +} diff --git a/bundler/spec/commands/newgem_spec.rb b/bundler/spec/commands/newgem_spec.rb index 199340b1314c..6a6176c9db9a 100644 --- a/bundler/spec/commands/newgem_spec.rb +++ b/bundler/spec/commands/newgem_spec.rb @@ -1454,6 +1454,7 @@ def create_temporary_dir(dir) expect(bundled_app("#{gem_name}/ext/#{gem_name}/Cargo.toml")).to exist expect(bundled_app("#{gem_name}/ext/#{gem_name}/extconf.rb")).to exist expect(bundled_app("#{gem_name}/ext/#{gem_name}/src/lib.rs")).to exist + expect(bundled_app("#{gem_name}/ext/#{gem_name}/build.rs")).to exist end it "includes rake-compiler, rb_sys gems and required_rubygems_version constraint" do @@ -1482,6 +1483,28 @@ def create_temporary_dir(dir) expect(bundled_app("#{gem_name}/Rakefile").read).to eq(rakefile) end + + it "configures the crate such that `cargo test` works", :ruby_repo, :mri_only do + env = setup_rust_env + gem_path = bundled_app(gem_name) + result = sys_exec("cargo test", env: env, dir: gem_path) + + expect(result).to include("1 passed") + end + + def setup_rust_env + skip "rust toolchain of mingw is broken" if RUBY_PLATFORM.match?("mingw") + + env = { + "CARGO_HOME" => ENV.fetch("CARGO_HOME", File.join(ENV["HOME"], ".cargo")), + "RUSTUP_HOME" => ENV.fetch("RUSTUP_HOME", File.join(ENV["HOME"], ".rustup")), + "RUSTUP_TOOLCHAIN" => ENV.fetch("RUSTUP_TOOLCHAIN", "stable"), + } + + system(env, "cargo", "-V", out: IO::NULL, err: [:child, :out]) + skip "cargo not present" unless $?.success? + env + end end end diff --git a/bundler/spec/support/filters.rb b/bundler/spec/support/filters.rb index 8e164af756c9..39ea71a5373c 100644 --- a/bundler/spec/support/filters.rb +++ b/bundler/spec/support/filters.rb @@ -33,6 +33,7 @@ def inspect config.filter_run_excluding jruby_only: RUBY_ENGINE != "jruby" config.filter_run_excluding truffleruby_only: RUBY_ENGINE != "truffleruby" config.filter_run_excluding man: Gem.win_platform? + config.filter_run_excluding mri_only: RUBY_ENGINE != "ruby" config.filter_run_when_matching :focus unless ENV["CI"] end From eccfe0633406c6c551a84fcbc9329fd82495fb49 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 30 May 2024 22:33:12 -0400 Subject: [PATCH 02/10] Include debug symbols by default in release builds for rust gems --- bundler/lib/bundler/templates/newgem/Cargo.toml.tt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bundler/lib/bundler/templates/newgem/Cargo.toml.tt b/bundler/lib/bundler/templates/newgem/Cargo.toml.tt index f5a460c9bbf7..c838643d49bd 100644 --- a/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +++ b/bundler/lib/bundler/templates/newgem/Cargo.toml.tt @@ -5,3 +5,9 @@ [workspace] members = ["./ext/<%= config[:name] %>"] resolver = "2" + +[profile.release] +# By default, debug symbols are stripped from the final binary which makes it +# harder to debug if something goes wrong. It's recommended to keep debug +# symbols in the release build so that you can debug the final binary if needed. +debug = true \ No newline at end of file From fca21a67ceb7669f465cc3aebdfb2afa96b4593b Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 30 May 2024 22:34:00 -0400 Subject: [PATCH 03/10] Default to using rb_sys for Cargo gem builds --- bundler/lib/bundler/templates/newgem/Gemfile.tt | 3 --- bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt | 2 +- bundler/lib/bundler/templates/newgem/newgem.gemspec.tt | 6 +----- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/bundler/lib/bundler/templates/newgem/Gemfile.tt b/bundler/lib/bundler/templates/newgem/Gemfile.tt index a0d2ac282679..de82a63c5ff6 100644 --- a/bundler/lib/bundler/templates/newgem/Gemfile.tt +++ b/bundler/lib/bundler/templates/newgem/Gemfile.tt @@ -9,9 +9,6 @@ gem "rake", "~> 13.0" <%- if config[:ext] -%> gem "rake-compiler" -<%- if config[:ext] == 'rust' -%> -gem "rb_sys", "~> 0.9.63" -<%- end -%> <%- end -%> <%- if config[:test] -%> diff --git a/bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt b/bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt index 8d812a4a3c17..80a78427533f 100644 --- a/bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt +++ b/bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt @@ -1,5 +1,5 @@ pub fn main() -> Result<(), Box> { - let _rb_env = rb_sys_env::activate()?; + let _ = rb_sys_env::activate()?; Ok(()) } diff --git a/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt b/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt index 6e88f4dab175..dd473bea48fd 100644 --- a/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +++ b/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt @@ -15,10 +15,6 @@ Gem::Specification.new do |spec| spec.license = "MIT" <%- end -%> spec.required_ruby_version = ">= <%= config[:required_ruby_version] %>" -<%- if config[:ext] == 'rust' -%> - spec.required_rubygems_version = ">= <%= config[:rust_builder_required_rubygems_version] %>" -<%- end -%> - spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'" spec.metadata["homepage_uri"] = spec.homepage @@ -41,7 +37,7 @@ Gem::Specification.new do |spec| spec.extensions = ["ext/<%= config[:underscored_name] %>/extconf.rb"] <%- end -%> <%- if config[:ext] == 'rust' -%> - spec.extensions = ["ext/<%= config[:underscored_name] %>/Cargo.toml"] + spec.add_dependency "rb_sys", "~> 0.9" <%- end -%> # Uncomment to register a new dependency of your gem From e3684999e56f91f08b28b76d01129aed3cd8e890 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 30 May 2024 23:03:08 -0400 Subject: [PATCH 04/10] Improve testing config --- .../templates/newgem/ext/newgem/src/lib.rs.tt | 8 ++++---- .../templates/newgem/spec/newgem_spec.rb.tt | 8 ++++++++ .../newgem/test/minitest/test_newgem.rb.tt | 6 ++++++ bundler/spec/commands/newgem_spec.rb | 18 +++--------------- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt b/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt index 8f32a93ab81f..09ce97682d31 100644 --- a/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +++ b/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt @@ -1,7 +1,7 @@ use magnus::{function, prelude::*, Error, Ruby}; -fn hello(subject: String) -> String { - format!("Hello from Rust, {subject}!") +pub fn hello(subject: String) -> String { + format!("Hello {subject}, from Rust!") } #[magnus::init] @@ -14,10 +14,10 @@ fn init(ruby: &Ruby) -> Result<(), Error> { #[cfg(test)] mod tests { use rb_sys_test_helpers::ruby_test; + use super::hello; #[ruby_test] fn test_hello() { - use magnus::RString; - assert_eq!(12, RString::new("rust ❤️ ruby").length()) + assert_eq!("Hello world, from Rust!", hello("world".to_string())); } } diff --git a/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt b/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt index 82cada988cd3..6552c4addd0a 100644 --- a/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +++ b/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt @@ -5,7 +5,15 @@ RSpec.describe <%= config[:constant_name] %> do expect(<%= config[:constant_name] %>::VERSION).not_to be nil end +<%- if config[:ext] == 'rust' -%> + it "can call into Rust" do + result = Testing.hello("world") + + expect(result).to be("Hello earth, from Rust!") + end +<%- else -%> it "does something useful" do expect(false).to eq(true) end +<%- end -%> end diff --git a/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt b/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt index 4b35a630714d..3c7d8b096efd 100644 --- a/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +++ b/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt @@ -7,7 +7,13 @@ class <%= config[:minitest_constant_name] %> < Minitest::Test refute_nil ::<%= config[:constant_name] %>::VERSION end +<%- if config[:ext] == 'rust' -%> + def test_hello_world + assert_equal "Hello earth, from Rust!", Testing.hello("world") + end +<%- else -%> def test_it_does_something_useful assert false end +<%- end -%> end diff --git a/bundler/spec/commands/newgem_spec.rb b/bundler/spec/commands/newgem_spec.rb index 6a6176c9db9a..a50c3c411d0a 100644 --- a/bundler/spec/commands/newgem_spec.rb +++ b/bundler/spec/commands/newgem_spec.rb @@ -1424,18 +1424,6 @@ def create_temporary_dir(dir) end end - context "--ext parameter set with rust and old RubyGems" do - it "fails in friendly way" do - if ::Gem::Version.new("3.3.11") <= ::Gem.rubygems_version - skip "RubyGems compatible with Rust builder" - end - - expect do - bundle ["gem", gem_name, "--ext=rust"].compact.join(" ") - end.to raise_error(RuntimeError, /too old to build Rust extension/) - end - end - context "--ext parameter set with rust" do let(:flags) { "--ext=rust" } @@ -1457,10 +1445,8 @@ def create_temporary_dir(dir) expect(bundled_app("#{gem_name}/ext/#{gem_name}/build.rs")).to exist end - it "includes rake-compiler, rb_sys gems and required_rubygems_version constraint" do + it "includes rake-compiler constraint" do expect(bundled_app("#{gem_name}/Gemfile").read).to include('gem "rake-compiler"') - expect(bundled_app("#{gem_name}/Gemfile").read).to include('gem "rb_sys"') - expect(bundled_app("#{gem_name}/#{gem_name}.gemspec").read).to include('spec.required_rubygems_version = ">= ') end it "depends on compile task for build" do @@ -1503,6 +1489,8 @@ def setup_rust_env system(env, "cargo", "-V", out: IO::NULL, err: [:child, :out]) skip "cargo not present" unless $?.success? + # Hermetic Cargo setup + RbConfig::CONFIG.each { |k, v| env["RBCONFIG_#{k}"] = v } env end end From 264d1d62d032ade4ee6ee7817dbb759d93abab9c Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 30 May 2024 23:07:10 -0400 Subject: [PATCH 05/10] Support rake-compiler-dock precompiled require pattern by default --- bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt b/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt index caf6e32f4abf..006c0cbabdb0 100644 --- a/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +++ b/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt @@ -2,7 +2,14 @@ require_relative "<%= File.basename(config[:namespaced_path]) %>/version" <%- if config[:ext] -%> -require_relative "<%= File.basename(config[:namespaced_path]) %>/<%= config[:underscored_name] %>" +# Attempt to load a versioned extension based on the Ruby version. +# Fall back to loading the non-versioned extension if version-specific loading fails. +begin + RUBY_VERSION =~ /(\d+\.\d+)/ + require "#{Regexp.last_match(1)}/<%= File.basename(config[:namespaced_path]) %>/<%= config[:underscored_name] %>" +rescue LoadError + require "<%= File.basename(config[:namespaced_path]) %>/<%= config[:underscored_name] %>" +end <%- end -%> <%- config[:constant_array].each_with_index do |c, i| -%> From fb32dc299f80d3e747cc8cb17ec5704f36a1cdf8 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 30 May 2024 23:10:03 -0400 Subject: [PATCH 06/10] Lint --- bundler/spec/commands/newgem_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundler/spec/commands/newgem_spec.rb b/bundler/spec/commands/newgem_spec.rb index 4851161baea5..2685500c9412 100644 --- a/bundler/spec/commands/newgem_spec.rb +++ b/bundler/spec/commands/newgem_spec.rb @@ -1516,7 +1516,7 @@ def setup_rust_env system(env, "cargo", "-V", out: IO::NULL, err: [:child, :out]) skip "cargo not present" unless $?.success? # Hermetic Cargo setup - RbConfig::CONFIG.each { |k, v| env["RBCONFIG_#{k}"] = v } + RbConfig::CONFIG.each {|k, v| env["RBCONFIG_#{k}"] = v } env end end From f7c037ee5c63a157349a2b61504427e4d9d4c8cd Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 30 May 2024 23:14:10 -0400 Subject: [PATCH 07/10] Lint --- bundler/lib/bundler/templates/newgem/Cargo.toml.tt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundler/lib/bundler/templates/newgem/Cargo.toml.tt b/bundler/lib/bundler/templates/newgem/Cargo.toml.tt index c838643d49bd..cd00f97e5a82 100644 --- a/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +++ b/bundler/lib/bundler/templates/newgem/Cargo.toml.tt @@ -10,4 +10,4 @@ resolver = "2" # By default, debug symbols are stripped from the final binary which makes it # harder to debug if something goes wrong. It's recommended to keep debug # symbols in the release build so that you can debug the final binary if needed. -debug = true \ No newline at end of file +debug = true From ac358f4b7a0fb074a1e2eb7003771813d61d94e3 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 30 May 2024 23:22:16 -0400 Subject: [PATCH 08/10] Support precompiled rust gems out of the box --- Manifest.txt | 1 + bundler/lib/bundler/cli/gem.rb | 10 +-- .../newgem/github/workflows/build-gems.yml.tt | 65 +++++++++++++++++++ 3 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 bundler/lib/bundler/templates/newgem/github/workflows/build-gems.yml.tt diff --git a/Manifest.txt b/Manifest.txt index e156e20b74d3..ad165bf32275 100644 --- a/Manifest.txt +++ b/Manifest.txt @@ -228,6 +228,7 @@ bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +bundler/lib/bundler/templates/newgem/github/workflows/build-gems.yml.tt bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt bundler/lib/bundler/templates/newgem/gitignore.tt bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt diff --git a/bundler/lib/bundler/cli/gem.rb b/bundler/lib/bundler/cli/gem.rb index 8cbb39d48406..ea7db3daf83b 100644 --- a/bundler/lib/bundler/cli/gem.rb +++ b/bundler/lib/bundler/cli/gem.rb @@ -136,6 +136,9 @@ def run case config[:ci] when "github" templates.merge!("github/workflows/main.yml.tt" => ".github/workflows/main.yml") + if extension == "rust" + templates.merge!("github/workflows/build-gems.yml.tt" => ".github/workflows/build-gems.yml") + end config[:ci_config_path] = ".github " when "gitlab" templates.merge!("gitlab-ci.yml.tt" => ".gitlab-ci.yml") @@ -447,12 +450,5 @@ def rubocop_version def standard_version "1.3" end - - def validate_rust_builder_rubygems_version - if Gem::Version.new(rust_builder_required_rubygems_version) > Gem.rubygems_version - Bundler.ui.error "Your RubyGems version (#{Gem.rubygems_version}) is too old to build Rust extension. Please update your RubyGems using `gem update --system` or any other way and try again." - exit 1 - end - end end end diff --git a/bundler/lib/bundler/templates/newgem/github/workflows/build-gems.yml.tt b/bundler/lib/bundler/templates/newgem/github/workflows/build-gems.yml.tt new file mode 100644 index 000000000000..2c387f0c1406 --- /dev/null +++ b/bundler/lib/bundler/templates/newgem/github/workflows/build-gems.yml.tt @@ -0,0 +1,65 @@ +--- +name: Build gems + +on: + push: + tags: + - "v*" + - "cross-gem/*" + workflow_dispatch: + +jobs: + ci-data: + runs-on: ubuntu-latest + outputs: + result: ${{ steps.fetch.outputs.result }} + steps: + - uses: oxidize-rb/actions/fetch-ci-data@v1 + id: fetch + with: + supported-ruby-platforms: | + exclude: ["arm-linux", "x64-mingw32"] + stable-ruby-versions: | + exclude: ["2.5", "2.6", "2.7", "head"] + + source-gem: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 + with: + bundler-cache: true + + - name: Build gem + run: bundle exec rake build + + - uses: actions/upload-artifact@v3 + with: + name: source-gem + path: pkg/*.gem + + cross-gem: + name: Compile native gem for ${{ matrix.platform }} + runs-on: ubuntu-latest + needs: ci-data + strategy: + matrix: + platform: ${{ fromJSON(needs.ci-data.outputs.result).supported-ruby-platforms }} + steps: + - uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 + with: + bundler-cache: true + + - uses: oxidize-rb/actions/cross-gem@v1 + id: cross-gem + with: + platform: ${{ matrix.platform }} + ruby-versions: ${{ join(fromJSON(needs.ci-data.outputs.result).stable-ruby-versions, ',') }} + + - uses: actions/upload-artifact@v3 + with: + name: cross-gem + path: ${{ steps.cross-gem.outputs.gem-path }} From 376ace61d8e77e8cf1935dc254370d0b83e52750 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 30 May 2024 23:28:13 -0400 Subject: [PATCH 09/10] Remove rubygems version constraint in cli --- bundler/lib/bundler/cli/gem.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/bundler/lib/bundler/cli/gem.rb b/bundler/lib/bundler/cli/gem.rb index ea7db3daf83b..790d5b363175 100644 --- a/bundler/lib/bundler/cli/gem.rb +++ b/bundler/lib/bundler/cli/gem.rb @@ -31,7 +31,6 @@ def initialize(options, gem_name, thor) @extension = options[:ext] validate_ext_name if @extension - validate_rust_builder_rubygems_version if @extension == "rust" end def run From bea50ba007cd94cab1922feb62c70ba933021768 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 30 May 2024 23:30:19 -0400 Subject: [PATCH 10/10] Remove hard coded constant --- bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt | 2 +- .../bundler/templates/newgem/test/minitest/test_newgem.rb.tt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt b/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt index 6552c4addd0a..dd39342f7885 100644 --- a/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +++ b/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt @@ -7,7 +7,7 @@ RSpec.describe <%= config[:constant_name] %> do <%- if config[:ext] == 'rust' -%> it "can call into Rust" do - result = Testing.hello("world") + result = <%= config[:constant_name] %>.hello("world") expect(result).to be("Hello earth, from Rust!") end diff --git a/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt b/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt index 3c7d8b096efd..9a859fa4d1ed 100644 --- a/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +++ b/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt @@ -9,7 +9,7 @@ class <%= config[:minitest_constant_name] %> < Minitest::Test <%- if config[:ext] == 'rust' -%> def test_hello_world - assert_equal "Hello earth, from Rust!", Testing.hello("world") + assert_equal "Hello earth, from Rust!", <%= config[:constant_name] %>.hello("world") end <%- else -%> def test_it_does_something_useful