WIP - modify spec_helper to try to not interfere with coveralls #33
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 "COVERAGE=false" >> $GITHUB_ENV | ||
echo "PARALLEL_TEST_GROUPS=true" >> $GITHUB_ENV | ||
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 | ||
check-runtime-log-file: | ||
needs: rspec | ||
run: | | ||
echo "Checking after rspec runs to see if runtime log was created:" | ||
if [ -f tmp/parallel_runtime_rspec.log ]; then | ||
echo "Runtime log exists." | ||
echo "Contents of runtime log:" | ||
cat tmp/parallel_runtime_rspec.log | ||
else | ||
echo "Runtime log does not exist." | ||
fi | ||
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: | | ||
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 | ||
coveralls-lcov -v -n 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 }} |