noahsettersten's picture
ci: Gather and report test coverage in test workflow
3a052af
# Create initial workflow based on GitHub's suggestion for Elixir.
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
env:
MIX_ENV: test
jobs:
test:
name: Test codebase
runs-on: ubuntu-latest
services:
postgres:
image: pgvector/pgvector:pg16
env:
POSTGRES_USERNAME: postgres
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install ffmpeg
run: sudo apt-get install ffmpeg
# - name: Download Bumblebee model artifacts
# uses: actions/download-artifacts
# with:
# name: bumblebee-cache
- name: Set up Elixir
uses: erlef/setup-beam@v1
with:
elixir-version: '1.16.0'
otp-version: '26.0'
- name: Cache dependencies
id: cache-deps
uses: actions/cache@v4
env:
cache-name: cache-elixir-deps
with:
path: deps
key: ${{ runner.os }}-mix-${{ env.cache-name }}-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-${{ env.cache-name }}-
- name: Cache compiled build
id: cache-build
uses: actions/cache@v4
env:
cache-name: cache-compiled-build
with:
path: _build
key: ${{ runner.os }}-mix-${{ env.cache-name }}-${{ hashFiles('**/mix.lock') }}
restore-keys: |
${{ runner.os }}-mix-${{ env.cache-name }}-
${{ runner.os }}-mix-
- name: Clean dependencies to rule out incremental build as source of failures
if: github.run_attempt != '1'
run: |
mix deps.clean --all
mix clean
shell: sh
- name: Install dependencies
run: mix deps.get
- name: Compile
run: mix compile
- name: Print out Bumblebee cache directory
run: elixir -e 'IO.puts(:filename.basedir(:user_cache, "bumblebee"))'
- name: Cache Bumblebee model files
uses: actions/cache@v4
with:
path: /home/runner/.cache/bumblebee
key: ${{ runner.os }}-bumblebee-${{ hashFiles('**/application.ex') }}
restore-keys: ${{ runner.os }}-bumblebee-
- name: Run tests
env:
DATABASE_URL: postgresql://postgres:postgres@localhost/medical_transcription_test
run: mix test --cover --export-coverage default
- name: Export code coverage
id: coverage_percent
run: |
COVERAGE_RESULTS=$(mix test.coverage) || true
echo $COVERAGE_RESULTS
COVERAGE_PERCENTAGE=$(echo $COVERAGE_RESULTS | grep "Coverage:" | awk -F ':' '{print $2}' | awk '{$1=$1;print}')
echo "value=$COVERAGE_PERCENTAGE" >> $GITHUB_OUTPUT
- name: Send coverage results to Slack
uses: slackapi/slack-github-action@v1.23.0
if: ${{ github.ref == 'refs/head/main' }}
with:
payload: |
{
"appName": "MediCode",
"percent": "${{ steps.coverage_percent.outputs.value }}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
# - name: Upload Bumblebee model artifacts
# uses: actions/upload-artifact@v4
# with:
# name: bumblebee-cache
# path: $HOME/.cache/bumblebee