name: CI

on:
  push:
    branches: ["main", "master"]
    paths:
      - "scraper/**"
      - ".gitea/workflows/**"
  pull_request:
    branches: ["main", "master"]
    paths:
      - "scraper/**"
      - ".gitea/workflows/**"

defaults:
  run:
    working-directory: scraper

jobs:
  # ── lint & vet ───────────────────────────────────────────────────────────────
  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-go@v5
        with:
          go-version-file: scraper/go.mod
          cache-dependency-path: scraper/go.sum

      - name: go vet
        run: go vet ./...

      - name: staticcheck
        run: |
          go install honnef.co/go/tools/cmd/staticcheck@latest
          staticcheck ./...

  # ── tests ────────────────────────────────────────────────────────────────────
  test:
    name: Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-go@v5
        with:
          go-version-file: scraper/go.mod
          cache-dependency-path: scraper/go.sum

      - name: Run tests
        run: go test -race -count=1 -timeout=60s ./...

  # ── build binary ─────────────────────────────────────────────────────────────
  build:
    name: Build
    runs-on: ubuntu-latest
    needs: [lint, test]
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-go@v5
        with:
          go-version-file: scraper/go.mod
          cache-dependency-path: scraper/go.sum

      - name: Build binary
        run: |
          CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
            go build -ldflags="-s -w" -o bin/scraper ./cmd/scraper

      - name: Upload binary artifact
        uses: actions/upload-artifact@v4
        with:
          name: scraper-linux-amd64
          path: scraper/bin/scraper
          retention-days: 7

  # ── docker build (& push) ────────────────────────────────────────────────────
  # Uncomment once the runner has Docker available and a registry is configured.
  #
  # docker:
  #   name: Docker
  #   runs-on: ubuntu-latest
  #   needs: [lint, test]
  #   # Only push images on commits to the default branch, not on PRs.
  #   # if: github.event_name == 'push'
  #   steps:
  #     - uses: actions/checkout@v4
  #
  #     - name: Log in to Gitea registry
  #       uses: docker/login-action@v3
  #       with:
  #         registry: gitea.kalekber.cc
  #         username: ${{ secrets.REGISTRY_USER }}
  #         password: ${{ secrets.REGISTRY_TOKEN }}
  #
  #     - name: Build and push
  #       uses: docker/build-push-action@v5
  #       with:
  #         context: ./scraper
  #         push: true
  #         tags: |
  #           gitea.kalekber.cc/kamil/libnovel:latest
  #           gitea.kalekber.cc/kamil/libnovel:${{ gitea.sha }}
