Skip to content

Test coverage

Test coverage #719

Workflow file for this run

name: "Test coverage"
on:
schedule:
- cron: "0 */8 * * *"
workflow_dispatch:
inputs:
repo:
description: "Repo to run the tests on"
required: true
default: "microsoft/fluentui"
branch:
description: "Branch to run the tests on"
required: true
default: "master"
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: write
pages: write
id-token: write
jobs:
run_tests:
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
runs-on: ${{ matrix.os }}
outputs:
test_coverage: ${{ steps.run_tests.outputs }}
ubuntu_artifact_name: ${{ steps.ubuntu.outputs.COVERAGE_FILENAME_UBUNTU }}
windows_artifact_name: ${{ steps.windows.outputs.COVERAGE_FILENAME_WINDOWS }}
macos_artifact_name: ${{ steps.macos.outputs.COVERAGE_FILENAME_MACOS }}
steps:
- name: Checkout [master]
uses: actions/checkout@v4
- name: Checkout [react-charting]
uses: actions/checkout@v4
with:
repository: ${{ github.event.inputs.repo || 'microsoft/fluentui' }}
ref: ${{ github.event.inputs.branch || 'master' }}
path: repo1
- name: Show current directory
run: echo "$PWD" && ls
- name: Show repo1 directory
run: ls ./repo1
- name: Install packages
run: yarn --cwd ./tools/UnitTestApp && yarn --cwd ./repo1 && yarn --cwd ./repo1/packages/react-charting
- name: Change function visibility from private to public
id: setup
uses: ./tools/UnitTestApp/ChangeFunctionVisibility
with:
osType: ${{ matrix.os }}
- name: Build
run: yarn --cwd ./repo1 buildto @fluentui/react-charting
- name: Run the tests in windows
if: matrix.os == 'windows-latest'
run: cd ./repo1/packages/react-charting && powershell -Command "(Get-Content -Path ./config/tests.js) -replace 'PROD', 'TEST' | Set-Content -Path ./config/tests.js" && yarn jest --coverage --coverageDirectory ./coverage/${{matrix.os}} --verbose --coverageReporters=html --coverageReporters=text > coverageReport.txt
continue-on-error: true
- name: Run a single test in windows
if: matrix.os == 'windows-latest'
run: cd ./repo1/packages/react-charting && powershell -Command "(Get-Content -Path ./config/tests.js) -replace 'PROD', 'TEST' | Set-Content -Path ./config/tests.js" && yarn jest ./src/components/VerticalBarChart --coverage --coverageDirectory ./coverage/${{matrix.os}}_VerticalBarChart --verbose --coverageReporters=html
continue-on-error: true
- name: Run the tests in macos
if: matrix.os == 'macos-latest'
run: cd ./repo1/packages/react-charting && sed -i '' 's/PROD/TEST/g' ./config/tests.js && yarn jest --coverage --coverageDirectory ./coverage/${{matrix.os}} --verbose --coverageReporters=html --coverageReporters=text > coverageReport.txt
continue-on-error: true
- name: Run the tests in ubuntu
if: matrix.os == 'ubuntu-latest'
run: cd ./repo1/packages/react-charting && sed -i 's/PROD/TEST/g' ./config/tests.js && yarn jest --coverage --coverageDirectory ./coverage/${{matrix.os}} --verbose --coverageReporters=html --coverageReporters=text > coverageReport.txt
continue-on-error: true
- name: Generate coverage file name in windows
id: windows
if: matrix.os == 'windows-latest'
run: |
$NOW=& Get-Date -format yyyy-MM-dd
echo "COVERAGE_FILENAME=test_coverage_${{ matrix.os }}_$NOW" >> $env:GITHUB_ENV
- name: Generate coverage file name
run: |
echo "COVERAGE_FILENAME=test_coverage_${{ matrix.os }}_$(date +'%Y-%m-%d_%H-%M-%S')" >> $GITHUB_ENV
- name: Save coverage folder
uses: actions/upload-artifact@v4
with:
name: ${{matrix.os}}
path: ./repo1/packages/react-charting/coverage/${{matrix.os}}
- name: Save coverage file
uses: actions/upload-artifact@v4
with:
name: ${{env.COVERAGE_FILENAME}}_report
path: ./repo1/packages/react-charting/coverageReport.txt
- name: Save coverage folder for a single test
if: matrix.os == 'windows-latest'
uses: actions/upload-artifact@v4
with:
name: coverage_VBC
path: ./repo1/packages/react-charting/coverage/${{matrix.os}}_VerticalBarChart
- name: Extract the coverage summary table
if: matrix.os != 'windows-latest'
run: |
cd ./repo1/packages/react-charting
file_contents=$(cat coverageReport.txt)
table=$(echo "$file_contents" | awk '/----/,/^$/' | sed '1d;$d')
echo "$table"
- name: Extract the coverage summary table in windows
if: matrix.os == 'windows-latest'
run: |
cd ./repo1/packages/react-charting
$fileContents = Get-Content -Raw -Path "coverageReport.txt"
$tableRegex = "(?ms)----.*?^$"
$table = [regex]::Match($fileContents, $tableRegex)
echo "$table"
push_artifacts_to_repo:
needs: run_tests
runs-on: "ubuntu-latest"
permissions:
contents: write
steps:
- name: Download all artifacts to publish together
uses: actions/download-artifact@v4
with:
name: "ubuntu-latest"
path: "./coverage/ubuntu-latest"
- name: Download all artifacts to publish together
uses: actions/download-artifact@v4
with:
name: "macos-latest"
path: "./coverage/macos-latest"
- name: Download all artifacts to publish together
uses: actions/download-artifact@v4
with:
name: "windows-latest"
path: "./coverage/windows-latest"
- name: Download all artifacts to publish together
uses: actions/download-artifact@v4
with:
name: "coverage_VBC"
path: "./coverage/coverage_VBC"
- name: Download all artifacts to publish together
uses: actions/download-artifact@v4
with:
pattern: test_coverage_*
path: "./coverage/coverageFiles"
- name: Generate html to show the latest coverages for all os types
run: |
cd ./coverage
echo "<!DOCTYPE html><html><head><title>Contributor Readiness</title></head><body><h1>View contributor guides and full test coverage reports</h1><ul><li><a href="https://uifabric.visualstudio.com/iss/_wiki/wikis/iss.wiki/280/Charting-Concepts">Contributor guides</a></li><li><a href="./windows-latest/index.html">Coverage for Windows</a></li><li><a href="./ubuntu-latest/index.html">Coverage for Ubuntu</a></li><li><a href="./macos-latest/index.html">Coverage for MacOS</a></li><li><a href="./coverage_VBC/index.html">Coverage for Vertical bar chart - Windows</a></li></ul></body></html>" >> index.html
shell: bash
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: "./coverage"
- name: Directory disp
run: ls -a
- name: Checkout [test-coverage-artifacts]
uses: actions/checkout@v4
with:
path: repo
ref: test-coverage-artifacts
- name: Rename all txt reports to md and remove unnecessary lines
run: |
cd ./coverage
for f in $(find ./ -name '*.txt'); do
sed -i '/PASS/d' "$f"
sed -i '/FAIL/d' "$f"
sed -i '/yarn/d' "$f"
sed -i '/jest/d' "$f"
sed -i '1d' "$f"
statementCoveragePercent=$(echo $(awk '/All files/ {print}' $f) | awk -F'|' '{print $2}')
statementCoveragePercentTrimmed=$(echo "$statementCoveragePercent" | awk '{$1=$1; print}')
dir_path=$(dirname "$f")
file_name=$(basename "$f")
statementCovJson=$(jq -n \
--arg k1 "$statementCoveragePercentTrimmed" \
'{"statementCoverage": $k1}'
)
echo "$statementCovJson" > testCoverage.json
if [[ $f == *macos* ]]; then
echo "$statementCovJson" > macosCoverage.json
elif [[ $f == *windows* ]]; then
echo "$statementCovJson" > windowsCoverage.json
elif [[ $f == *ubuntu* ]]; then
echo "$statementCovJson" > ubuntuCoverage.json
fi
done
shell: bash
- name: Move coverage JSONs to root
run: |
mv -f ./repo/.github ./
cd repo
rm -rf ./*
cd ..
mv -f ./.github ./repo/
mv -f ./coverage/* ./repo/
cd repo
ls
- uses: stefanzweifel/git-auto-commit-action@v5
with:
repository: repo
branch: test-coverage-artifacts
deploy:
needs: push_artifacts_to_repo
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v4
with:
ref: main
- uses: actions/setup-node@v3
with:
node-version: 18
cache: yarn
- name: List files in docs
run: cd docs && ls -a
- name: Install dependencies
run: cd apps/docsite && yarn install --frozen-lockfile
- name: Build website
run: cd apps/docsite && yarn build
# Popular action to deploy to GitHub Pages:
# Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Build output to publish to the `gh-pages` branch:
publish_dir: ./apps/docsite/build
# The following lines assign commit authorship to the official
# GH-Actions bot for deploys to `gh-pages` branch:
# https://github.com/actions/checkout/issues/13#issuecomment-724415212
# The GH actions bot is used by default if you didn't specify the two fields.
# You can swap them out with your own user credentials.
user_name: github-actions[bot]
user_email: 41898282+github-actions[bot]@users.noreply.github.com