diff --git a/workflow-templates/node-test.properties.json b/workflow-templates/node-test.properties.json new file mode 100644 index 00000000..4d3c6379 --- /dev/null +++ b/workflow-templates/node-test.properties.json @@ -0,0 +1,16 @@ +{ + "name": "Node testing workflow", + "description": "Setup node and npm, install dependencies, build test and send coverage to codecov if enabled.", + "iconName": "node-test", + "categories": [ + "JavaScript", + "codecov", + "node", + "npm", + "test", + "coverage" + ], + "filePatterns": [ + "^package.json$" + ] +} diff --git a/workflow-templates/node-test.svg b/workflow-templates/node-test.svg new file mode 100644 index 00000000..58a46d86 --- /dev/null +++ b/workflow-templates/node-test.svg @@ -0,0 +1,3 @@ + + + diff --git a/workflow-templates/node-test.yml b/workflow-templates/node-test.yml new file mode 100644 index 00000000..52a519e3 --- /dev/null +++ b/workflow-templates/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