1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[rubygems/rubygems] Make test framework/CI configuration for bundle gem consistent

* Add hints for --ci option

https://github.com/rubygems/rubygems/commit/5f779f45b0
This commit is contained in:
Frank Lam 2020-05-30 17:06:57 +08:00 committed by Hiroshi SHIBATA
parent a80a5706b1
commit 8e3136a03b
Notes: git 2020-06-18 19:15:12 +09:00
3 changed files with 70 additions and 11 deletions

View file

@ -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

View file

@ -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

View file

@ -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"