Test coverage #765
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: "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 |