name: Lint on: pull_request: push: branches: - main concurrency: group: "${{ github.workflow }}-${{ github.head_ref || github.ref }}" cancel-in-progress: true jobs: linting: name: Run linters runs-on: ubuntu-latest steps: - name: ⬇️ Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Verify Node version pins match .nvmrc run: | set -euo pipefail expected=$(tr -d '[:space:]' < .nvmrc) rc=0 check() { if [ "$2" != "$expected" ]; then echo "::error file=$1::Node version mismatch: $1 pins '$2' but .nvmrc is '$expected'" rc=1 fi } # FROM node:X.Y.Z — service runtime images for f in Dockerfile.bskylink Dockerfile.bskyogcard; do v=$(grep -oE 'FROM node:[0-9]+\.[0-9]+\.[0-9]+' "$f" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | sort -u) check "$f" "$v" done # ENV NODE_VERSION=X.Y.Z — Go images that nvm-install Node for the JS build stage for f in Dockerfile Dockerfile.embedr; do v=$(grep -oE 'NODE_VERSION=[0-9]+\.[0-9]+\.[0-9]+' "$f" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | sort -u) check "$f" "$v" done # eas.json "node": "X.Y.Z" v=$(grep -oE '"node":[[:space:]]*"[0-9]+\.[0-9]+\.[0-9]+"' eas.json | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | sort -u) check "eas.json" "$v" exit $rc - name: 🔧 Setup Node uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version-file: .nvmrc cache: yarn - name: ⚙️ Install dependencies run: yarn install --frozen-lockfile - name: 🧐 Lint check run: yarn lint - name: 🔒 Lint lockfile run: yarn lockfile-lint - name: 💅 Prettier check run: yarn prettier --check . - name: 📝 Check & compile i18n run: yarn intl:build - name: ⌨️ Type check run: yarn typecheck testing: name: Run tests runs-on: ubuntu-latest steps: - name: ⬇️ Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: 🔧 Setup Node uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version-file: .nvmrc cache: yarn - name: ⚙️ Install dependencies run: yarn install --frozen-lockfile - name: 📝 Check & compile i18n run: yarn intl:build - name: 🏃 Run tests run: | NODE_ENV=test yarn test --forceExit