From 8e3136a03bdaf1aa405a07e689206080f3dfed7b Mon Sep 17 00:00:00 2001 From: Frank Lam Date: Sat, 30 May 2020 17:06:57 +0800 Subject: [PATCH] [rubygems/rubygems] Make test framework/CI configuration for bundle gem consistent * Add hints for --ci option https://github.com/rubygems/rubygems/commit/5f779f45b0 --- lib/bundler/cli.rb | 6 ++-- lib/bundler/cli/gem.rb | 26 ++++++++++----- spec/bundler/commands/newgem_spec.rb | 49 ++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 11 deletions(-) diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb index 07f35d5709..8dd5315771 100644 --- a/lib/bundler/cli.rb +++ b/lib/bundler/cli.rb @@ -574,8 +574,10 @@ module Bundler method_option :mit, :type => :boolean, :desc => "Generate an MIT license file. Set a default with `bundle config set gem.mit true`." method_option :rubocop, :type => :boolean, :desc => "Add rubocop to the generated Rakefile and gemspec. Set a default with `bundle config set gem.rubocop true`." method_option :test, :type => :string, :lazy_default => Bundler.settings["gem.test"] || "", :aliases => "-t", :banner => "Use the specified test framework for your library", - :desc => "Generate a test directory for your library, either rspec, minitest or test-unit. Set a default with `bundle config set gem.test rspec`." - method_option :ci, :type => :string, :desc => "Generate CI configuration, either GitHub Actions, Travis CI, GitLab CI or CircleCI. Set a default with `bundle config set gem.ci (github|travis|gitlab|circle)`" + :desc => "Generate a test directory for your library, either rspec, minitest or test-unit. Set a default with `bundle config set gem.test (rspec|minitest|test-unit)`." + method_option :ci, :type => :string, :lazy_default => Bundler.settings["gem.ci"] || "", + :desc => "Generate CI configuration, either GitHub Actions, Travis CI, GitLab CI or CircleCI. Set a default with `bundle config set gem.ci (github|travis|gitlab|circle)`" + def gem(name) end diff --git a/lib/bundler/cli/gem.rb b/lib/bundler/cli/gem.rb index 1303a883f6..05a5537d74 100644 --- a/lib/bundler/cli/gem.rb +++ b/lib/bundler/cli/gem.rb @@ -193,6 +193,12 @@ module Bundler "so -t is not needed if you want to continue using it. " \ "This setting can be changed anytime with `bundle config gem.test`." end + + if options[:ci] == Bundler.settings["gem.ci"] + Bundler.ui.info "Bundler is configured to generate CI files for #{Bundler.settings["gem.ci"]}, "\ + "so --ci is not needed if you want to continue using it. " \ + "This setting can be changed anytime with `bundle config gem.ci`." + end rescue Errno::EEXIST => e raise GenericSystemCallError.new(e, "There was a conflict while creating the new gem.") end @@ -231,8 +237,9 @@ module Bundler if test_framework.to_s.empty? Bundler.ui.confirm "Do you want to generate tests with your gem?" - Bundler.ui.info test_framework_hint - result = Bundler.ui.ask "Type 'rspec', 'minitest' or 'test-unit' to generate those test files now. " \ + Bundler.ui.info hint_text("test") + + result = Bundler.ui.ask "Enter a framework name to generate those test files now. " \ "rspec/minitest/test-unit/(none):" if result =~ /rspec|minitest|test-unit/ test_framework = result @@ -248,30 +255,31 @@ module Bundler test_framework end - def test_framework_hint - if Bundler.settings["gem.test"] == false + def hint_text(setting) + if Bundler.settings["gem.#{setting}"] == false "Your choice will only be applied to this gem." else "Future `bundle gem` calls will use your choice. " \ - "This setting can be changed anytime with `bundle config gem.test`." + "This setting can be changed anytime with `bundle config gem.#{setting}`." end end def ask_and_set_ci ci_template = options[:ci] || Bundler.settings["gem.ci"] - if ci_template.nil? + if ci_template.to_s.empty? Bundler.ui.confirm "Do you want to set up automated testing for your gem? " \ "Continuous integration services make it easy to see if pull requests have passing tests " \ - "before you merge them. Bundler supports these services:" \ + "before you merge them. Bundler supports these services:\n" \ "* CircleCI: https://circleci.com/\n" \ "* GitHub Actions: https://github.com/features/actions\n" \ "* GitLab CI: https://docs.gitlab.com/ee/ci/\n" \ "* Travis CI: https://travis-ci.org/\n" \ "\n" + Bundler.ui.info hint_text("ci") - result = Bundler.ui.ask "Enter a service name to generate a CI configuration now and " \ - "in the future. github/travis/gitlab/circle/(none):" + result = Bundler.ui.ask "Enter a service name to generate a CI configuration now. " \ + "github/travis/gitlab/circle/(none):" if result =~ /github|travis|gitlab|circle/ ci_template = result else diff --git a/spec/bundler/commands/newgem_spec.rb b/spec/bundler/commands/newgem_spec.rb index d78bc8a723..67166b3ab7 100644 --- a/spec/bundler/commands/newgem_spec.rb +++ b/spec/bundler/commands/newgem_spec.rb @@ -739,6 +739,55 @@ RSpec.describe "bundle gem" do end end + context "gem.ci set to github and --ci with no arguments", :hint_text do + before do + bundle "config set gem.ci github" + bundle! "gem #{gem_name} --ci" + end + + it "generates a GitHub Actions config file" do + expect(bundled_app("#{gem_name}/.github/workflows/main.yml")).to exist + end + + it "hints that --ci is not needed" do + hint = "Bundler is configured to generate CI files for github, "\ + "so --ci is not needed if you want to continue using it. " \ + "This setting can be changed anytime with `bundle config gem.ci`." + expect(out).to match(hint) + end + end + + context "gem.ci setting set to false and --ci with no arguments", :hint_text do + before do + bundle "config set gem.ci false" + bundle! "gem #{gem_name} --ci" + end + + it "asks to setup CI" do + expect(out).to match("Do you want to set up automated testing for your gem?") + end + + it "hints that the choice will only be applied to the current gem" do + expect(out).to match("Your choice will only be applied to this gem.") + end + end + + context "gem.ci setting not set and --ci with no arguments", :hint_text do + before do + bundle! "gem #{gem_name} --ci" + end + + it "asks to setup CI" do + expect(out).to match("Do you want to set up automated testing for your gem?") + end + + it "hints that the choice will be applied to future bundle gem calls" do + hint = "Future `bundle gem` calls will use your choice. " \ + "This setting can be changed anytime with `bundle config gem.ci`." + expect(out).to match(hint) + end + end + context "--edit option" do it "opens the generated gemspec in the user's text editor" do output = bundle "gem #{gem_name} --edit=echo"