# Runs frontend code quality checks. # # Checks for changes to frontend files before running the checks. # If always_run is true, always runs the checks. name: 'frontend checks' on: push: branches: - 'main' pull_request: types: - 'ready_for_review' - 'opened' - 'synchronize' merge_group: workflow_dispatch: inputs: always_run: description: 'Always run the checks' required: true type: boolean default: true workflow_call: inputs: always_run: description: 'Always run the checks' required: true type: boolean default: true defaults: run: working-directory: invokeai/frontend/web jobs: frontend-checks: runs-on: ubuntu-latest timeout-minutes: 10 # expected run time: <2 min steps: - uses: actions/checkout@v6 - name: Fail if package-lock.json is added/modified (pnpm only) shell: bash working-directory: . run: | set -euo pipefail git fetch --no-tags --prune --depth=1 origin "${{ github.base_ref }}" if git diff --name-only "origin/${{ github.base_ref }}...HEAD" | grep -E '(^|/)package-lock\.json$'; then echo "::error::package-lock.json was added or modified. This repo uses pnpm only." exit 1 fi - name: check for changed frontend files if: ${{ inputs.always_run != true }} id: changed-files # Pinned to the _hash_ for v45.0.9 to prevent supply-chain attacks. # See: # - CVE-2025-30066 # - https://www.stepsecurity.io/blog/harden-runner-detection-tj-actions-changed-files-action-is-compromised # - https://github.com/tj-actions/changed-files/issues/2463 uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 with: files_yaml: | frontend: - 'invokeai/frontend/web/**' - name: install dependencies if: ${{ steps.changed-files.outputs.frontend_any_changed == 'true' || inputs.always_run == true }} uses: ./.github/actions/install-frontend-deps - name: tsc if: ${{ steps.changed-files.outputs.frontend_any_changed == 'true' || inputs.always_run == true }} run: 'pnpm lint:tsc' shell: bash - name: dpdm if: ${{ steps.changed-files.outputs.frontend_any_changed == 'true' || inputs.always_run == true }} run: 'pnpm lint:dpdm' shell: bash - name: eslint if: ${{ steps.changed-files.outputs.frontend_any_changed == 'true' || inputs.always_run == true }} run: 'pnpm lint:eslint' shell: bash - name: prettier if: ${{ steps.changed-files.outputs.frontend_any_changed == 'true' || inputs.always_run == true }} run: 'pnpm lint:prettier' shell: bash - name: knip if: ${{ steps.changed-files.outputs.frontend_any_changed == 'true' || inputs.always_run == true }} run: 'pnpm lint:knip' shell: bash