Fast CI/CD build #15
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Fast CI/CD build | |
| on: | |
| schedule: | |
| # Combined schedule covering both EST and CET working hours | |
| # Morning/Early builds | |
| - cron: '30 6 * * 1-5' # 7:30 AM CET / 1:30 AM EST | |
| - cron: '30 11 * * 1-5' # 12:30 PM CET / 6:30 AM EST | |
| # Midday builds | |
| - cron: '30 16 * * 1-5' # 7:30 PM CET / 11:30 AM EST | |
| # Afternoon/Evening builds | |
| - cron: '30 21 * * 1-5' # 10:30 PM CET / 4:30 PM EST | |
| workflow_dispatch: | |
| jobs: | |
| build-all: | |
| name: Build all modules | |
| runs-on: ubuntu-latest | |
| if: ${{ github.repository_owner == 'spring-projects' }} | |
| 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: Build all modules (skip tests) | |
| run: | | |
| ./mvnw -T 1C -DskipTests --batch-mode --update-snapshots clean install | |
| - name: Generate Java docs | |
| if: github.ref == 'refs/heads/main' | |
| run: ./mvnw --batch-mode javadoc:aggregate | |
| - name: Generate assembly | |
| if: github.ref == 'refs/heads/main' | |
| working-directory: spring-ai-docs | |
| run: ../mvnw --batch-mode assembly:single | |
| - name: Upload Maven repository | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: maven-repo | |
| path: ~/.m2/repository | |
| retention-days: 1 | |
| - name: Upload Javadoc | |
| if: github.ref == 'refs/heads/main' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: javadoc | |
| path: target/site/apidocs | |
| retention-days: 1 | |
| - name: Upload assembly | |
| if: github.ref == 'refs/heads/main' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: assembly | |
| path: spring-ai-docs/target/*.zip | |
| retention-days: 1 | |
| test-ollama: | |
| name: Test Ollama | |
| runs-on: ubuntu-latest | |
| needs: build-all | |
| if: ${{ github.repository_owner == 'spring-projects' }} | |
| services: | |
| ollama: | |
| image: ollama/ollama:latest | |
| ports: | |
| - 11434:11434 | |
| env: | |
| OLLAMA_WITH_REUSE: true | |
| OLLAMA_AUTOCONF_TESTS_ENABLED: "true" | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Download Maven repository | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: maven-repo | |
| path: ~/.m2/repository | |
| - name: Configure Testcontainers | |
| run: | | |
| echo "testcontainers.reuse.enable=true" > $HOME/.testcontainers.properties | |
| - name: Test Ollama modules | |
| env: | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| SPRING_AI_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| run: | | |
| ./mvnw --batch-mode --no-snapshot-updates \ | |
| -pl auto-configurations/models/spring-ai-autoconfigure-model-ollama \ | |
| -Pci-fast-integration-tests \ | |
| -Dfailsafe.rerunFailingTestsCount=3 \ | |
| verify | |
| test-openai: | |
| name: Test OpenAI | |
| runs-on: ubuntu-latest | |
| needs: build-all | |
| if: ${{ github.repository_owner == 'spring-projects' }} | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Download Maven repository | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: maven-repo | |
| path: ~/.m2/repository | |
| - name: Configure Testcontainers | |
| run: | | |
| echo "testcontainers.reuse.enable=true" > $HOME/.testcontainers.properties | |
| - name: Test OpenAI modules | |
| env: | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| SPRING_AI_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| run: | | |
| ./mvnw --batch-mode --no-snapshot-updates \ | |
| -pl models/spring-ai-openai,auto-configurations/models/spring-ai-autoconfigure-model-openai \ | |
| -Pci-fast-integration-tests \ | |
| -Dfailsafe.rerunFailingTestsCount=3 \ | |
| verify | |
| test-remaining: | |
| name: Test Remaining (MCP, Google GenAI, Chroma, PgVector) | |
| runs-on: ubuntu-latest | |
| needs: build-all | |
| if: ${{ github.repository_owner == 'spring-projects' }} | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Download Maven repository | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: maven-repo | |
| path: ~/.m2/repository | |
| - name: Configure Testcontainers | |
| run: | | |
| echo "testcontainers.reuse.enable=true" > $HOME/.testcontainers.properties | |
| - name: Test remaining modules | |
| env: | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| SPRING_AI_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| run: | | |
| ./mvnw --batch-mode --no-snapshot-updates \ | |
| -pl models/spring-ai-google-genai,auto-configurations/models/spring-ai-autoconfigure-model-google-genai,mcp/common,mcp/mcp-annotations-spring,auto-configurations/mcp/spring-ai-autoconfigure-mcp-client-common,auto-configurations/mcp/spring-ai-autoconfigure-mcp-client-httpclient,auto-configurations/mcp/spring-ai-autoconfigure-mcp-client-webflux,auto-configurations/mcp/spring-ai-autoconfigure-mcp-server-common,auto-configurations/mcp/spring-ai-autoconfigure-mcp-server-webmvc,auto-configurations/mcp/spring-ai-autoconfigure-mcp-server-webflux,vector-stores/spring-ai-chroma-store,vector-stores/spring-ai-pgvector-store \ | |
| -Pci-fast-integration-tests \ | |
| -Dfailsafe.rerunFailingTestsCount=3 \ | |
| verify | |
| deploy-artifactory: | |
| name: Deploy to Artifactory | |
| runs-on: ubuntu-latest | |
| needs: [build-all, test-ollama, test-openai, test-remaining] | |
| if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'spring-projects' }} | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Download Maven repository | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: maven-repo | |
| path: ~/.m2/repository | |
| - name: Deploy to Artifactory | |
| env: | |
| ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} | |
| ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} | |
| run: | | |
| ./mvnw -s settings.xml --batch-mode -DskipTests deploy | |
| deploy-docs: | |
| name: Deploy documentation | |
| runs-on: ubuntu-latest | |
| needs: [build-all, test-ollama, test-openai, test-remaining] | |
| if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'spring-projects' }} | |
| steps: | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Download Javadoc | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: javadoc | |
| path: target/site/apidocs | |
| - name: Download assembly | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: assembly | |
| path: spring-ai-docs/target | |
| - name: Capture project version | |
| run: echo PROJECT_VERSION=$(./mvnw 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 |