| name: Node CI |
| |
| on: |
| pull_request: |
| types: [opened, reopened, synchronize] |
| |
| concurrency: |
| # Note that the `teardown-pr-preview` workflow needs the same group name |
| # to cancel the running `ci` workflows |
| group: ${{ github.workflow }}-${{ github.event.number }} |
| cancel-in-progress: true |
| |
| jobs: |
| lint: |
| runs-on: ubuntu-latest |
| |
| strategy: |
| matrix: |
| node-version: [20.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@v6 |
| with: |
| fetch-depth: ${{ env.FETCH_DEPTH }} |
| |
| - name: Use Node.js ${{ matrix.node-version }} |
| uses: actions/setup-node@v6 |
| with: |
| node-version: ${{ matrix.node-version }} |
| |
| - name: Cache node modules |
| id: cache-dep |
| uses: actions/cache@v5 |
| with: |
| path: node_modules |
| key: ${{ runner.os }}-node-modules-${{ 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' '*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: [20.x] |
| |
| steps: |
| - uses: actions/checkout@v6 |
| |
| - name: Use Node.js ${{ matrix.node-version }} |
| uses: actions/setup-node@v6 |
| with: |
| node-version: ${{ matrix.node-version }} |
| |
| - name: Cache node modules |
| id: cache-dep |
| uses: actions/cache@v5 |
| with: |
| path: node_modules |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} |
| |
| - name: Install dependencies |
| if: steps.cache-dep.outputs.cache-hit != 'true' |
| run: npm ci |
| |
| - name: Unit Test |
| run: npm run test |
| |
| - name: Build release |
| run: npm run release |
| |
| - name: Test generated DTS |
| run: npm run test:dts |