WIP Libaaec 38 migrate from circle ci to GitHub actions to handle ci #19
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] | |
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: Generate Runtime Log | |
run: | | |
mkdir -p tmp | |
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 }} |