diff --git a/.github/workflows/collect-coverage.yaml b/.github/workflows/collect-coverage.yaml new file mode 100644 index 00000000..b86fa643 --- /dev/null +++ b/.github/workflows/collect-coverage.yaml @@ -0,0 +1,78 @@ +name: collect-coverage +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +on: + schedule: + - cron: 0 0 * * 0 + workflow_dispatch: +jobs: + build: + name: Build + runs-on: ubuntu-latest + outputs: + affectedPackages: ${{ steps.get-affected-packages.outputs.packages }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: ./.github/actions/setup + + - name: Get affected packages + id: get-affected-packages + run: echo "packages=$(pnpm exec foundation-get-affected-projects test:js:coverage)" >> $GITHUB_OUTPUT + + test-coverage-package: + name: Test with coverage + needs: build + runs-on: ubuntu-latest + if: ${{ needs.build.outputs.affectedPackages != '[]' }} + strategy: + matrix: + package: ${{fromJSON(needs.build.outputs.affectedPackages)}} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: ./.github/actions/setup + + - name: Get current git commit hash + id: get-git-commit-hash + run: | + echo "gitCommitHash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + id: ts-build-cache + with: + path: | + ./packages/container/libraries/* + ./packages/foundation/tools/* + key: ts-build-${{ steps.get-git-commit-hash.outputs.gitCommitHash }} + restore-keys: | + ts-build-${{ steps.get-git-commit-hash.outputs.gitCommitHash }} + + - name: Build on cache miss + run: pnpm run build --filter ${{ join(matrix.packages, ' --filter ') }} + if: ${{ !steps.ts-build-cache.outputs.cache-hit }} + + - name: Launch Unit Tests and generate coverage report + run: pnpm run test:js:coverage --filter ${{ matrix.package }} --only + + - name: Upload coverage to Codecov (branch) + uses: codecov/codecov-action@v4 + with: + flags: ${{ matrix.package }} + override_branch: master + token: ${{ secrets.CODECOV_TOKEN }} + + test-coverage: + name: Test with coverage + needs: + - test-coverage-package + runs-on: ubuntu-latest + steps: + - run: 'echo "Done!"'