diff --git a/.github/workflows/node-test.yml b/.github/workflows/node-test.yml new file mode 100644 index 00000000..52a519e3 --- /dev/null +++ b/.github/workflows/node-test.yml @@ -0,0 +1,65 @@ +name: Node tests + +on: + pull_request: + push: + branches: + - main + - master + - stable* + +permissions: + contents: read + +concurrency: + group: node-tests-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@8205673bab74a63eb9b8093402fd9e0e018663a1 # v2.2 + id: versions + with: + fallbackNode: '^20' + fallbackNpm: '^9' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}" + + - name: Install dependencies & build + run: | + npm ci + npm run build --if-present + + - name: Test + run: npm run test --if-present + + - name: Test and process coverage + run: npm run test:coverage --if-present + + - name: Collect coverage + uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 + with: + files: ./coverage/lcov.info + + summary: + runs-on: ubuntu-latest + needs: test + if: always() + + name: test-summary + steps: + - name: Summary status + run: if ${{ needs.test.result != 'success' && needs.test.result != 'skipped' }}; then exit 1; fi diff --git a/package.json b/package.json index 9873b942..01346154 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "lint": "eslint .", "lint:fix": "eslint --fix lib tests", "test": "jest --verbose", - "test:watch": "jest --watchAll" + "test:watch": "jest --watchAll", + "test:coverage": "jest --coverage" }, "keywords": [ "nextcloud"