|  | name: Node CI | 
|  |  | 
|  | on: | 
|  | pull_request: | 
|  | types: [opened, synchronize] | 
|  |  | 
|  | jobs: | 
|  | lint: | 
|  | runs-on: ubuntu-latest | 
|  |  | 
|  | strategy: | 
|  | matrix: | 
|  | node-version: [16.x] | 
|  |  | 
|  | steps: | 
|  | - name: Fetch commit count | 
|  | env: | 
|  | PR_COMMIT_COUNT: ${{ github.event.pull_request.commits }} | 
|  | run: | | 
|  | echo "FETCH_DEPTH=$(($PR_COMMIT_COUNT + 1))" >> $GITHUB_ENV | 
|  |  | 
|  | - uses: actions/checkout@v3 | 
|  | with: | 
|  | fetch-depth: ${{ env.FETCH_DEPTH }} | 
|  |  | 
|  | - name: Use Node.js ${{ matrix.node-version }} | 
|  | uses: actions/setup-node@v3 | 
|  | with: | 
|  | node-version: ${{ matrix.node-version }} | 
|  |  | 
|  | - name: Cache node modules | 
|  | id: cache-dep | 
|  | uses: actions/cache@v3 | 
|  | env: | 
|  | cache-name: cache-node-modules | 
|  | with: | 
|  | path: node_modules | 
|  | key: ${{ runner.os }}-lint-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | 
|  |  | 
|  | - name: Install dependencies | 
|  | if: steps.cache-dep.outputs.cache-hit != 'true' | 
|  | run: npm ci | 
|  |  | 
|  | - name: Collect changed files | 
|  | run: | | 
|  | mkdir ~/tmp/ | 
|  | git diff ${{ github.event.pull_request.base.sha }} ${{ github.sha }} --diff-filter=ACM --name-only --relative '*src/**/*.ts' > ~/tmp/changed_files | 
|  | echo -e "Changed files: \n$(cat ~/tmp/changed_files)" | 
|  |  | 
|  | - name: Lint | 
|  | run: npx eslint $(cat ~/tmp/changed_files) | 
|  |  | 
|  | - name: Check types | 
|  | run: npm run checktype | 
|  |  | 
|  | build: | 
|  | runs-on: ubuntu-latest | 
|  |  | 
|  | strategy: | 
|  | matrix: | 
|  | node-version: [16.x] | 
|  |  | 
|  | steps: | 
|  | - uses: actions/checkout@v3 | 
|  |  | 
|  | - name: Use Node.js ${{ matrix.node-version }} | 
|  | uses: actions/setup-node@v3 | 
|  | with: | 
|  | node-version: ${{ matrix.node-version }} | 
|  |  | 
|  | - name: Cache node modules | 
|  | id: cache-dep | 
|  | 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') }} | 
|  |  | 
|  | - name: Install dependencies | 
|  | if: steps.cache-dep.outputs.cache-hit != 'true' | 
|  | run: npm ci | 
|  |  | 
|  | - name: Build release | 
|  | run: npm run release | 
|  |  | 
|  | - name: Test generated DTS | 
|  | run: npm run test:dts | 
|  |  | 
|  | - name: Unit Test | 
|  | run: npm run test |