Skip to content

Nightly Build JDK 25 #4

Nightly Build JDK 25

Nightly Build JDK 25 #4

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/**'