name: validate concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions permissions: contents: read on: push: branches: - 'master' - 'releases/v*' pull_request: jobs: lint: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Node.js uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v6.0.0 with: node-version-file: '.node-version' cache: npm - name: Install dependencies run: npm ci - name: Format check run: npm run format-check - name: Lint run: npm run lint build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Node.js uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v6.0.0 with: node-version-file: '.node-version' cache: npm - name: Install dependencies run: npm ci --ignore-scripts - name: Rebuild dist run: npm run build - name: Compare dist id: diff run: | if [ "$(git diff --ignore-space-at-eol dist | wc -l)" -gt "0" ]; then echo "Detected uncommitted changes after build. Run 'npm run build' and commit dist/." >&2 git diff dist exit 1 fi - name: Upload built dist on failure if: ${{ failure() && steps.diff.conclusion == 'failure' }} uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: dist path: dist vendor: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Node.js uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v6.0.0 with: node-version-file: '.node-version' cache: npm - name: Refresh package-lock.json run: npm install --package-lock-only - name: Compare package-lock.json run: | if [ -n "$(git status --porcelain -- package-lock.json)" ]; then echo "package-lock.json is out of sync with package.json. Run 'npm install' and commit." >&2 git diff package-lock.json exit 1 fi