boring_generators 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1c4e7578120facf94b1e17cadcb9e62f008ffec728658d650842d19ee931b82
4
- data.tar.gz: 7a026a5987aec9f8e3ee38dd1218e48908e0df5891fcb0d8e9f91a904f9985f9
3
+ metadata.gz: 69a40221e1b2d89fde7e887f6f0b92f8d972548c000b363b4eab025f613844bc
4
+ data.tar.gz: c0f61c22deabdb64366d9d11b9e01f8cd6f09ca6b576f01342c0c455e70325ba
5
5
  SHA512:
6
- metadata.gz: aae856dd9081e7ab70e7d750f585474de515baf8a09c79d0ffef180162aeb1bb5317703ffc0f392ca6bc997ee36775ac1fe5f12e442339a73b5d50ac1df1fa5d
7
- data.tar.gz: d4cce2e4bf333a907e7ace4fdb56c0218c4832f047aa644f019246fa3504ab6d21c2c49713d95df289d6507c76e9772a80dec965eb2657445d641833a3e69a00
6
+ metadata.gz: 65ac7ade20d72cc641bda7282f66fca33e330ff891fad2f4eaffce20914a0776e02e7afba1da2553308c54b56bd46362e1dd3c0c76ddae36c632013b72f36dc8
7
+ data.tar.gz: fc30ecc6102379477e7c05a97657318ed2e22560acf3098154a1da45d9d0ad2426677caa90a86e755b7a2080f0183be92f345aada6f89f8b39d923a61bbf4208
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 0.15.0 (Aug 4th, 2024)
6
+
7
+ * Adds Gitlab CI generator. ([@coolprobn][])
8
+
5
9
  ## 0.14.0 (Aug 4th, 2024)
6
10
 
7
11
  - Adds Figjam generator. ([@mausamp][])
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- boring_generators (0.13.0)
4
+ boring_generators (0.14.0)
5
5
  railties
6
6
 
7
7
  GEM
@@ -143,4 +143,4 @@ DEPENDENCIES
143
143
  sqlite3 (~> 1.4)
144
144
 
145
145
  BUNDLED WITH
146
- 2.2.33
146
+ 2.4.10
data/README.md CHANGED
@@ -97,6 +97,7 @@ The boring generator introduces following generators:
97
97
  - Install Rails ERD: `rails generate boring:rails_erd:install`
98
98
  - Install Annotate: `rails generate boring:annotate:install`
99
99
  - Install CanCanCan: `rails generate boring:cancancan:install`
100
+ - Install Gitlab CI: `rails generate boring:ci:gitlab_ci:install`
100
101
 
101
102
  ## Screencasts
102
103
 
@@ -3,9 +3,9 @@ module BoringGenerators
3
3
  include Rails::Generators::Actions
4
4
 
5
5
  def app_ruby_version
