Skip to content

Commit

Permalink
[rubygems/rubygems] Make test framework/CI configuration for bundle g…
Browse files Browse the repository at this point in the history
…em consistent

* Add hints for --ci option

rubygems/rubygems@5f779f45b0
  • Loading branch information
FTLam11 authored and hsbt committed Jun 18, 2020
1 parent a80a570 commit 8e3136a
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 11 deletions.
6 changes: 4 additions & 2 deletions lib/bundler/cli.rb
Expand Up @@ -574,8 +574,10 @@ def viz
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

Expand Down
26 changes: 17 additions & 9 deletions lib/bundler/cli/gem.rb
Expand Up @@ -193,6 +193,12 @@ def run
"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
Expand Down Expand Up @@ -231,8 +237,9 @@ def ask_and_set_test_framework

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
Expand All @@ -248,30 +255,31 @@ def ask_and_set_test_framework
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
Expand Down
49 changes: 49 additions & 0 deletions spec/bundler/commands/newgem_spec.rb
Expand Up @@ -739,6 +739,55 @@ def create_temporary_dir(dir)
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"
Expand Down

0 comments on commit 8e3136a

Please sign in to comment.