diff --git a/.github/.codecov.yml b/.github/.codecov.yml new file mode 100644 index 000000000..21de6af0a --- /dev/null +++ b/.github/.codecov.yml @@ -0,0 +1,31 @@ +codecov: + require_ci_to_pass: yes + +coverage: + precision: 2 + round: down + range: "70...100" + status: + project: + default: + target: auto + threshold: 100% + base: auto + +parsers: + gcov: + branch_detection: + conditional: yes + loop: yes + method: no + macro: no + +comment: + layout: "reach,diff,flags,files,footer" + behavior: default + require_changes: no + require_head: no + require_base: no + +github_checks: + annotations: true diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 000000000..38b5ea9f3 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,83 @@ +name: Coverage + +on: + pull_request: + push: + paths-ignore: + - '.github/workflows/linux-build.yml' + - '.github/workflows/linux-build-sanitizer.yml' + - '.github/workflows/msys2-build.yml' + - '.github/workflows/windows-build.yml' + - '.gitignore' + - 'LICENSE' + - 'CHANGELOG.md' + - 'README.md' + - 'README_en.md' + - 'README_fr.md' + +jobs: + build: + strategy: + matrix: + os: [ubuntu-20.04] + arch: [x86_64] + mode: [coverage] + + runs-on: ${{ matrix.os }} + if: "!contains(github.event.head_commit.message, 'ci skip')" + + steps: + - uses: actions/checkout@v2 + + # Install Nazara dependencies + - name: Update apt repositories + run: sudo apt-get update + + # Install Nazara dependencies + - name: Install system dependencies + run: | + sudo apt-get install libsndfile1-dev libfreetype6-dev libsdl2-dev mesa-common-dev libxcb-ewmh-dev libxcb-randr0-dev libxcb-icccm4-dev libxcb-keysyms1-dev libgl1-mesa-dev git gcovr -y + + # Force xmake to a specific folder (for cache) + - name: Set xmake env + run: echo "XMAKE_GLOBALDIR=${{ runner.workspace }}/xmake-global" >> $GITHUB_ENV + + # Install xmake + - name: Setup xmake + uses: xmake-io/github-action-setup-xmake@v1 + with: + xmake-version: branch@dev + + # Fetch xmake dephash + - name: Retrieve dependencies hash + id: dep_hash + run: echo "::set-output name=hash::$(xmake l utils.ci.packageskey)" + + # Cache xmake dependencies + - name: Retrieve cached xmake dependencies + uses: actions/cache@v2 + with: + path: ${{ env.XMAKE_GLOBALDIR }}/.xmake/packages + key: Linux-${{ matrix.arch }}-${{ matrix.mode }}-${{ steps.dep_hash.outputs.hash }} + + # Setup compilation mode and install project dependencies + - name: Configure xmake and install dependencies + run: xmake config --shadernodes=y --tests=y --arch=${{ matrix.arch }} --mode=${{ matrix.mode }} --verbose --yes + + # Build the engine + - name: Build Nazara + run: xmake -v + + # Run unit tests + - name: Run Nazara Unit tests + run: xmake run NazaraUnitTests + + # Build coverage file + - name: Build coverage output + run: gcovr -x coverage.out -s -f 'include/Nazara/.*' -f 'src/Nazara/.*' build/.objs/ + + - name: Upload Coverage Report to Codecov + uses: codecov/codecov-action@v2 + with: + files: ./coverage.out + fail_ci_if_error: true diff --git a/.github/workflows/linux-build-sanitizer.yml b/.github/workflows/linux-build-sanitizer.yml index d0babc72a..ba1e033e8 100644 --- a/.github/workflows/linux-build-sanitizer.yml +++ b/.github/workflows/linux-build-sanitizer.yml @@ -57,10 +57,6 @@ jobs: with: xmake-version: branch@dev - # Update xmake repository (in order to have the file that will be cached) - - name: Update xmake repository - run: xmake repo --update - # Fetch xmake dephash - name: Retrieve dependencies hash id: dep_hash @@ -83,7 +79,8 @@ jobs: # Build the engine - name: Build Nazara - run: xmake -v - + run: xmake + + # Run unit tests - name: Run Nazara Unit tests run: xmake run NazaraUnitTests diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index e4c4966ac..af12a1573 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -38,10 +38,6 @@ jobs: with: xmake-version: branch@dev - # Update xmake repository (in order to have the file that will be cached) - - name: Update xmake repository - run: xmake.exe repo --update - # Fetch xmake dephash - name: Retrieve dependencies hash id: dep_hash diff --git a/.gitignore b/.gitignore index 1e8b4ae53..adc3e018f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ Makefile vs*/* vsxmake*/* +# Coverage +coverage.out + # Embed resources src/Nazara/*/Resources/**/*.h