Fix unit test coverage #54
Workflow file for this run
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: 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 |