Skip to content

WIP Libaaec 38 migrate from circle ci to GitHub actions to handle ci #20

WIP Libaaec 38 migrate from circle ci to GitHub actions to handle ci

WIP Libaaec 38 migrate from circle ci to GitHub actions to handle ci #20

name: Ensure RSpec Tests Pass
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
generate-runtime-log:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Install Dependencies
run: bundle install
- name: Disable SimpleCov and Coveralls
# Avoid running SimpleCov and Coveralls during runtime log generation
run: |
echo "COVERAGE=false" >> $GITHUB_ENV
- name: Generate Runtime Log
run: |
mkdir -p tmp
COVERAGE=false bundle exec rspec --format ParallelTests::RSpec::RuntimeLogger --out tmp/parallel_runtime_rspec.log --pattern 'spec/**/*_spec.rb'
- name: Debug Runtime Log
run: |
echo "Runtime log contents:"
cat tmp/parallel_runtime_rspec.log || echo "Runtime log is missing or empty."
- name: Upload Runtime Log
uses: actions/upload-artifact@v4
with:
name: parallel-runtime-log
path: tmp/parallel_runtime_rspec.log
rspec:
needs: generate-runtime-log
strategy:
matrix:
job_index: [0, 1, 2, 3] # Adjust based on the number of parallel jobs
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Set Environment Variables
run: |
echo "DATABASE_USERNAME=apache" >> $GITHUB_ENV
echo "DATABASE_PASSWORD=" >> $GITHUB_ENV
echo "COVERALLS_REPO_TOKEN=${{ secrets.COVERALLS_REPO_TOKEN }}" >> $GITHUB_ENV
- name: Download Runtime Log
uses: actions/download-artifact@v4
with:
name: parallel-runtime-log
path: tmp
- name: Install Dependencies
run: bundle install
- name: Pre-create Test Results Directory
run: mkdir -p tmp/test_results
- name: Run Tests for Job Index ${{ matrix.job_index }}
run: |
TEST_ENV_NUMBER=${{ matrix.job_index }} bundle exec parallel_rspec --group-by runtime --only-group ${{ matrix.job_index }} \
--format RspecJunitFormatter --out tmp/test_results/result-${{ matrix.job_index }}.xml \
|| TEST_ENV_NUMBER=${{ matrix.job_index }} bundle exec parallel_rspec --group-by filesize --only-group ${{ matrix.job_index }} \
--format RspecJunitFormatter --out tmp/test_results/result-${{ matrix.job_index }}.xml
env:
COVERALLS_PARALLEL: true
- name: Debug Test Output
run: |
echo "Checking if test output was generated for job index ${{ matrix.job_index }}:"
cat tmp/test_results/result-${{ matrix.job_index }}.xml || echo "No test output found."
- name: Save Test Results
uses: actions/upload-artifact@v4
with:
name: test-results-${{ matrix.job_index }}
path: tmp/test_results/result-${{ matrix.job_index }}.xml
if-no-files-found: error
- name: Save Partial Coverage
uses: actions/upload-artifact@v4
with:
name: coverage-${{ matrix.job_index }}
path: coverage/lcov/coverage-${{ matrix.job_index }}.info
if-no-files-found: error
combine-results-and-coverage:
needs: rspec
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Download Partial Test Results
uses: actions/download-artifact@v4
with:
name: test-results-0
path: tmp/test_results
- name: Download Partial Test Results 1
uses: actions/download-artifact@v4
with:
name: test-results-1
path: tmp/test_results
- name: Download Partial Test Results 2
uses: actions/download-artifact@v4
with:
name: test-results-2
path: tmp/test_results
- name: Download Partial Test Results 3
uses: actions/download-artifact@v4
with:
name: test-results-3
path: tmp/test_results
- name: Combine Test Results
run: |
mkdir -p coverage
cat tmp/test_results/*.xml > coverage/combined_results.xml
- name: Upload Combined Test Results
uses: actions/upload-artifact@v4
with:
name: combined-test-results
path: coverage/combined_results.xml
- name: Download Partial Coverage 0
uses: actions/download-artifact@v4
with:
name: coverage-0
path: coverage/lcov
- name: Download Partial Coverage 1
uses: actions/download-artifact@v4
with:
name: coverage-1
path: coverage/lcov
- name: Download Partial Coverage 2
uses: actions/download-artifact@v4
with:
name: coverage-2
path: coverage/lcov
- name: Download Partial Coverage 3
uses: actions/download-artifact@v4
with:
name: coverage-3
path: coverage/lcov
- name: Combine Coverage Files
run: |
gem install coveralls-lcov --user-install
export PATH="$HOME/.gem/ruby/$(ruby -e 'puts RUBY_VERSION')/bin:$PATH"
lcov --add-tracefile=coverage/lcov/coverage-0.info \
--add-tracefile=coverage/lcov/coverage-1.info \
--add-tracefile=coverage/lcov/coverage-2.info \
--add-tracefile=coverage/lcov/coverage-3.info \
--output-file=coverage/lcov/combined.info
- name: Upload Combined Coverage to Coveralls
run: coveralls-lcov -v -n coverage/lcov/combined.info
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}