name: CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - { node-version: 10.x, lint: false, static-analysis: false, tests: false } - { node-version: 11.x, lint: false, static-analysis: false, tests: false } - { node-version: 12.x, lint: false, static-analysis: false, tests: false } - { node-version: 13.x, lint: false, static-analysis: false, tests: false } - { node-version: 14.x, lint: true, static-analysis: false, tests: true } - { node-version: 15.x, lint: false, static-analysis: false, tests: true } - { node-version: 16.x, lint: true, static-analysis: false, tests: true } - { node-version: 17.x, lint: true, static-analysis: false, tests: true } - { node-version: 18.x, lint: true, static-analysis: true, tests: true } - { node-version: 19.x, lint: true, static-analysis: false, tests: true } name: Node.js ${{ matrix.node-version }}${{ matrix.lint && ', lint' || '' }}${{ matrix.tests && ', test' || '' }}${{ matrix.static-analysis && ', static analysis' || ''}}, build steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Cache node modules id: cache-npm uses: actions/cache@v3 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 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 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 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: SonarCloud scan uses: SonarSource/sonarcloud-github-action@master env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} if: ${{ matrix.static-analysis }} - name: Build the project run: npm run build