name: CI on: [push, pull_request] jobs: build: runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: include: - { node-version: 14.x, lint: true, tests: true } - { node-version: 15.x, lint: false, tests: true } - { node-version: 16.x, lint: true, tests: true } - { node-version: 17.x, lint: true, tests: true } - { node-version: 18.x, lint: true, tests: true } - { node-version: 19.x, lint: true, tests: true } name: nodejs ${{ matrix.node-version }} (${{ matrix.lint && 'lint → ' || '' }}${{ matrix.tests && 'test → ' || '' }}build) steps: - uses: actions/checkout@v3.2.0 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3.6.0 with: node-version: ${{ matrix.node-version }} - name: Cache node modules id: cache-npm uses: actions/cache@v3.2.2 env: cache-name: cache-node-modules with: path: node_modules key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/package.json') }} - name: Cache eslint id: cache-eslint uses: actions/cache@v3.2.2 env: cache-name: cache-eslint with: path: .eslintcache key: ${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/package.json') }} - name: Cache TypeScript id: cache-typescript uses: actions/cache@v3.2.2 env: cache-name: cache-typescript with: path: .tsbuildinfo key: ${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/package.json') }} - name: Cache prettier id: cache-prettier uses: actions/cache@v3.2.2 env: cache-name: cache-prettier with: path: node_modules/.cache/prettier/.prettier-cache key: ${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/package.json') }} - name: Install dependencies run: npm install if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }} - name: Lint the project run: npm run lint if: ${{ matrix.lint }} - name: Run tests run: npm test if: ${{ matrix.tests }} - name: Upload code coverage uses: actions/upload-artifact@v3.1.1 with: name: code-coverage path: coverage/lcov.info if: ${{ matrix.node-version == '18.x' }} - name: Build the project run: npm run build