Nightly Build JDK 25 #4
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: Nightly Build JDK 25 | |
| on: | |
| schedule: | |
| - cron: '0 4 * * *' # daily at 04:00 UTC | |
| workflow_dispatch: | |
| jobs: | |
| discover-modules: | |
| if: github.repository == 'langchain4j/langchain4j' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| matrix: ${{ steps.set-matrix.outputs.matrix }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - id: set-matrix | |
| shell: bash | |
| run: | | |
| echo "Discovering Maven modules..." | |
| modules=$(find . -type f -name pom.xml -exec dirname {} \; | sort | uniq | sed 's|^\./||' | grep -v '^$' | grep -v '^.$') | |
| echo "Detected modules:" | |
| echo "$modules" | |
| # number of parallel groups | |
| N=7 | |
| # round-robin grouping | |
| matrix=$(echo "$modules" | awk -v N="$N" ' | |
| { | |
| g = (NR - 1) % N | |
| arr[g] = (arr[g] ? arr[g] "," "\"" $0 "\"" : "\"" $0 "\"") | |
| } | |
| END { | |
| printf("{\"modules\": ["); | |
| for (i = 0; i < N; i++) { | |
| if (i > 0) printf(","); | |
| printf("[%s]", arr[i]) | |
| } | |
| print "]}" | |
| } | |
| ') | |
| echo "Generated matrix: $matrix" | |
| echo "matrix=$matrix" >> $GITHUB_OUTPUT | |
| build: | |
| needs: discover-modules | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.discover-modules.outputs.matrix) }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up JDK 25 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 25 | |
| distribution: 'temurin' | |
| cache: 'maven' | |
| - name: Authenticate to Google Cloud | |
| # Required for Google modules (e.g., langchain4j-vertex-ai) | |
| uses: google-github-actions/auth@v2 | |
| with: | |
| project_id: ${{ secrets.GCP_PROJECT_ID }} | |
| credentials_json: ${{ secrets.GCP_CREDENTIALS_JSON }} | |
| - name: Setup JBang | |
| # Required for MCP module | |
| uses: jbangdev/setup-jbang@main | |
| continue-on-error: true | |
| - name: Build with JDK 25 | |
| run: | | |
| modules="${{ join(matrix.modules, ',') }}" | |
| echo "Building modules: $modules" | |
| ## compile and install ALL modules to avoid running integration tests on dependent modules in the step below | |
| mvn -B -U -T8C -DskipTests -DskipITs -DembeddingsSkipCache install | |
| mvn -B -U verify \ | |
| -pl "${modules}" \ | |
| -DskipAzureAiSearchITs -DskipJlamaITs -DskipLocalAiITs -DskipMilvusITs -DskipOllamaITs -DskipOracleITs -DskipVespaITs \ | |
| --fail-at-end -Dmaven.test.failure.ignore=true \ | |
| -Djunit.jupiter.extensions.autodetection.enabled=true \ | |
| -DembeddingsSkipCache \ | |
| -Dtinylog.writer.level=info | |
| env: | |
| LC4J_GLOBAL_TEST_RETRY_ENABLED: true | |
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AZURE_OPENAI_AUDIO_DEPLOYMENT_NAME: ${{ secrets.AZURE_OPENAI_AUDIO_DEPLOYMENT_NAME }} | |
| AZURE_OPENAI_AUDIO_ENDPOINT: ${{ secrets.AZURE_OPENAI_AUDIO_ENDPOINT }} | |
| AZURE_OPENAI_AUDIO_KEY: ${{ secrets.AZURE_OPENAI_AUDIO_KEY }} | |
| AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }} | |
| AZURE_OPENAI_KEY: ${{ secrets.AZURE_OPENAI_KEY }} | |
| AZURE_SEARCH_ENDPOINT: ${{ secrets.AZURE_SEARCH_ENDPOINT }} | |
| AZURE_SEARCH_KEY: ${{ secrets.AZURE_SEARCH_KEY }} | |
| COHERE_API_KEY: ${{ secrets.COHERE_API_KEY }} | |
| DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} | |
| ELASTICSEARCH_CLOUD_API_KEY: ${{ secrets.ELASTICSEARCH_CLOUD_API_KEY }} | |
| ELASTICSEARCH_CLOUD_URL: ${{ secrets.ELASTICSEARCH_CLOUD_URL }} | |
| GCP_CREDENTIALS_JSON: ${{ secrets.GCP_CREDENTIALS_JSON }} | |
| GCP_LOCATION: ${{ secrets.GCP_LOCATION }} | |
| GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }} | |
| GCP_PROJECT_NUM: ${{ secrets.GCP_PROJECT_NUM }} | |
| GCP_VERTEXAI_ENDPOINT: ${{ secrets.GCP_VERTEXAI_ENDPOINT }} | |
| GOOGLE_AI_GEMINI_API_KEY: ${{ secrets.GOOGLE_AI_GEMINI_API_KEY }} | |
| HF_API_KEY: ${{ secrets.HF_API_KEY }} | |
| JINA_API_KEY: ${{ secrets.JINA_API_KEY }} | |
| MILVUS_API_KEY: ${{ secrets.MILVUS_API_KEY }} | |
| MILVUS_URI: ${{ secrets.MILVUS_URI }} | |
| MISTRAL_AI_API_KEY: ${{ secrets.MISTRAL_AI_API_KEY }} | |
| NOMIC_API_KEY: ${{ secrets.NOMIC_API_KEY }} | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }} | |
| OVHAI_AI_API_KEY: ${{ secrets.OVHAI_AI_API_KEY }} | |
| PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }} | |
| RAPID_API_KEY: ${{ secrets.RAPID_API_KEY }} | |
| TAVILY_API_KEY: ${{ secrets.TAVILY_API_KEY }} | |
| VOYAGE_API_KEY: ${{ secrets.VOYAGE_API_KEY }} | |
| WEAVIATE_API_KEY: ${{ secrets.WEAVIATE_API_KEY }} | |
| WEAVIATE_HOST: ${{ secrets.WEAVIATE_HOST }} | |
| CI_DELAY_SECONDS_AZURE_AI_SEARCH: 4 | |
| CI_DELAY_SECONDS_AZURE_OPENAI: 3 | |
| CI_DELAY_SECONDS_BEDROCK: 3 | |
| CI_DELAY_SECONDS_GITHUB_MODELS: 7 | |
| CI_DELAY_SECONDS_GOOGLE_AI_GEMINI_BATCH: 15 | |
| CI_DELAY_SECONDS_VERTEX_AI_GEMINI: 12 | |
| CI_DELAY_SECONDS_VOYAGE_AI: 22 | |
| - name: Clean Docker | |
| run: docker system prune -af || true | |
| - name: Upload Test Reports | |
| if: always() # always run even if the previous step failed or was cancelled | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Test-Reports-${{ strategy.job-index }} | |
| path: '**/target/*-reports/*' | |
| - name: Publish Test Report | |
| if: always() # always run even if the previous step failed or was cancelled | |
| uses: mikepenz/action-junit-report@v5 | |
| with: | |
| report_paths: '**/target/*-reports/TEST-*.xml' | |
| annotate_only: true | |
| - name: Upload JaCoCo Reports | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: jacoco-${{ strategy.job-index }} | |
| path: '**/target/site/jacoco/**' |