From 68058e1189125d18e1e16af0c93b05c082414e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Por=C4=99bski?= Date: Fri, 1 Dec 2023 09:04:11 +0100 Subject: [PATCH] Create CircleCi test pipeline with bash files --- .circleci/bundle_ruby_3_0.sh | 4 + .circleci/bundle_ruby_3_2.sh | 3 + .circleci/config.yml | 182 +++++++++++++++++++++++++++++++++ .circleci/tests_database_ci.sh | 10 ++ 4 files changed, 199 insertions(+) create mode 100644 .circleci/bundle_ruby_3_0.sh create mode 100644 .circleci/bundle_ruby_3_2.sh create mode 100644 .circleci/config.yml create mode 100644 .circleci/tests_database_ci.sh diff --git a/.circleci/bundle_ruby_3_0.sh b/.circleci/bundle_ruby_3_0.sh new file mode 100644 index 00000000..15d0dfcb --- /dev/null +++ b/.circleci/bundle_ruby_3_0.sh @@ -0,0 +1,4 @@ +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B +sudo apt-get update && sudo apt-get install libvips +bundle config --local path vendor/bundle +bundle check || bundle install \ No newline at end of file diff --git a/.circleci/bundle_ruby_3_2.sh b/.circleci/bundle_ruby_3_2.sh new file mode 100644 index 00000000..2539cdeb --- /dev/null +++ b/.circleci/bundle_ruby_3_2.sh @@ -0,0 +1,3 @@ +sudo apt-get update && sudo apt-get install libvips42 +bundle config --local path vendor/bundle +bundle check || bundle install \ No newline at end of file diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..cf7fd67a --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,182 @@ +version: 2.1 + +defaults: &defaults + parameters: &default_parameters + ruby_image: + type: string + redis_image: + type: string + restore_cache_key_1: + type: string + default: 'spree-bundle-v10-ruby-3-2-{{ .Branch }}' + restore_cache_key_2: + type: string + default: spree-bundle-v10-ruby-3-2 + save_cache_key: + type: string + default: "n" + run_file_path: + type: string + rails_version: + type: string + default: '~> 7.0.0' + store_artefacts: + type: boolean + default: false + environment: &environment + CIRCLE_TEST_REPORTS: /tmp/test-results + CIRCLE_ARTIFACTS: /tmp/test-artifacts + BUNDLE_JOBS: 4 + BUNDLE_RETRY: 3 + BUNDLE_PATH: ~/spree/vendor/bundle + RAILS_VERSION: << parameters.rails_version >> + working_directory: ~/spree + docker: + - image: &ruby_image << parameters.ruby_image >> + - image: &redis_image << parameters.redis_image >> + + +jobs: + run_test: &run_test + <<: *defaults + steps: &default_steps + - checkout + - restore_cache: + keys: + - << parameters.restore_cache_key_1 >> + - << parameters.restore_cache_key_2 >> + - run: + name: Allow executing given file + command: chmod +x << parameters.run_file_path >> + - run: + name: Run << parameters.run_file_path >> file + command: bash << parameters.run_file_path >> + - when: + condition: << parameters.save_cache_key >> + steps: + - save_cache: + key: << parameters.save_cache_key >> + paths: + - ~/spree/vendor/bundle + - when: + condition: << parameters.store_artefacts >> + steps: + - store_artifacts: + path: /tmp/test-artifacts + destination: test-artifacts + - store_artifacts: + path: /tmp/test-results + destination: raw-test-output + - store_test_results: + path: ~/rspec + + tests_postgres: + <<: *run_test + parallelism: << parameters.parallelism >> + parameters: + <<: *default_parameters + postgres_image: + type: string + parallelism: + type: integer + default: 3 + environment: + <<: *environment + DB: postgres + DB_HOST: localhost + DB_USERNAME: postgres + docker: + - image: *ruby_image + - image: << parameters.postgres_image >> + environment: + POSTGRES_USER: postgres + - image: *redis_image + + tests_mysql: + <<: *run_test + parallelism: << parameters.parallelism >> + parameters: + <<: *default_parameters + mysql_image: + type: string + parallelism: + type: integer + default: 3 + environment: + <<: *environment + DB: mysql + DB_HOST: 127.0.0.1 + DB_USERNAME: root + COVERAGE: true + COVERAGE_DIR: /tmp/workspace/simplecov + docker: + - image: *ruby_image + - image: *redis_image + - image: << parameters.mysql_image >> + command: [--default-authentication-plugin=mysql_native_password] + + send_test_coverage: + <<: *defaults + steps: + - checkout + - attach_workspace: + at: /tmp/workspace + - run: + name: Allow executing given file + command: chmod +x << parameters.run_file_path >> + - run: + name: Send test coverage + command: bash << parameters.run_file_path >> + + +workflows: + version: 2 + main: + jobs: + - run_test: + name: bundle_ruby_3_0 + restore_cache_key_1: "spree-dashboard-bundle-v10-ruby-3-0-{{ .Branch }}" + restore_cache_key_2: "spree-dashboard-bundle-v10-ruby-3-0" + ruby_image: circleci/ruby:3.0-node-browsers + redis_image: circleci/redis:6.2-alpine + run_file_path: ./.circleci/bundle_ruby_3_0.sh + save_cache_key: spree-dashboard-bundle-v10-ruby-3-0-{{ checksum "Gemfile.lock" }} + - run_test: + name: bundle_ruby_3_2 + ruby_image: cimg/ruby:3.2.0-browsers + redis_image: circleci/redis:6.2-alpine + run_file_path: ./.circleci/bundle_ruby_3_2.sh + save_cache_key: spree-dashboard-bundle-v10-ruby-3-2-{{ checksum "Gemfile.lock" }} + - tests_postgres: + name: tests_ruby_3_2_rails_7_1_postgres + parallelism: 8 + rails_version: '~> 7.1.0' + ruby_image: cimg/ruby:3.2.0-browsers + redis_image: circleci/redis:6.2-alpine + postgres_image: circleci/postgres:12-alpine + store_artefacts: true + run_file_path: ./.circleci/tests_database_ci.sh + requires: + - bundle_ruby_3_2 + - tests_postgres: + name: tests_ruby_3_0_rails_7_0_postgres + parallelism: 8 + rails_version: '~> 7.0.0' + ruby_image: circleci/ruby:3.0-node-browsers + redis_image: circleci/redis:6.2-alpine + postgres_image: circleci/postgres:12-alpine + store_artefacts: true + run_file_path: ./.circleci/tests_database_ci.sh + requires: + - bundle_ruby_3_0 + - tests_mysql: + name: tests_ruby_3_2_rails_7_1_mysql + rails_version: '~> 7.1.0' + ruby_image: cimg/ruby:3.2.0-browsers + redis_image: circleci/redis:6.2-alpine + mysql_image: circleci/mysql:8-ram + store_artefacts: true + run_file_path: ./.circleci/tests_database_ci.sh + requires: + - bundle_ruby_3_2 + diff --git a/.circleci/tests_database_ci.sh b/.circleci/tests_database_ci.sh new file mode 100644 index 00000000..4b43da5e --- /dev/null +++ b/.circleci/tests_database_ci.sh @@ -0,0 +1,10 @@ +sudo apt-get update && sudo apt-get install libvips42 +bundle config --local path vendor/bundle +bundle check || bundle install +bundle exec rake test_app +cd spec/dummy && yarn unlink @spree/dashboard +TESTFILES=$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings) + bundle exec rspec --format documentation \ + --format RspecJunitFormatter \ + -o ~/rspec/rspec.xml \ + -- ${TESTFILES} \ No newline at end of file