Skip to content

Fix unit test coverage #54

Fix unit test coverage

Fix unit test coverage #54

name: Pull request validation
on:
pull_request:
branches:
- main
paths-ignore:
- .github
- .vscode
push:
branches:
- feat-github-workflow
workflow_dispatch: {}
defaults:
run:
shell: bash
env:
CI_PULL_REQUEST: 1 # Skip nightly tests
NODE_ENV: test # Add instrumentation code
node-version: 20.x
skip-secure-feed: true # TODO: Turn this off.
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ env.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
cache: npm
- if: "env.skip-secure-feed != 'true'"
name: Enable secure feed
run: npx https://aka.ms/EnableSecureFeed
- run: npm clean-install
- run: npm run bootstrap
- run: npm run build --if-present
- name: Pack Docker artifact
run: |
zip docker.zip -r@ <<EOF
./__tests__/
./babel-jest-config.js
./babel-passthru-transformer.js
./babel.config.json
./docker-compose-wsl2.yml
./jest.config.js
./package.json
./package-lock.json
./packages/bundle/dist/
./packages/test/harness/
./packages/test/page-object/dist/
./serve-test.json
./testharness.dockerfile
./testharness2.dockerfile
EOF
- run: ls -l docker.zip
- name: Upload Docker artifact
uses: actions/upload-artifact@v3
with:
name: docker
path: docker.zip
retention-days: 1
static-code-analysis:
name: Static code analysis
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ env.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
cache: npm
- if: "env.skip-secure-feed != 'true'"
name: Enable secure feed
run: npx https://aka.ms/EnableSecureFeed
- run: npm clean-install
- run: npm run bootstrap
- run: npm run build --if-present
- run: npm run precommit --if-present
unit-test:
name: Unit test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ env.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
cache: npm
- if: "env.skip-secure-feed != 'true'"
name: Enable secure feed
run: npx https://aka.ms/EnableSecureFeed
- run: npm clean-install
- run: npm run bootstrap
- run: npm run build --if-present
- name: Run jest --testPathPattern packages/
run: |
./node_modules/.bin/jest \
--ci \
--coverage true \
--forceExit \
--logHeapUsage \
--runInBand \
--testPathPattern packages/
timeout-minutes: 10
- if: always()
name: Append ID to test result
run: |
ls -laR .
mv cobertura-coverage.xml cobertura-coverage-unit.xml
mv jest.json jest-unit.json
mv lcov.info lcov-unit.info
mv nunit3.xml nunit3-unit.xml
mv result.trx result-unit.trx
working-directory: ./coverage
- if: always()
name: Upload test results
uses: actions/upload-artifact@v3
with:
name: sharded-test-result
path: |
./coverage/cobertura-coverage-*.xml
./coverage/jest-*.json
./coverage/lcov-*.info
./coverage/nunit3-*.xml
./coverage/result-*.trx
html-test:
name: HTML test (${{ format('{0}/{1}', matrix.shard-index, matrix.shard-count) }})
needs:
- build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard-index: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
shard-count: [20]
steps:
- name: Use Node.js ${{ env.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
- if: "env.skip-secure-feed != 'true'"
name: Enable secure feed
run: npx https://aka.ms/EnableSecureFeed
- name: Download Docker artifact
uses: actions/download-artifact@v3
with:
name: docker
- run: unzip docker.zip
- run: rm docker.zip
- run: npm clean-install
- name: Run docker-compose build
run: docker-compose -f docker-compose-wsl2.yml build --build-arg REGISTRY=mcr.microsoft.com/mirror/docker/library
- name: Run docker-compose up
run: docker-compose -f docker-compose-wsl2.yml up --detach --scale chrome=2
- name: Ping Web Driver hub
run: |
set +eo pipefail
while true
do
curl http://localhost:4444/wd/hub/status > /tmp/wd-status.json
[[ $? -eq 0 ]] && cat /tmp/wd-status.json | jq -r 'if (.value.ready != true) then halt_error(1) else empty end'
[[ $? -eq 0 ]] && break
sleep 1
done
- name: Run jest --shard=${{ format('{0}/{1}', matrix.shard-index, matrix.shard-count) }}
run: |
./node_modules/.bin/jest \
--ci \
--coverage true \
--forceExit \
--logHeapUsage \
--runInBand \
--shard=${{ format('{0}/{1}', matrix.shard-index, matrix.shard-count) }}
timeout-minutes: 10
- if: always()
name: Print Docker logs
run: docker-compose -f docker-compose-wsl2.yml logs
- if: always()
name: Append ID to test result
run: |
ls -laR .
mv cobertura-coverage.xml cobertura-coverage-${{ matrix.shard-index }}.xml
mv jest.json jest-${{ matrix.shard-index }}.json
mv lcov.info lcov-${{ matrix.shard-index }}.info
mv nunit3.xml nunit3-${{ matrix.shard-index }}.xml
mv result.trx result-${{ matrix.shard-index }}.trx
working-directory: ./coverage
- if: always()
name: Upload test results
uses: actions/upload-artifact@v3
with:
name: sharded-test-result
path: |
./coverage/cobertura-coverage-*.xml
./coverage/jest-*.json
./coverage/lcov-*.info
./coverage/nunit3-*.xml
./coverage/result-*.trx
merge-test-result:
if: always()
name: Merge test result
needs:
- html-test
- unit-test
runs-on: ubuntu-latest
steps:
- name: Download test results
uses: actions/download-artifact@v3
with:
name: sharded-test-result
- run: ls -laR
# - name: Use Node.js ${{ env.node-version }}
# uses: actions/setup-node@v4
# with:
# node-version: ${{ env.node-version }}
# - if: "env.skip-secure-feed != 'true'"
# name: Enable secure feed
# run: npx https://aka.ms/EnableSecureFeed
- name: Install Gcovr
run: pip install gcovr
- name: Merge cobertura-coverage-*.xml
run: |
gcovr \
-a cobertura-coverage-1.xml \
-a cobertura-coverage-2.xml \
-a cobertura-coverage-3.xml \
-a cobertura-coverage-4.xml \
-a cobertura-coverage-5.xml \
-a cobertura-coverage-6.xml \
-a cobertura-coverage-7.xml \
-a cobertura-coverage-8.xml \
-a cobertura-coverage-9.xml \
-a cobertura-coverage-10.xml \
-a cobertura-coverage-11.xml \
-a cobertura-coverage-12.xml \
-a cobertura-coverage-13.xml \
-a cobertura-coverage-14.xml \
-a cobertura-coverage-15.xml \
-a cobertura-coverage-16.xml \
-a cobertura-coverage-17.xml \
-a cobertura-coverage-18.xml \
-a cobertura-coverage-19.xml \
-a cobertura-coverage-20.xml \
-a cobertura-coverage-unit.xml \
--xml cobertura-coverage.xml
- if: always()
name: Print Cobertura line coverage
run: gcovr cobertura-coverage.xml --txt
- if: always()
name: Print Cobertura branch coverage
run: gcovr cobertura-coverage.xml --branches --txt
- name: Merge lcov-*.info
run: |
lcov \
--rc lcov_branch_coverage=1 \
--add-tracefile lcov-1.info \
--add-tracefile lcov-2.info \
--add-tracefile lcov-3.info \
--add-tracefile lcov-4.info \
--add-tracefile lcov-5.info \
--add-tracefile lcov-6.info \
--add-tracefile lcov-7.info \
--add-tracefile lcov-8.info \
--add-tracefile lcov-9.info \
--add-tracefile lcov-10.info \
--add-tracefile lcov-11.info \
--add-tracefile lcov-12.info \
--add-tracefile lcov-13.info \
--add-tracefile lcov-14.info \
--add-tracefile lcov-15.info \
--add-tracefile lcov-16.info \
--add-tracefile lcov-17.info \
--add-tracefile lcov-18.info \
--add-tracefile lcov-19.info \
--add-tracefile lcov-20.info \
--add-tracefile lcov-unit.info \
--output-file lcov.info
- if: always()
name: Print lcov coverage list
run: lcov --list lcov.info
- if: always()
name: Print lcov coverage summary
run: lcov --summary lcov.info
- if: always()
name: Upload merged test results
uses: actions/upload-artifact@v3
with:
name: merged-test-result
path: |
cobertura-coverage.xml
lcov.info
# run: reportgenerator "-reports:cobertura-coverage-*.xml" "-targetdir:./merged/" -reporttypes:Cobertura
# run:
# npx cobertura-coverage \
# -o cobertura-coverage.xml \
# unit=cobertura-coverage-unit.xml \
# shard1=cobertura-coverage-1.xml \
# shard2=cobertura-coverage-2.xml \
# shard3=cobertura-coverage-3.xml \
# shard4=cobertura-coverage-4.xml \
# shard5=cobertura-coverage-5.xml \
# shard6=cobertura-coverage-6.xml \
# shard7=cobertura-coverage-7.xml \
# shard8=cobertura-coverage-8.xml \
# shard9=cobertura-coverage-9.xml \
# shard10=cobertura-coverage-10.xml \
# shard11=cobertura-coverage-11.xml \
# shard12=cobertura-coverage-12.xml \
# shard13=cobertura-coverage-13.xml \
# shard14=cobertura-coverage-14.xml \
# shard15=cobertura-coverage-15.xml \
# shard16=cobertura-coverage-16.xml \
# shard17=cobertura-coverage-17.xml \
# shard18=cobertura-coverage-18.xml \
# shard19=cobertura-coverage-19.xml \
# shard20=cobertura-coverage-20.xml