name: Code Quality on: push: branches: [main] pull_request: branches: [main] # Read-only token: these jobs never write through GITHUB_TOKEN. permissions: contents: read jobs: lint: name: ESLint runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - name: Setup Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: '20' - name: Enable Corepack run: corepack enable - name: Install dependencies run: yarn install --immutable - name: Run ESLint run: yarn eslint src/ --ext .ts --max-warnings 0 continue-on-error: true format: name: Prettier runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - name: Setup Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: '20' - name: Enable Corepack run: corepack enable - name: Install dependencies run: yarn install --immutable - name: Check formatting run: yarn prettier --check "src/**/*.ts" typecheck: name: TypeScript runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - name: Setup Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: '20' - name: Enable Corepack run: corepack enable - name: Install dependencies run: yarn install --immutable - name: Generate types run: ./node_modules/.bin/subql codegen pezkuwi.yaml - name: TypeScript check run: yarn tsc --noEmit complexity: name: Code Complexity runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - name: Setup Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: '20' - name: Install complexity checker run: npm install -g complexity-report - name: Check complexity run: | cr src/**/*.ts --format json > complexity-report.json || true HIGH_COMPLEXITY=$(cat complexity-report.json 2>/dev/null | jq '[.reports[].functions[] | select(.cyclomatic > 15)] | length' 2>/dev/null || echo "0") if [ "$HIGH_COMPLEXITY" -gt 0 ]; then echo "::warning::Found $HIGH_COMPLEXITY functions with cyclomatic complexity > 15" fi duplicate-code: name: Duplicate Code Detection runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - name: Setup Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: '20' - name: Install jscpd run: npm install -g jscpd - name: Check for duplicates run: jscpd src/ --min-lines 10 --min-tokens 50 --threshold 5 continue-on-error: true