Fast CI/CD build #3
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: | |
| workflow_dispatch: | |
| # Note: Schedule triggers commented out for initial testing | |
| # schedule: | |
| # - 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 | |
| # - cron: '30 16 * * 1-5' # 7:30 PM CET / 11:30 AM EST | |
| # - cron: '30 21 * * 1-5' # 10:30 PM CET / 4:30 PM EST | |
| 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 |