From 84fa679165fca44ed9875f7bb94a539fbc0becd3 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 11 Mar 2025 17:12:36 +1100 Subject: [PATCH] Revert "Run flaky spec 250 times to surely fail" This reverts commit 46b5fddf769250a28174d08ea9faa452a99a0b18. --- .github/workflows/build.yml | 498 ++++++++++++++++++++++++++++++++++-- 1 file changed, 472 insertions(+), 26 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0dd1b09882..526328ad8d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,6 +17,152 @@ permissions: contents: read jobs: + controllers: + runs-on: ubuntu-22.04 + services: + postgres: + image: postgres:10 + ports: ["5432:5432"] + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + env: + POSTGRES_DB: open_food_network_test + POSTGRES_USER: ofn + POSTGRES_PASSWORD: f00d + strategy: + fail-fast: false + matrix: + # [n] - where the n is a number of parallel jobs you want to run your tests on. + # Use a higher number if you have slow tests to split them between more parallel jobs. + # Remember to update the value of the `ci_node_index` below to (0..n-1). + ci_node_total: [4] + # Indexes for parallel jobs (starting from zero). + # E.g. use [0, 1] for 2 parallel jobs, [0, 1, 2] for 3 parallel jobs, etc. + ci_node_index: [0, 1, 2, 3] + steps: + - uses: actions/checkout@v3 + + - name: Setup redis + uses: supercharge/redis-github-action@1.4.0 + with: + redis-version: 6 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + # JS is required in order for webpacker to compile, in order to render templates containing image urls + - uses: actions/setup-node@v3 + with: + node-version-file: .node-version + cache: yarn + + - name: Install JS dependencies + run: yarn install --frozen-lockfile + + - name: Set up database + run: | + bin/rails db:create db:schema:load + + - name: Run tests + env: + KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC: 864ef557d85ea8e603e086c0387d5154 + KNAPSACK_PRO_CI_NODE_TOTAL: ${{ matrix.ci_node_total }} + KNAPSACK_PRO_CI_NODE_INDEX: ${{ matrix.ci_node_index }} + KNAPSACK_PRO_LOG_LEVEL: info + # if you use Knapsack Pro Queue Mode you must set below env variable + # to be able to retry CI build and run previously recorded tests + # https://github.com/KnapsackPro/knapsack_pro-ruby#knapsack_pro_fixed_queue_split-remember-queue-split-on-retry-ci-node + # KNAPSACK_PRO_FIXED_QUEUE_SPLIT: false + # RSpec split test files by test examples feature - it's optional + # https://knapsackpro.com/faq/question/how-to-split-slow-rspec-test-files-by-test-examples-by-individual-it + #KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES: true + KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/controllers/**/*_spec.rb}" + run: | + git show --no-patch # the commit being tested (which is often a merge due to actions/checkout@v3) + bin/rails assets:precompile knapsack_pro:rspec + + - name: Save SimpleCov file + uses: actions/upload-artifact@v4 + with: + name: simplecov-chunk-controllers-${{ matrix.ci_node_index }} + path: coverage/*.* + retention-days: 2 # doesn't need to be long, because it's the combined results that matter + if-no-files-found: ignore + include-hidden-files: true + + models: + runs-on: ubuntu-22.04 + services: + postgres: + image: postgres:10 + ports: ["5432:5432"] + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + env: + POSTGRES_DB: open_food_network_test + POSTGRES_USER: ofn + POSTGRES_PASSWORD: f00d + strategy: + fail-fast: false + matrix: + # [n] - where the n is a number of parallel jobs you want to run your tests on. + # Use a higher number if you have slow tests to split them between more parallel jobs. + # Remember to update the value of the `ci_node_index` below to (0..n-1). + ci_node_total: [2] + # Indexes for parallel jobs (starting from zero). + # E.g. use [0, 1] for 2 parallel jobs, [0, 1, 2] for 3 parallel jobs, etc. + ci_node_index: [0, 1] + steps: + - uses: actions/checkout@v3 + + - name: Setup redis + uses: supercharge/redis-github-action@1.4.0 + with: + redis-version: 6 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + - name: Set up database + run: | + bin/rails db:create db:schema:load + + - name: Run tests + env: + KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC: 09476e2ce491c12083df62768667c674 + KNAPSACK_PRO_CI_NODE_TOTAL: ${{ matrix.ci_node_total }} + KNAPSACK_PRO_CI_NODE_INDEX: ${{ matrix.ci_node_index }} + KNAPSACK_PRO_LOG_LEVEL: info + # if you use Knapsack Pro Queue Mode you must set below env variable + # to be able to retry CI build and run previously recorded tests + # https://github.com/KnapsackPro/knapsack_pro-ruby#knapsack_pro_fixed_queue_split-remember-queue-split-on-retry-ci-node + # KNAPSACK_PRO_FIXED_QUEUE_SPLIT: false + # RSpec split test files by test examples feature - it's optional + # https://knapsackpro.com/faq/question/how-to-split-slow-rspec-test-files-by-test-examples-by-individual-it + #KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES: true + KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/models/**/*_spec.rb}" + run: | + bin/rake knapsack_pro:rspec + + - name: Save SimpleCov file + uses: actions/upload-artifact@v4 + with: + name: simplecov-chunk-models-${{ matrix.ci_node_index }} + path: coverage/*.* + retention-days: 2 # doesn't need to be long, because it's the combined results that matter + if-no-files-found: ignore + include-hidden-files: true + system_admin: runs-on: ubuntu-22.04 services: @@ -84,32 +230,16 @@ jobs: KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/system/admin/**/*_spec.rb}" run: | - bin/rails assets:precompile - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 - bin/rspec spec/system/consumer/caching/shops_caching_spec.rb:83 + bin/rails assets:precompile knapsack_pro:queue:rspec + + - name: Save SimpleCov file + uses: actions/upload-artifact@v4 + with: + name: simplecov-chunk-system-admin-${{ matrix.ci_node_index }} + path: coverage/*.* + retention-days: 2 # doesn't need to be long, because it's the combined results that matter + if-no-files-found: ignore + include-hidden-files: true - name: Archive failed tests screenshots if: failure() @@ -119,3 +249,319 @@ jobs: path: tmp/capybara/screenshots/*.png retention-days: 7 if-no-files-found: ignore + + system_consumer: + runs-on: ubuntu-22.04 + services: + postgres: + image: postgres:10 + ports: ["5432:5432"] + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + env: + POSTGRES_DB: open_food_network_test + POSTGRES_USER: ofn + POSTGRES_PASSWORD: f00d + strategy: + fail-fast: false + matrix: + # [n] - where the n is a number of parallel jobs you want to run your tests on. + # Use a higher number if you have slow tests to split them between more parallel jobs. + # Remember to update the value of the `ci_node_index` below to (0..n-1). + ci_node_total: [6] + # Indexes for parallel jobs (starting from zero). + # E.g. use [0, 1] for 2 parallel jobs, [0, 1, 2] for 3 parallel jobs, etc. + ci_node_index: [0, 1, 2, 3, 4, 5] + steps: + - uses: actions/checkout@v3 + + - name: Setup redis + uses: supercharge/redis-github-action@1.4.0 + with: + redis-version: 6 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + - uses: actions/setup-node@v3 + with: + node-version-file: .node-version + cache: yarn + + - name: Install JS dependencies + run: yarn install --frozen-lockfile + + - name: Set up database + run: | + bin/rails db:create db:schema:load + + - name: Run tests + + env: + KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC: e52bd4390c853e6c5bdfe4d0334586c1 + KNAPSACK_PRO_CI_NODE_TOTAL: ${{ matrix.ci_node_total }} + KNAPSACK_PRO_CI_NODE_INDEX: ${{ matrix.ci_node_index }} + KNAPSACK_PRO_LOG_LEVEL: info + # if you use Knapsack Pro Queue Mode you must set below env variable + # to be able to retry CI build and run previously recorded tests + # https://github.com/KnapsackPro/knapsack_pro-ruby#knapsack_pro_fixed_queue_split-remember-queue-split-on-retry-ci-node + KNAPSACK_PRO_FIXED_QUEUE_SPLIT: true + # RSpec split test files by test examples feature - it's optional + # https://knapsackpro.com/faq/question/how-to-split-slow-rspec-test-files-by-test-examples-by-individual-it + #KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES: true + KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/system/consumer/**/*_spec.rb}" + + run: | + bin/rails assets:precompile knapsack_pro:queue:rspec + + - name: Save SimpleCov file + uses: actions/upload-artifact@v4 + with: + name: simplecov-chunk-system-consumer-${{ matrix.ci_node_index }} + path: coverage/*.* + retention-days: 2 # doesn't need to be long, because it's the combined results that matter + if-no-files-found: ignore + include-hidden-files: true + + - name: Archive failed tests screenshots + if: failure() + uses: actions/upload-artifact@v4 + with: + name: failed-consumer_${{ matrix.ci_node_index }}-tests-screenshots + path: tmp/capybara/screenshots/*.png + retention-days: 7 + if-no-files-found: ignore + + engines: + runs-on: ubuntu-22.04 + services: + postgres: + image: postgres:10 + ports: ["5432:5432"] + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + env: + POSTGRES_DB: open_food_network_test + POSTGRES_USER: ofn + POSTGRES_PASSWORD: f00d + strategy: + fail-fast: false + matrix: + # [n] - where the n is a number of parallel jobs you want to run your tests on. + # Use a higher number if you have slow tests to split them between more parallel jobs. + # Remember to update the value of the `ci_node_index` below to (0..n-1). + ci_node_total: [2] + # Indexes for parallel jobs (starting from zero). + # E.g. use [0, 1] for 2 parallel jobs, [0, 1, 2] for 3 parallel jobs, etc. + ci_node_index: [0, 1] + steps: + - uses: actions/checkout@v3 + + - name: Setup redis + uses: supercharge/redis-github-action@1.4.0 + with: + redis-version: 6 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + # JS is required in order for webpacker to compile, in order to render templates linking to mail.css + - uses: actions/setup-node@v3 + with: + node-version-file: .node-version + cache: yarn + + - name: Install JS dependencies + run: yarn install --frozen-lockfile + + - name: Set up database + run: | + bin/rails db:create db:schema:load + + - name: Run tests + + env: + KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC: d6ea7ceb766404ccd016c19aa2c81b1c + KNAPSACK_PRO_CI_NODE_TOTAL: ${{ matrix.ci_node_total }} + KNAPSACK_PRO_CI_NODE_INDEX: ${{ matrix.ci_node_index }} + KNAPSACK_PRO_LOG_LEVEL: info + # if you use Knapsack Pro Queue Mode you must set below env variable + # to be able to retry CI build and run previously recorded tests + # https://github.com/KnapsackPro/knapsack_pro-ruby#knapsack_pro_fixed_queue_split-remember-queue-split-on-retry-ci-node + # KNAPSACK_PRO_FIXED_QUEUE_SPLIT: false + # RSpec split test files by test examples feature - it's optional + # https://knapsackpro.com/faq/question/how-to-split-slow-rspec-test-files-by-test-examples-by-individual-it + #KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES: true + KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/lib/**/*_spec.rb,spec/migrations/**/*_spec.rb,spec/serializers/**/*_spec.rb,engines/**/*_spec.rb}" + + run: | + bin/rails assets:precompile knapsack_pro:rspec + + - name: Save SimpleCov file + uses: actions/upload-artifact@v4 + with: + name: simplecov-chunk-engines-${{ matrix.ci_node_index }} + path: coverage/*.* + retention-days: 2 # doesn't need to be long, because it's the combined results that matter + if-no-files-found: ignore + include-hidden-files: true + + test_the_rest: + runs-on: ubuntu-22.04 + services: + postgres: + image: postgres:10 + ports: ["5432:5432"] + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + env: + POSTGRES_DB: open_food_network_test + POSTGRES_USER: ofn + POSTGRES_PASSWORD: f00d + strategy: + fail-fast: false + matrix: + # [n] - where the n is a number of parallel jobs you want to run your tests on. + # Use a higher number if you have slow tests to split them between more parallel jobs. + # Remember to update the value of the `ci_node_index` below to (0..n-1). + ci_node_total: [3] + # Indexes for parallel jobs (starting from zero). + # E.g. use [0, 1] for 2 parallel jobs, [0, 1, 2] for 3 parallel jobs, etc. + ci_node_index: [0, 1, 2] + steps: + - uses: actions/checkout@v3 + + - name: Setup redis + uses: supercharge/redis-github-action@1.4.0 + with: + redis-version: 6 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + # JS is required in order for webpacker to compile, in order to render templates linking to mail.css + - uses: actions/setup-node@v3 + with: + node-version-file: .node-version + cache: yarn + + - name: Install JS dependencies + run: yarn install --frozen-lockfile + + - name: Set up database + run: | + bin/rails db:create db:schema:load + + - name: Run tests + env: + KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC: e3b8800198d2d89b70c7edbdd85f8fd8 + KNAPSACK_PRO_CI_NODE_TOTAL: ${{ matrix.ci_node_total }} + KNAPSACK_PRO_CI_NODE_INDEX: ${{ matrix.ci_node_index }} + KNAPSACK_PRO_LOG_LEVEL: info + # if you use Knapsack Pro Queue Mode you must set below env variable + # to be able to retry CI build and run previously recorded tests + # https://github.com/KnapsackPro/knapsack_pro-ruby#knapsack_pro_fixed_queue_split-remember-queue-split-on-retry-ci-node + # KNAPSACK_PRO_FIXED_QUEUE_SPLIT: false + # RSpec split test files by test examples feature - it's optional + # https://knapsackpro.com/faq/question/how-to-split-slow-rspec-test-files-by-test-examples-by-individual-it + #KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES: true + KNAPSACK_PRO_TEST_FILE_EXCLUDE_PATTERN: "{engines/**/*_spec.rb,spec/models/**/*_spec.rb,spec/controllers/**/*_spec.rb,spec/serializers/**/*_spec.rb,spec/lib/**/*_spec.rb,spec/migrations/**/*_spec.rb,spec/system/**/*_spec.rb}" + run: | + bin/rails assets:precompile knapsack_pro:rspec + + - name: Save SimpleCov file + uses: actions/upload-artifact@v4 + with: + name: simplecov-chunk-the-rest-${{ matrix.ci_node_index }} + path: coverage/*.* + retention-days: 2 # doesn't need to be long, because it's the combined results that matter + if-no-files-found: ignore + include-hidden-files: true + + non_knapsack_jest_karma: + runs-on: ubuntu-22.04 + services: + postgres: + image: postgres:10 + ports: ["5432:5432"] + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + env: + POSTGRES_DB: open_food_network_test + POSTGRES_USER: ofn + POSTGRES_PASSWORD: f00d + steps: + - uses: actions/checkout@v3 + + # Rails is required for the Karma rake script + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + - uses: actions/setup-node@v3 + with: + node-version-file: .node-version + cache: yarn + + - name: Install JS dependencies + run: yarn install --frozen-lockfile + + - name: Run JS tests + run: bin/rake karma:run + + - name: Run jest tests + run: yarn jest + + collate_simplecov_results: + runs-on: ubuntu-22.04 + needs: + - controllers + - models + - engines + - system_admin + - system_consumer + - test_the_rest + steps: + - uses: actions/checkout@v3 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + - name: Download individual results from individual runners + uses: actions/download-artifact@v4 + with: + pattern: simplecov-chunk-* + path: tmp/simplecov + + - name: collate results from each of the workers + run: bundle exec rake 'simplecov:collate_results[tmp/simplecov]' + + - name: Upload collated results + uses: actions/upload-artifact@v4 + with: + name: combined-simplecov-report + path: coverage/**/*.* + retention-days: 7 + if-no-files-found: ignore + include-hidden-files: true