6
- with_ruby_string = `grep "^ruby.*$" Gemfile` || `cat .ruby-version`
6
+ with_ruby_string = File.read("Gemfile")[/^ruby\s+["']?([\d.]+)["']?/] || File.read(".ruby-version").strip
7
7
 
8
- # only keep 3.3.0
8
+ # only keep 3.3.0 from ruby-3.3.0
9
9
  with_ruby_string.gsub(/[^\d\.]/, "").squish
10
10
  end
11
11
 
@@ -30,5 +30,17 @@ module BoringGenerators
30
30
 
31
31
  bundle_install
32
32
  end
33
+
34
+ def inject_into_file_if_new(*args)
35
+ file_name, content_to_add, = args
36
+
37
+ file_content = File.read(file_name)
38
+
39
+ content_exists = file_content.include?(content_to_add)
40
+
41
+ return if content_exists
42
+
43
+ inject_into_file *args
44
+ end
33
45
  end
34
46
  end
@@ -1,3 +1,3 @@
1
1
  module BoringGenerators
2
- VERSION = "0.14.0"
2
+ VERSION = "0.15.0"
3
3
  end
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "boring_generators/generator_helper"
4
+
5
+ module Boring
6
+ module Ci
7
+ module GitlabCi
8
+ class InstallGenerator < Rails::Generators::Base
9
+ desc "Adds Gitlab CI to the application"
10
+ source_root File.expand_path("templates", __dir__)
11
+
12
+ class_option :ruby_version,
13
+ aliases: "-rv",
14
+ type: :string,
15
+ desc:
16
+ "Ruby version used by your app. Defaults to .ruby_version or the version specified in your Gemfile."
17
+ class_option :app_test_framework,
18
+ aliases: "-tf",
19
+ type: :string,
20
+ enum: %w[minitest rspec],
21
+ default: "minitest",
22
+ desc:
23
+ "Tell us the test framework you use for the application. Defaults to Minitest."
24
+ class_option :environment_variable_manager,
25
+ aliases: "-evm",
26
+ type: :string,
27
+ enum: %w[rails_credentials dotenv figjam],
28
+ default: "rails_credentials",
29
+ desc:
30
+ "Tell us the environment variable manager you use. Defaults to Rails Credentials"
31
+ class_option :database,
32
+ aliases: "-d",
33
+ type: :string,
34
+ enum: %w[sqlite3 postgresql mysql],
35
+ default: "sqlite3",
36
+ desc: "Tell us the database you use in your app"
37
+ class_option :skip_sample_tests,
38
+ aliases: "-stt",
39
+ type: :boolean,
40
+ default: false,
41
+ desc:
42
+ "Skip sample tests. Useful when you are configuring Gitlab CI for existing Rails app"
43
+
44
+ include BoringGenerators::GeneratorHelper
45
+
46
+ def add_gitlab_ci_configurations
47
+ @ruby_version = options[:ruby_version] || app_ruby_version
48
+ @app_test_framework = options[:app_test_framework]
49
+ @environment_variable_manager = options[:environment_variable_manager]
50
+ @database = options[:database]
51
+
52
+ template("ci.yml", ".gitlab-ci.yml")
53
+ template("database.yml.ci", "config/database.yml.ci")
54
+ end
55
+
56
+ def add_gems_for_system_test
57
+ check_and_install_gem "capybara", group: :test
58
+ check_and_install_gem "selenium-webdriver", group: :test
59
+ end
60
+
61
+ def add_capybara_configurations
62
+ if options[:app_test_framework] == "minitest"
63
+ template("capybara_helper.rb", "test/helpers/capybara.rb")
64
+
65
+ inject_into_file_if_new "test/application_system_test_case.rb",
66
+ "require \"helpers/capybara\"\n",
67
+ before: "class ApplicationSystemTestCase"
68
+ gsub_file "test/application_system_test_case.rb",
69
+ /driven_by :selenium, using: :(?:chrome|headless_chrome).*\n/,
70
+ "driven_by :selenium_chrome_custom"
71
+
72
+ capybara_setup = <<-RUBY
73
+ \n
74
+ def setup
75
+ Capybara.server_host = "0.0.0.0" # bind to all interfaces
76
+ Capybara.server_port = 3000
77
+
78
+ if ENV["SELENIUM_REMOTE_URL"].present?
79
+ ip = Socket.ip_address_list.detect(&:ipv4_private?).ip_address
80
+ Capybara.app_host = "http://\#{ip}:\#{Capybara.server_port}"
81
+ end
82
+
83
+ super
84
+ end
85
+ RUBY
86
+
87
+ inject_into_file_if_new "test/application_system_test_case.rb",
88
+ optimize_indentation(
89
+ capybara_setup,
90
+ amount = 2
91
+ ),
92
+ after: "driven_by :selenium_chrome_custom"
93
+ else
94
+ template("capybara_helper.rb", "spec/support/capybara.rb")
95
+
96
+ inject_into_file_if_new "spec/rails_helper.rb",
97
+ "require_relative \"./support/capybara\"\n\n",
98
+ before: "RSpec.configure do |config|"
99
+ end
100
+ end
101
+
102
+ def add_sample_tests
103
+ return if options[:skip_sample_tests]
104
+
105
+ if options[:app_test_framework] == "minitest"
106
+ template("unit_sample_test.rb", "test/models/sample_test.rb")
107
+ template("system_sample_test.rb", "test/system/sample_test.rb")
108
+ else
109
+ template("unit_sample_spec.rb", "spec/models/sample_spec.rb")
110
+ template("system_sample_spec.rb", "spec/system/sample_spec.rb")
111
+ end
112
+ end
113
+
114
+ def show_readme
115
+ readme "README"
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,10 @@
1
+
2
+ ===============================================================================
3
+
4
+ You need to update your project's Gitlab CI variable configurations for the Gitlab CI to work correctly. Please take care of the following:
5
+
6
+ - Add your Gitlab personal access token under the variable `PRONTO_ACCESS_TOKEN`
7
+ - Copy your application's environment variables under `env` variable in CI/CD
8
+ - Add your Master Key required for decoding secret values under the variable `MASTER_KEY`
9
+
10
+ ===============================================================================
@@ -0,0 +1,42 @@
1
+ require "selenium-webdriver"
2
+
3
+ Capybara.register_driver :selenium_chrome_custom do |app|
4
+ options = Selenium::WebDriver::Chrome::Options.new
5
+
6
+ options.add_argument("--headless=new") unless ENV["SELENIUM_HEADFUL"]
7
+
8
+ options.add_argument("--window-size=1400,1400")
9
+ options.add_argument("--no-sandbox")
10
+ options.add_argument("--disable-dev-shm-usage")
11
+
12
+ remote_url = ENV.fetch("SELENIUM_REMOTE_URL", nil)
13
+
14
+ if remote_url
15
+ Capybara::Selenium::Driver.new(
16
+ app,
17
+ browser: :remote,
18
+ url: remote_url,
19
+ options:
20
+ )
21
+ else
22
+ Capybara::Selenium::Driver.new(app, browser: :chrome, options:)
23
+ end
24
+ end
25
+
26
+ <%- if @app_test_framework == "rspec" -%>
27
+ RSpec.configure do |config|
28
+ config.before(:each, type: :system, js: true) do
29
+ # Make the test app listen to outside requests, required for the remote Selenium instance
30
+ Capybara.server_host = "0.0.0.0"
31
+ Capybara.server_port = 3000
32
+
33
+ if ENV.fetch("SELENIUM_REMOTE_URL", nil)
34
+ # Use the application container's IP instead of localhost so Capybara knows where to direct Selenium
35
+ ip = Socket.ip_address_list.detect(&:ipv4_private?).ip_address
36
+ Capybara.app_host = "http://#{ip}:#{Capybara.server_port}"
37
+ end
38
+
39
+ driven_by :selenium_chrome_custom
40
+ end
41
+ end
42
+ <%- end -%>
@@ -0,0 +1,94 @@
1
+ image: ruby:<%= @ruby_version %>
2
+
3
+ variables:
4
+ MASTER_KEY: $MASTER_KEY
5
+
6
+ cache:
7
+ paths:
8
+ - vendor/
9
+ <%- if File.exist?("package.json") -%>
10
+ - node_modules/
11
+ - yarn.lock
12
+ <%- end -%>
13
+
14
+ stages:
15
+ - test
16
+
17
+ .base_db:
18
+ <%- if @database == "postgresql" -%>
19
+ services:
20
+ - postgres:latest
21
+ <%- elsif @database == "mysql" -%>
22
+ services:
23
+ - mysql:latest
24
+ <%- end -%>
25
+ variables:
26
+ RAILS_ENV: test
27
+ <%- if @database == "postgresql" -%>
28
+ POSTGRES_HOST_AUTH_METHOD: trust
29
+ <%- end -%>
30
+ <%- if @database == "mysql" -%>
31
+ MYSQL_ALLOW_EMPTY_PASSWORD: true
32
+ <%- end -%>
33
+ before_script:
34
+ - gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)" --no-document
35
+ - bundle config set --local path 'vendor'
36
+ <%- if File.exist?("package.json") -%>
37
+ - apt-get update -qq && apt-get install -y -qq nodejs
38
+ - curl -o- -L https://yarnpkg.com/install.sh | bash
39
+ - export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
40
+ - yarn install --pure-lockfile
41
+ <%- end -%>
42
+ <%- if @database == "sqlite3" -%>
43
+ - apt-get update && apt-get install --no-install-recommends -y sqlite3
44
+ <%- end -%>
45
+ - apt-get update && apt-get install --no-install-recommends -y cmake
46
+ - bundle install --jobs $(nproc)
47
+ - cp config/database.yml.ci config/database.yml
48
+ <%- if @environment_variable_manager == "dotenv" -%>
49
+ - cat $env > .env
50
+ <%- elsif @environment_variable_manager == "figjam" -%>
51
+ - cat $env > config/application.yml
52
+ <%- end -%>
53
+ - bundle exec rails db:test:prepare
54
+
55
+ unit_and_integration_tests:
56
+ extends: .base_db
57
+ stage: test
58
+ only:
59
+ - merge_requests
60
+ script:
61
+ <%- if @app_test_framework == "rspec" -%>
62
+ - bundle exec rspec --exclude-pattern "spec/system/**/*.rb"
63
+ <%- else -%>
64
+ - bundle exec rails test
65
+ <%- end -%>
66
+
67
+ system_tests:
68
+ extends: .base_db
69
+ stage: test
70
+ services:
71
+ - name: selenium/standalone-chrome:latest
72
+ alias: selenium
73
+ <%- if @database == "postgresql" -%>
74
+ - postgres:latest
75
+ <%- elsif @database == "mysql" -%>
76
+ - mysql:latest
77
+ <%- end -%>
78
+ variables:
79
+ RAILS_ENV: test
80
+ SELENIUM_REMOTE_URL: http://selenium:4444/wd/hub
81
+ only:
82
+ - merge_requests
83
+ script:
84
+ <%- if @app_test_framework == "rspec" -%>
85
+ - bundle exec rspec spec/system
86
+ <%- else -%>
87
+ - bundle exec rails test:system
88
+ <%- end -%>
89
+ artifacts:
90
+ when: on_failure
91
+ paths:
92
+ - log/test.log
93
+ - tmp/screenshots/
94
+ expire_in: 1 week
@@ -0,0 +1,20 @@
1
+ test:
2
+ <%- if @database == "postgresql" -%>
3
+ adapter: postgresql
4
+ encoding: unicode
5
+ host: postgres
6
+ username: postgres
7
+ <%- elsif @database == "mysql" -%>
8
+ adapter: mysql2
9
+ encoding: utf8mb4
10
+ host: mysql
11
+ username: root
12
+ socket: /tmp/mysql.sock
13
+ <%- else -%>
14
+ adapter: sqlite3
15
+ database: db/test.sqlite3
16
+ <%- end -%>
17
+ <%- unless @database == "sqlite3" -%>
18
+ database: ci_db
19
+ <%- end -%>
20
+ pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
@@ -0,0 +1,14 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe "Sample System Test", type: :system, js: true do
4
+ it "checks if the system test is configured correctly" do
5
+ visit rails_health_check_path
6
+
7
+ # expect page body to have green background
8
+ expect(
9
+ page.evaluate_script(
10
+ "window.getComputedStyle(document.body).backgroundColor"
11
+ )
12
+ ).to eq("rgb(0, 128, 0)")
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ require "application_system_test_case"
2
+
3
+ class SampleTest < ApplicationSystemTestCase
4
+ test "checks if the system test is configured correctly" do
5
+ visit rails_health_check_path
6
+
7
+ # assert page body has green background
8
+ assert_equal "rgb(0, 128, 0)",
9
+ page.evaluate_script(
10
+ "window.getComputedStyle(document.body).backgroundColor"
11
+ )
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe("Sample", type: :model) do
4
+ it "tests the truth" do
5
+ expect(true).to be_truthy
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require "test_helper"
2
+
3
+ class SampleTest < ActiveSupport::TestCase
4
+ test "the truth" do
5
+ assert true
6
+ end
7
+ end
@@ -7,21 +7,28 @@ module Boring
7
7
 
8
8
  DEFAULT_DEVISE_MODEL_NAME = "User"
9
9
 
10
- class_option :model_name, type: :string, aliases: "-m",
11
- desc: "Tell us the user model name which will be used for authentication. Defaults to #{DEFAULT_DEVISE_MODEL_NAME}"
12
- class_option :skip_devise_view, type: :boolean, aliases: "-sv",
10
+ class_option :model_name,
11
+ type: :string,
12
+ aliases: "-m",
13
+ desc:
14
+ "Tell us the user model name which will be used for authentication. Defaults to #{DEFAULT_DEVISE_MODEL_NAME}"
15
+ class_option :skip_devise_view,
16
+ type: :boolean,
17
+ aliases: "-sv",
13
18
  desc: "Skip generating devise views"
14
- class_option :skip_devise_model, type: :boolean, aliases: "-sm",
19
+ class_option :skip_devise_model,
20
+ type: :boolean,
21
+ aliases: "-sm",
15
22
  desc: "Skip generating devise model"
16
- class_option :run_db_migrate, type: :boolean, aliases: "-rdm",
23
+ class_option :run_db_migrate,
24
+ type: :boolean,
25
+ aliases: "-rdm",
17
26
  desc: "Run migrations after generating user table",
18
27
  default: false
19
28
 
20
29
  def add_devise_gem
21
30
  say "Adding devise gem", :green
22
- Bundler.with_unbundled_env do
23
- run "bundle add devise"
24
- end
31
+ Bundler.with_unbundled_env { run "bundle add devise" }
25
32
  end
26
33
 
27
34
  def generating_devise_defaults
@@ -33,10 +40,12 @@ module Boring
33
40
 
34
41
  def add_devise_action_mailer_development_config
35
42
  say "Adding devise Action Mailer development configuration", :green
36
- insert_into_file "config/environments/development.rb", <<~RUBY, after: /Rails.application.configure do/
43
+ insert_into_file "config/environments/development.rb",
44
+ <<~RUBY,
37
45
  \n
38
46
  \tconfig.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
39
47
  RUBY
48
+ after: /Rails.application.configure do/
40
49
  end
41
50
 
42
51
  def add_devise_user_model
@@ -48,13 +57,28 @@ module Boring
48
57
  Bundler.with_unbundled_env do
49
58
  run "DISABLE_SPRING=1 bundle exec rails generate devise #{model_name}"
50
59
  end
60
+
61
+ # make the email unique
62
+ if File.exist?("test/fixtures/users.yml")
63
+ email_content = <<~FIXTURE
64
+ one:
65
+ email: example-$LABEL@email.com
66
+ FIXTURE
67
+
68
+ gsub_file "test/fixtures/users.yml",
69
+ /one: {}/,
70
+ optimize_indentation(email_content, 0)
71
+ end
51
72
  end
52
73
 
53
74
  def add_devise_authentication_filter_to_application_controller
54
- insert_into_file "app/controllers/application_controller.rb", <<~RUBY, after: /class ApplicationController < ActionController::Base/
75
+ insert_into_file "app/controllers/application_controller.rb",
76
+ <<~RUBY,
55
77
  \n
56
78
  \tbefore_action :authenticate_user!
57
79
  RUBY
80
+ after:
81
+ /class ApplicationController < ActionController::Base/
58
82
  end
59
83
 
60
84
  def add_devise_views
@@ -71,9 +95,7 @@ module Boring
71
95
  def run_db_migrate
72
96
  return unless options[:run_db_migrate]
73
97
 
74
- Bundler.with_unbundled_env do
75
- rails_command "db:migrate"
76
- end
98
+ Bundler.with_unbundled_env { rails_command "db:migrate" }
77
99
  end
78
100
  end
79
101
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'boring_generators/generator_helper'
3
+ require "boring_generators/generator_helper"
4
4
 
5
5
  module Boring
6
6
  module Vcr
7
7
  class InstallGenerator < Rails::Generators::Base
8
8
  include BoringGenerators::GeneratorHelper
9
-
9
+
10
10
  desc "Adds VCR to the application"
11
11
  source_root File.expand_path("templates", __dir__)
12
12
 
@@ -46,7 +46,7 @@ module Boring
46
46
 
47
47
  def add_vcr_gem
48
48
  say "Adding VCR gems to Gemfile", :green
49
-
49
+
50
50
  check_and_install_gem "vcr", group: :test
51
51
  end
52
52
 
@@ -83,9 +83,10 @@ module Boring
83
83
  require "vcr"
84
84
 
85
85
  VCR.configure do |c|
86
- c.cassette_library_dir = "test/vcr"
86
+ c.cassette_library_dir = "test/vcr_cassettes"
87
87
  c.hook_into #{format_stubbing_libraries}
88
88
  c.ignore_localhost = true
89
+ c.allow_http_connections_when_no_cassette = true
89
90
  end
90
91
  RUBY
91
92
 
@@ -1,8 +1,9 @@
1
1
  require "vcr"
2
2
 
3
3
  VCR.configure do |c|
4
- c.cassette_library_dir = "spec/cassettes"
4
+ c.cassette_library_dir = "spec/vcr_cassettes"
5
5
  c.hook_into <%= @stubbing_libraries %>
6
6
  c.configure_rspec_metadata!
7
7
  c.ignore_localhost = true
8
+ c.allow_http_connections_when_no_cassette = true
8
9
  end
@@ -11,7 +11,7 @@ module Boring
11
11
 
12
12
  SUPPORTED_TEST_FRAMEWORKS = %w[rspec minitest]
13
13
 
14
- # can't use "test_framework" option which would be a good naming for this because it's being used by Rails::Generator::Base. It's better not to have any conflict with the base class so prefixing with "app_" here
14
+ # can't use "test_framework" option which would be a good naming for this because it's being used by Rails::Generator::Base. Rails will override this value if we use test_framework so prefixing with "app_" here
15
15
  class_option :app_test_framework,
16
16
  type: :string,
17
17
  desc: "Tell us the framework you use for writing tests in your application. Supported options are #{SUPPORTED_TEST_FRAMEWORKS}",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boring_generators
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abhay Nikam
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-04 00:00:00.000000000 Z
11
+ date: 2024-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -74,6 +74,15 @@ files:
74
74
  - lib/generators/boring/ci/circleci/install/templates/database.yml.ci.tt
75
75
  - lib/generators/boring/ci/github_action/install/install_generator.rb
76
76
  - lib/generators/boring/ci/github_action/install/templates/ci.yml.tt
77
+ - lib/generators/boring/ci/gitlab_ci/install/install_generator.rb
78
+ - lib/generators/boring/ci/gitlab_ci/install/templates/README
79
+ - lib/generators/boring/ci/gitlab_ci/install/templates/capybara_helper.rb.tt
80
+ - lib/generators/boring/ci/gitlab_ci/install/templates/ci.yml.tt
81
+ - lib/generators/boring/ci/gitlab_ci/install/templates/database.yml.ci.tt
82
+ - lib/generators/boring/ci/gitlab_ci/install/templates/system_sample_spec.rb.tt
83
+ - lib/generators/boring/ci/gitlab_ci/install/templates/system_sample_test.rb.tt
84
+ - lib/generators/boring/ci/gitlab_ci/install/templates/unit_sample_spec.rb.tt
85
+ - lib/generators/boring/ci/gitlab_ci/install/templates/unit_sample_test.rb.tt
77
86
  - lib/generators/boring/ci/travisci/install/install_generator.rb
78
87
  - lib/generators/boring/ci/travisci/install/templates/.travis.yml.tt
79
88
  - lib/generators/boring/devise/doorkeeper/install/install_generator.rb