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: [18.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: [18.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: Unit Test run: npm run test - name: Build release run: npm run release - name: Test generated DTS run: npm run test:dts - name: Pack npm tarball if: ${{ github.repository_owner == 'apache' }} id: pack-tarball run: | export PR_PREVIEW_DIR='echarts-pr-preview' mkdir -p $PR_PREVIEW_DIR npm pack -pack-destination $PR_PREVIEW_DIR echo "PR_PREVIEW_DIR=$PR_PREVIEW_DIR" >> $GITHUB_ENV - name: Save PR metadata and dist files if: ${{ steps.pack-tarball.outcome == 'success' }} id: save-pr-data env: PR_NUMBER: ${{ github.event.number }} PR_COMMIT_SHA: ${{ github.event.pull_request.head.sha }} PR_PREVIEW_DIR: ${{ env.PR_PREVIEW_DIR }} run: | cd $PR_PREVIEW_DIR echo $PR_NUMBER > ./pr_number echo $PR_COMMIT_SHA > ./pr_commit_sha find . -type f -regex ".*\.tgz" -exec tar xvzf {} \; rm -f *.tgz echo -e "Dist files: \n$(ls -l)" - uses: actions/upload-artifact@v3 if: ${{ steps.save-pr-data.outcome == 'success' }} with: name: pr_preview path: ${{ env.PR_PREVIEW_DIR }} retention-days: 1 if-no-files-found: error