name: Astro Build and Test

on:
  push:
    branches: [ '*' ]
    paths-ignore:
      - 'README.md'
      - 'docs/**'
      - 'www/**'
      - 'helm/**'
  pull_request:
    branches: [ '*' ]
    paths-ignore:
      - 'README.md'
      - 'docs/**'
      - 'www/**'
      - 'helm/**'

permissions:
  contents: read
  actions: read

jobs:
  build-and-test:
    name: Build and Test Astro Project
    runs-on: ubuntu-latest
    timeout-minutes: 25

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Bun
        uses: oven-sh/setup-bun@v1
        with:
          bun-version: '1.3.10'

      - name: Check lockfile and install dependencies
        run: |
          # Check if bun.lock exists, if not check for bun.lockb
          if [ -f "bun.lock" ]; then
            echo "Using existing bun.lock file"
          elif [ -f "bun.lockb" ]; then
            echo "Found bun.lockb, creating symlink to bun.lock"
            ln -s bun.lockb bun.lock
          fi
          bun install

      - name: Run tests
        run: bun test --coverage
      
      - name: Check Drizzle migrations
        run: bun run db:check

      - name: Validate migrations (SQLite lint + upgrade path)
        run: bun test:migrations

      - name: Build Astro project
        run: bunx --bun astro build

      - name: Upload build artifacts
        uses: actions/upload-artifact@v4
        with:
          name: astro-build
          path: dist/
          retention-days: 7
