name: CI/CD build

on:
  push:
    branches: [ "main" ]

jobs:
  build:
    name: Build branch
    runs-on: ubuntu-latest
    services:
      ollama:
        image: ollama/ollama:latest
        ports:
          - 11434:11434
    env:
      OLLAMA_WITH_REUSE: true
    steps:
      - name: Checkout source code
        uses: actions/checkout@v4

      - name: Free Disk Space
        uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
        with:
          large-packages: false
          docker-images: false

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: 'maven'

      - name: Configure Testcontainers
        run: |
          echo "testcontainers.reuse.enable=true" > $HOME/.testcontainers.properties

      # - name: Cache Docker images.
      #   uses: ScribeMD/docker-cache@0.3.7
      #   with:
      #     key: docker-${{ runner.os }}-${{ hashFiles('**/OllamaImage.java') }}

      - name: Build with Maven and deploy to Artifactory
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          SPRING_AI_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
          ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
          OLLAMA_AUTOCONF_TESTS_ENABLED: "true"
          OLLAMA_WITH_REUSE: true
        run: |
          mvn -s settings.xml -Pci-fast-integration-tests -Pjavadoc -Dfailsafe.rerunFailingTestsCount=3 \
          --batch-mode --update-snapshots deploy

      - name: Generate Java docs
        run: mvn javadoc:aggregate

      - name: Generate assembly
        working-directory: spring-ai-docs
        run: mvn assembly:single

      - name: Capture project version
        run: echo PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version --quiet -DforceStdout) >> $GITHUB_ENV

      - name: Setup SSH key
        env:
          DOCS_SSH_KEY: ${{ secrets.DOCS_SSH_KEY }}
          DOCS_SSH_HOST_KEY: ${{ secrets.DOCS_SSH_HOST_KEY }}
        run: |
          mkdir "$HOME/.ssh"
          echo "$DOCS_SSH_KEY" > "$HOME/.ssh/key"
          chmod 600 "$HOME/.ssh/key"
          echo "$DOCS_SSH_HOST_KEY" > "$HOME/.ssh/known_hosts"

      - name: Deploy docs
        env:
          DOCS_HOST: ${{ secrets.DOCS_HOST }}
          DOCS_PATH: ${{ secrets.DOCS_PATH }}
          DOCS_USERNAME: ${{ secrets.DOCS_USERNAME }}
        working-directory: spring-ai-docs/target
        run: |
          unzip spring-ai-$PROJECT_VERSION-docs.zip
          ssh -i $HOME/.ssh/key $DOCS_USERNAME@$DOCS_HOST "cd $DOCS_PATH && mkdir -p $PROJECT_VERSION"
          scp -i $HOME/.ssh/key -r api $DOCS_USERNAME@$DOCS_HOST:$DOCS_PATH/$PROJECT_VERSION
  
