---
kind: pipeline
type: docker
name: default

platform:
  os: linux
  arch: arm64

workspace:
  path: /drone/src

volumes:
  - name: dockersock
    host:
      path: /var/run/docker.sock

steps:
  - name: fetch-tags
    image: docker:24
    volumes:
      - name: dockersock
        path: /var/run/docker.sock
    commands:
      - apk add --no-cache git
      - git fetch --tags
      - |
        # Get latest Git tag and trim newline
        LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null | tr -d '\n')
        echo "Latest Git tag fetched: $LATEST_TAG"

        # Save to file for downstream steps
        echo "$LATEST_TAG" > /drone/src/LATEST_TAG.txt

        # Read back for verification
        IMAGE_TAG=$(cat /drone/src/LATEST_TAG.txt | tr -d '\n')
        echo "Image tag read from file: $IMAGE_TAG"

        # Validate
        if [ -z "$IMAGE_TAG" ]; then
          echo "❌ No git tags found! Cannot continue."
          exit 1
        fi

  - name: check-remote-image
    image: docker:24
    volumes:
      - name: dockersock
        path: /var/run/docker.sock
    commands:
      - IMAGE_TAG=$(cat /drone/src/LATEST_TAG.txt | tr -d '\n')

      - echo "Checking if apps/blog:$IMAGE_TAG exists on remote Docker..."
      - echo "Existing Docker tags for apps/blog:"
      - docker images --format "{{.Repository}}:{{.Tag}}" | grep "^apps/blog" || echo "(none)"
      - |
        if docker image inspect apps/blog:$IMAGE_TAG > /dev/null 2>&1; then
          echo "✅ Docker image apps/blog:$IMAGE_TAG already exists — skipping build"
          exit 78
        else
          echo "⚙️ Docker image apps/blog:$IMAGE_TAG not found — proceeding to build..."
        fi

  - name: build-image
    image: docker:24
    environment:
      API_BASE_URL:
        from_secret: API_BASE_URL
    volumes:
      - name: dockersock
        path: /var/run/docker.sock
    commands:
      - IMAGE_TAG=$(cat /drone/src/LATEST_TAG.txt | tr -d '\n')

      - echo "🔨 Building Docker image apps/blog:$IMAGE_TAG ..."
      - |
        docker build --network=host \
        --build-arg VITE_API_BASE_URL="$API_BASE_URL" \
        -t apps/blog:$IMAGE_TAG \
        -t apps/blog:latest \
        /drone/src

  - name: push-image
    image: docker:24
    environment:
      REGISTRY_HOST:
        from_secret: REGISTRY_HOST
      REGISTRY_USER:
        from_secret: REGISTRY_USER
      REGISTRY_PASS:
        from_secret: REGISTRY_PASS
    volumes:
      - name: dockersock
        path: /var/run/docker.sock
    commands:
      - IMAGE_TAG=$(cat /drone/src/LATEST_TAG.txt | tr -d '\n')

      - echo "🔑 Logging into registry $REGISTRY_HOST ..."
      - echo "$REGISTRY_PASS" | docker login $REGISTRY_HOST -u "$REGISTRY_USER" --password-stdin
      - echo "🏷️ Tagging images with registry prefix..."
      - docker tag apps/blog:$IMAGE_TAG $REGISTRY_HOST/apps/blog:$IMAGE_TAG
      - docker tag apps/blog:$IMAGE_TAG $REGISTRY_HOST/apps/blog:latest
      - echo "📤 Pushing apps/blog:$IMAGE_TAG ..."
      - docker push $REGISTRY_HOST/apps/blog:$IMAGE_TAG
      - echo "📤 Pushing apps/blog:latest ..."
      - docker push $REGISTRY_HOST/apps/blog:latest

  - name: stop-old
    image: docker:24
    volumes:
      - name: dockersock
        path: /var/run/docker.sock
    commands:
      - echo "🛑 Stopping old container..."
      - docker rm -f blog || true

  - name: run-container
    image: docker:24
    volumes:
      - name: dockersock
        path: /var/run/docker.sock
    commands:
      - IMAGE_TAG=$(cat /drone/src/LATEST_TAG.txt | tr -d '\n')

      - echo "🚀 Starting container apps/blog:$IMAGE_TAG ..."
      - |
        docker run -d \
          --name blog \
          -p 3002:3000 \
          -e NODE_ENV=production \
          --restart always \
          apps/blog:$IMAGE_TAG

# Trigger rules
trigger:
  event:
    - tag
