Nightly Build JDK 21 #161
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 21 | |
| on: | |
| schedule: | |
| - cron: '0 1 * * *' # daily at 01: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 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 21 | |
| 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 21 | |
| 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/**' |