name: CI on: push: branches: [main, develop] pull_request: branches: [main, develop] jobs: lint-and-typecheck: name: Lint & Type Check runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'yarn' - name: Install dependencies run: yarn install --frozen-lockfile - name: Run ESLint run: yarn lint - name: Run TypeScript type check run: yarn typecheck - name: Run Prettier check run: yarn format build: name: Build runs-on: ubuntu-latest needs: lint-and-typecheck steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'yarn' - name: Install dependencies run: yarn install --frozen-lockfile - name: Build application run: yarn build - name: Report deployment readiness if: github.ref == 'refs/heads/main' run: echo "✅ All checks passed - ready for deployment" commitlint: name: Commit Lint runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'yarn' - name: Install dependencies run: yarn install --frozen-lockfile - name: Validate commit messages run: | if [ "${{ github.event_name }}" = "pull_request" ]; then yarn commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose else yarn commitlint --from HEAD~1 --to HEAD --verbose fi