diff options
Diffstat (limited to 'gems/gem-pg.gitlab-ci.yml')
-rw-r--r-- | gems/gem-pg.gitlab-ci.yml | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/gems/gem-pg.gitlab-ci.yml b/gems/gem-pg.gitlab-ci.yml new file mode 100644 index 00000000000..c48e18fa297 --- /dev/null +++ b/gems/gem-pg.gitlab-ci.yml @@ -0,0 +1,80 @@ +# The template generates jobs for gems vendored in the main GitLab project +# under `gem_path_prefix` (defaults to `gems/`). +# +# Inputs +# - `gem_name`: The name of the gem, i.e. if the gem is located at `gems/gitlab-rspec`, `gem_name` should be set to `gitlab-rspec`. +# - `gem_path_prefix`: The prefix of the gem path, i.e. if the gem is located at `vendor/gems/gitlab-rspec`, `gem_path_prefix` should be set to `vendor/gems/`. Defaults to `gems/`. +spec: + inputs: + gem_name: + gem_path_prefix: + default: "gems/" +--- +workflow: + name: '[$[[inputs.gem_name]] gem] Ruby $RUBY_VERSION pipeline' + rules: + - when: always + +variables: + BUNDLE_PATH: "vendor" + BUNDLE_FROZEN: "true" + GIT_DEPTH: "20" + # 'GIT_STRATEGY: clone' optimizes the pack-objects cache hit ratio + GIT_STRATEGY: "clone" + GIT_SUBMODULE_STRATEGY: "none" + GET_SOURCES_ATTEMPTS: "3" + # Default Ruby version for jobs that don't use .ruby_matrix + RUBY_VERSION: "3.0" + +default: + image: "ruby:${RUBY_VERSION}" + cache: + key: "$[[inputs.gem_name]]-${RUBY_VERSION}" + paths: + - "$[[inputs.gem_path_prefix]]$[[inputs.gem_name]]/vendor/ruby" + before_script: + - cp config/{database.yml.postgresql,database.yml} + - "sed -i 's/username: postgres$/username: gitlab/g' config/database.yml" + - "sed -i 's/password:\\s*$/password: password/g' config/database.yml" + - "sed -i 's/host: localhost$/host: postgres/g' config/database.yml" + - cd $[[inputs.gem_path_prefix]]$[[inputs.gem_name]] + - ruby -v # Print out ruby version for debugging + - bundle_version=$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1 | sed -e 's/[[:space:]]//') + - gem install bundler --version "$bundle_version" --no-document # Bundler is not installed with the image + - bundle config # Show bundler configuration + - bundle install --jobs=$(nproc) --retry=3 + +.ruby_matrix: + parallel: + matrix: + - RUBY_VERSION: ["3.0", "3.1", "3.2"] + +.ruby_and_postgres_matrix: + services: + - name: postgres:${POSTGRES_VERSION} + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + parallel: + matrix: + - RUBY_VERSION: ["3.0", "3.1", "3.2"] + POSTGRES_VERSION: ["12", "13", "14"] + +rubocop: + extends: .ruby_matrix + rules: + - exists: ["$[[inputs.gem_path_prefix]]$[[inputs.gem_name]]/.rubocop.yml"] + script: + - bundle exec rubocop + +rspec: + extends: .ruby_and_postgres_matrix + variables: + POSTGRES_USER: gitlab + POSTGRES_PASSWORD: password + script: + - RAILS_ENV=test bundle exec rspec + coverage: '/LOC \((\d+\.\d+%)\) covered.$/' + artifacts: + expire_in: 31d + when: always + paths: + - coverage/ |