Skip to content

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

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 #32

name: Ensure RSpec Tests Pass
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: write
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 Coverage Tools
run: echo "COVERAGE=false" >> $GITHUB_ENV
- name: List Test Files
run: |
echo "Listing all test files:"
find spec -name '*_spec.rb' || echo "No test files found."
- name: Generate Runtime Log with Error Output
run: |
mkdir -p tmp
echo "Generating runtime log and capturing errors..."
bundle exec rspec --format ParallelTests::RSpec::RuntimeLogger --out tmp/parallel_runtime_rspec.log --pattern 'spec/**/*_spec.rb' --backtrace 2> tmp/rspec-errors.log
- name: Debug RSpec Execution
run: |
echo "Checking if RSpec ran any tests..."
bundle exec rspec --pattern 'spec/**/*_spec.rb' --dry-run || echo "RSpec dry-run failed. Check for issues."
echo "Runtime log contents:"
cat tmp/parallel_runtime_rspec.log || echo "Runtime log is empty."
- name: Debug RSpec Errors
run: |
echo "RSpec Errors:"
cat tmp/rspec-errors.log || echo "No errors logged."
- name: Debug Runtime Log
run: |
echo "Runtime log contents:"
cat tmp/parallel_runtime_rspec.log || echo "Runtime log is missing or empty."
- name: Verify Runtime Log
run: |
if [ ! -s tmp/parallel_runtime_rspec.log ]; then
echo "Runtime log is empty! Falling back to group-by filesize in subsequent steps."
echo "filesize fallback" > tmp/parallel_runtime_rspec.log
fi
- name: Validate Runtime Log
run: |
echo "Validating test file paths in the runtime log..."
while read -r line; do
if [ ! -f "$line" ]; then
echo "Invalid test file path: $line"
exit 1
fi
done < tmp/parallel_runtime_rspec.log
- 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]
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: Pre-create Test Results Directory
run: mkdir -p tmp/test_results
- name: Verify Parallel Tests Installation
run: bundle show parallel_tests
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
- name: Run Tests for Job Index ${{ matrix.job_index }}
run: |
if grep -q "filesize fallback" tmp/parallel_runtime_rspec.log; then
echo "Falling back to grouping by filesize..."
find spec -name '*_spec.rb' > tmp/test_files.txt
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 $(cat tmp/test_files.txt)
else
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
fi
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: warn
- 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: warn
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-*
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 Files
uses: actions/download-artifact@v4
with:
name: coverage-*
path: coverage/lcov
- name: Install LCOV and Coveralls Tools
run: |
sudo apt-get update
sudo apt-get install -y lcov
gem install coveralls-lcov --user-install
export PATH="$HOME/.gem/ruby/$(ruby -e 'puts RUBY_VERSION')/bin:$PATH"
- name: Combine Coverage Files
run: |
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 }}