mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Manually cherry-picked at 80260b3496
This commit is contained in:
parent
9be1baedbc
commit
cc059b16b2
Notes:
git
2020-06-18 19:15:17 +09:00
6 changed files with 189 additions and 4 deletions
|
@ -575,6 +575,7 @@ module Bundler
|
||||||
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 :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",
|
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`."
|
: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 Circle CI. Set a default with `bundle config set gem.ci (github|travis|gitlab|circle)`"
|
||||||
def gem(name)
|
def gem(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -84,8 +84,6 @@ module Bundler
|
||||||
config[:test] = test_framework
|
config[:test] = test_framework
|
||||||
config[:test_framework_version] = TEST_FRAMEWORK_VERSIONS[test_framework]
|
config[:test_framework_version] = TEST_FRAMEWORK_VERSIONS[test_framework]
|
||||||
|
|
||||||
templates.merge!("travis.yml.tt" => ".travis.yml")
|
|
||||||
|
|
||||||
case test_framework
|
case test_framework
|
||||||
when "rspec"
|
when "rspec"
|
||||||
templates.merge!(
|
templates.merge!(
|
||||||
|
@ -109,6 +107,25 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if ci_template = ask_and_set_ci
|
||||||
|
config[:ci] = ci_template
|
||||||
|
|
||||||
|
case ci_template
|
||||||
|
when "github"
|
||||||
|
templates.merge!(".github/workflows/main.yml.tt" => ".github/workflows/main.yml")
|
||||||
|
config[:ci] = "github"
|
||||||
|
when "travis"
|
||||||
|
templates.merge!("travis.yml.tt" => ".travis.yml")
|
||||||
|
config[:ci] = "travis"
|
||||||
|
when "gitlab"
|
||||||
|
templates.merge!(".gitlab-ci.yml.tt" => ".gitlab-ci.yml")
|
||||||
|
config[:ci] = "gitlab"
|
||||||
|
when "circle"
|
||||||
|
templates.merge!(".circleci/config.yml.tt" => ".circleci/config.yml")
|
||||||
|
config[:ci] = "circleci"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if ask_and_set(:mit, "Do you want to license your code permissively under the MIT license?",
|
if ask_and_set(:mit, "Do you want to license your code permissively under the MIT license?",
|
||||||
"This means that any other developer or company will be legally allowed to use your code " \
|
"This means that any other developer or company will be legally allowed to use your code " \
|
||||||
"for free as long as they admit you created it. You can read more about the MIT license " \
|
"for free as long as they admit you created it. You can read more about the MIT license " \
|
||||||
|
@ -247,6 +264,35 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ask_and_set_ci
|
||||||
|
ci_template = options[:ci] || Bundler.settings["gem.ci"]
|
||||||
|
|
||||||
|
if ci_template.nil?
|
||||||
|
Bundler.ui.confirm "Do you want to add Continuous Integration to your gem? " \
|
||||||
|
"Adding a CI service to your project helps ensure your project is well tested " \
|
||||||
|
"before shipping your gem to users. Bundler recommends several different services for testing "\
|
||||||
|
"your code. For more information about each service, see:\n" \
|
||||||
|
"* Travis CI: https://travis-ci.org/\n" \
|
||||||
|
"* Github Actions: https://github.com/features/actions\n" \
|
||||||
|
"* Circle CI: https://circleci.com/\n" \
|
||||||
|
"* Gitlab CI: https://docs.gitlab.com/ee/ci/\n\n"
|
||||||
|
|
||||||
|
result = Bundler.ui.ask "Type 'github', 'travis', 'gitlab' or 'circle' to generate those test files now and " \
|
||||||
|
"in the future. github/travis/gitlab/circle/(none):"
|
||||||
|
if result =~ /github|travis|gitlab|circle/
|
||||||
|
ci_template = result
|
||||||
|
else
|
||||||
|
ci_template = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if Bundler.settings["gem.ci"].nil?
|
||||||
|
Bundler.settings.set_global("gem.ci", ci_template)
|
||||||
|
end
|
||||||
|
|
||||||
|
ci_template
|
||||||
|
end
|
||||||
|
|
||||||
def bundler_dependency_version
|
def bundler_dependency_version
|
||||||
v = Gem::Version.new(Bundler::VERSION)
|
v = Gem::Version.new(Bundler::VERSION)
|
||||||
req = v.segments[0..1]
|
req = v.segments[0..1]
|
||||||
|
|
13
lib/bundler/templates/newgem/.circleci/config.yml.tt
Normal file
13
lib/bundler/templates/newgem/.circleci/config.yml.tt
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
version: 2.1
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
docker:
|
||||||
|
- image: ruby:<%= RUBY_VERSION %>
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
name: Run tests
|
||||||
|
command: |
|
||||||
|
gem install bundler -v <%= Bundler::Version %>
|
||||||
|
bundle install
|
||||||
|
bundle exec rake test
|
18
lib/bundler/templates/newgem/.github/workflows/main.yml.tt
vendored
Normal file
18
lib/bundler/templates/newgem/.github/workflows/main.yml.tt
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
name: Ruby
|
||||||
|
|
||||||
|
on: [push,pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Ruby <%= ::Gem::Version.new(RUBY_VERSION).segments[0..1].join(".") %>
|
||||||
|
uses: actions/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: <%= ::Gem::Version.new(RUBY_VERSION).segments[0..1].join(".") %>.x
|
||||||
|
- name: Build and test with Rake
|
||||||
|
run: |
|
||||||
|
gem install bundler -v <%= Bundler::VERSION %>
|
||||||
|
bundle install --jobs 4 --retry 3
|
||||||
|
bundle exec rake
|
9
lib/bundler/templates/newgem/.gitlab-ci.yml.tt
Normal file
9
lib/bundler/templates/newgem/.gitlab-ci.yml.tt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
image: ruby:<%= RUBY_VERSION %>
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- gem install bundler -v <%= Bundler::VERSION %>
|
||||||
|
- bundle install
|
||||||
|
|
||||||
|
example_job:
|
||||||
|
script:
|
||||||
|
- bundle exec rake
|
|
@ -585,6 +585,94 @@ RSpec.describe "bundle gem" do
|
||||||
it_behaves_like "test framework is present"
|
it_behaves_like "test framework is present"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "--ci with no arugment" do
|
||||||
|
it "does not generate any CI config" do
|
||||||
|
bundle "gem #{gem_name}"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/.github/workflows/main.yml")).to_not exist
|
||||||
|
expect(bundled_app("#{gem_name}/.travis.yml")).to_not exist
|
||||||
|
expect(bundled_app("#{gem_name}/.gitlab-ci.yml")).to_not exist
|
||||||
|
expect(bundled_app("#{gem_name}/.circleci/config.yml")).to_not exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "--ci set to github" do
|
||||||
|
it "generates a Github Actions config file" do
|
||||||
|
bundle "gem #{gem_name} --ci=github"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/.github/workflows/main.yml")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "--ci set to gitlab" do
|
||||||
|
it "generates a Gitlab Ci config file" do
|
||||||
|
bundle "gem #{gem_name} --ci=gitlab"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/.gitlab-ci.yml")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "--ci set to circle" do
|
||||||
|
it "generates a Circle Ci config file" do
|
||||||
|
bundle "gem #{gem_name} --ci=circle"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/.circleci/config.yml")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "--ci set to travis" do
|
||||||
|
it "generates a Travis Ci config file" do
|
||||||
|
bundle "gem #{gem_name} --ci=travis"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/.travis.yml")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "gem.ci setting set to none" do
|
||||||
|
it "doesnt generate any CI config" do
|
||||||
|
expect(bundled_app("#{gem_name}/.github/workflows/main.yml")).to_not exist
|
||||||
|
expect(bundled_app("#{gem_name}/.travis.yml")).to_not exist
|
||||||
|
expect(bundled_app("#{gem_name}/.gitlab-ci.yml")).to_not exist
|
||||||
|
expect(bundled_app("#{gem_name}/.circleci/config.yml")).to_not exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "gem.ci setting set to github" do
|
||||||
|
it "generates a Github Actions config file" do
|
||||||
|
bundle "config set gem.ci github"
|
||||||
|
bundle "gem #{gem_name}"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/.github/workflows/main.yml")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "gem.ci setting set to travis" do
|
||||||
|
it "generates a Travis config file" do
|
||||||
|
bundle "config set gem.ci travis"
|
||||||
|
bundle "gem #{gem_name}"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/.travis.yml")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "gem.ci setting set to gitlab" do
|
||||||
|
it "generates a Gitlab config file" do
|
||||||
|
bundle "config set gem.ci gitlab"
|
||||||
|
bundle "gem #{gem_name}"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/.gitlab-ci.yml")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "gem.ci setting set to circleci" do
|
||||||
|
it "generates a CircleCI config file" do
|
||||||
|
bundle "config set gem.ci circle"
|
||||||
|
bundle "gem #{gem_name}"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/.circleci/config.yml")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "gem.test setting set to test-unit" do
|
context "gem.test setting set to test-unit" do
|
||||||
before do
|
before do
|
||||||
bundle "config set gem.test test-unit"
|
bundle "config set gem.test test-unit"
|
||||||
|
@ -875,8 +963,18 @@ Usage: "bundle gem NAME [OPTIONS]"
|
||||||
expect(bundled_app("foobar/Gemfile").read).to include('gem "rspec"')
|
expect(bundled_app("foobar/Gemfile").read).to include('gem "rspec"')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "asks about CI service" do
|
||||||
|
global_config "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__COC" => "false", "BUNDLE_GEM__RUBOCOP" => "false"
|
||||||
|
|
||||||
|
bundle! "gem foobar" do |input, _, _|
|
||||||
|
input.puts "github"
|
||||||
|
end
|
||||||
|
|
||||||
|
expect(bundled_app("foobar/.github/workflows/main.yml")).to exist
|
||||||
|
end
|
||||||
|
|
||||||
it "asks about MIT license" do
|
it "asks about MIT license" do
|
||||||
global_config "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false"
|
global_config "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false", "BUNDLE_GEM__CI" => "false", "BUNDLE_GEM__RUBOCOP" => "false"
|
||||||
|
|
||||||
bundle "config list"
|
bundle "config list"
|
||||||
|
|
||||||
|
@ -888,7 +986,7 @@ Usage: "bundle gem NAME [OPTIONS]"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "asks about CoC" do
|
it "asks about CoC" do
|
||||||
global_config "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__TEST" => "false"
|
global_config "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__CI" => "false", "BUNDLE_GEM__RUBOCOP" => "false"
|
||||||
|
|
||||||
bundle! "gem foobar" do |input, _, _|
|
bundle! "gem foobar" do |input, _, _|
|
||||||
input.puts "yes"
|
input.puts "yes"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue