Skip to content

Release 0.22.0

Release 0.22.0 #1490

name: Build (on pull request)
on:
pull_request:
paths-ignore:
- '.gitignore'
- 'CODEOWNERS'
- 'LICENSE'
- '*.md'
- '*.adoc'
- '*.txt'
- '.all-contributorsrc'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
# Quick build (no test, Java 17)
# Artifacts will be reused in the other jobs
quick-build:
name: Quick Build
runs-on: ubuntu-latest
outputs:
all_modules: ${{ steps.matrices.outputs.all_modules }}
it_modules: ${{ steps.matrices.outputs.it_modules }}
in_process_embedding_modules: ${{ steps.matrices.outputs.in_process_embedding_modules }}
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: 'maven'
- name: Build with Maven
run: ./mvnw -B clean install -DskipTests -Dno-format -ntp
- name: Zip the Maven repo
run: |
tar -czf ${{ runner.temp }}/maven-repo.tgz -C ~ .m2/repository
# Avoid caching our own artifacts
rm -Rf ~/.m2/repository/io/quarkiverse/langchain4j
- name: Persist the Maven repo
uses: actions/upload-artifact@v4
with:
name: maven-repo
path: ${{ runner.temp }}/maven-repo.tgz
retention-days: 5
- name: Compute matrices
id: matrices
run: |
# Compute the JVM tests
ALL_MODULES=$(find . -mindepth 2 -maxdepth 2 -type f -name 'pom.xml' -exec dirname {} \; \
| sed 's|^\./||' \
| sort -u \
| jq -R -s -c 'split("\n")[:-1]')
# Integration tests (without the in-process embedding models)
# Remove JLama and Llama3 from the list
cd integration-tests
IT_MODULES=$( \
find . -mindepth 2 -maxdepth 2 -type f -name 'pom.xml' -exec dirname {} \; \
| sed 's|^\./||' \
| sort -u \
| grep -v jlama \
| grep -v llama3-java \
| grep -v in-process-embedding-models \
| jq -R -s -c 'split("\n")[:-1]')
# We extract in process embedding models as there are many modules and we want parallelism
cd in-process-embedding-models
IN_PROCESS_EMBEDDING_MODULES=$( \
find . -mindepth 2 -maxdepth 2 -type f -name 'pom.xml' -exec dirname {} \; \
| sed 's|^\./||' \
| sort -u \
| jq -R -s -c 'split("\n")[:-1]')
echo "all_modules=${ALL_MODULES}" >> $GITHUB_OUTPUT
echo "it_modules=${IT_MODULES}" >> $GITHUB_OUTPUT
echo "in_process_embedding_modules=${IN_PROCESS_EMBEDDING_MODULES}" >> $GITHUB_OUTPUT
# Publish build reports
- name: Prepare build reports archive
if: always()
run: |
7z a -tzip build-reports.zip -r \
'target/build-report.json' \
LICENSE
- name: Upload build reports
uses: actions/upload-artifact@v4
if: always()
with:
name: "build-reports-${{ github.run_attempt }}-Quick Build"
path: |
build-reports.zip
retention-days: 7
jvm-tests:
needs: quick-build
strategy:
fail-fast: false
matrix:
java: [ 17, 21, 23 ]
module: ${{fromJson(needs.quick-build.outputs.all_modules)}}
name: JVM tests - ${{ matrix.module }} - Java ${{ matrix.java }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ matrix.java }}
- name: Download the Maven repo
uses: actions/download-artifact@v4
with:
name: maven-repo
path: ..
- name: Unzip the Maven Repo
shell: bash
run: |
tar -xzf ../maven-repo.tgz -C ~
# Build Jlama if JDK >= 21
# It's not build by default as it requires Java 21+
- name: Build JLama extension
if: ${{ matrix.java >= 21 }}
run: |
./mvnw -B clean install -DskipTests -Dno-format -ntp -f model-providers/jlama/pom.xml
# Build Llama3.java if JDK >= 22. See https://x.com/tjake/status/1849141171475399083?t=EpgVJCPLC17fCXio0FvnhA&s=19 for the reason
- name: Build Llama3-java extension
if: ${{ matrix.java >= 22 }}
run: |
./mvnw -B clean install -DskipTests -Dno-format -ntp -f model-providers/llama3-java/pom.xml
- name: Run tests of ${{ matrix.module }} with JDK ${{ matrix.java }}
run: |
cd ${{ matrix.module }} && ../mvnw -B verify -Dci=true -Dno-format -ntp
# Publish build reports
- name: Prepare build reports archive
if: always()
run: |
7z a -tzip build-reports.zip -r \
'**/target/*-reports/TEST-*.xml' \
'target/build-report.json' \
LICENSE
- name: Upload build reports
uses: actions/upload-artifact@v4
if: always()
with:
name: "build-reports-${{ github.run_attempt }}-JVM tests - ${{ matrix.module }} - Java ${{ matrix.java }}"
path: |
build-reports.zip
retention-days: 7
native-tests:
needs: quick-build
name: Native tests - ${{matrix.module}}
strategy:
fail-fast: false
matrix:
module: ${{fromJson(needs.quick-build.outputs.it_modules)}}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Download the Maven repo
uses: actions/download-artifact@v4
with:
name: maven-repo
path: ..
- name: Unzip the Maven Repo
shell: bash
run: |
tar -xzf ../maven-repo.tgz -C ~
- name: Run integration tests ${{matrix.module}}
run: |
cd integration-tests/${{matrix.module}} && ../../mvnw -B verify -Dnative -Dci=true -Dquarkus.native.container-build -Dnative.surefire.skip -Dno-format -ntp
# Publish build reports
- name: Prepare build reports archive
if: always()
run: |
7z a -tzip build-reports.zip -r \
'**/target/*-reports/TEST-*.xml' \
'target/build-report.json' \
LICENSE
- name: Upload build reports
uses: actions/upload-artifact@v4
if: always()
with:
name: "build-reports-${{ github.run_attempt }}-Native tests - ${{matrix.module}}"
path: |
build-reports.zip
retention-days: 7
in-process-embedding-model-tests:
needs: quick-build
name: In process embedding model tests - ${{matrix.module}}
strategy:
fail-fast: false
matrix:
module: ${{fromJson(needs.quick-build.outputs.in_process_embedding_modules)}}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Download the Maven repo
uses: actions/download-artifact@v4
with:
name: maven-repo
path: ..
- name: Unzip the Maven Repo
shell: bash
run: |
tar -xzf ../maven-repo.tgz -C ~
- name: Run integration tests ${{matrix.module}}
run: |
cd integration-tests/in-process-embedding-models/${{matrix.module}}
../../../mvnw -B verify -Dnative -Dquarkus.native.container-build -Dci=true -Dnative.surefire.skip -Dno-format -ntp
# Publish build reports
- name: Prepare build reports archive
if: always()
run: |
7z a -tzip build-reports.zip -r \
'**/target/*-reports/TEST-*.xml' \
'target/build-report.json' \
LICENSE
- name: Upload build reports
uses: actions/upload-artifact@v4
if: always()
with:
name: "build-reports-${{ github.run_attempt }}-In process embedding model tests - ${{matrix.module}}"
path: |
build-reports.zip
retention-days: 7
build-report:
runs-on: ubuntu-latest
name: Build report
needs: [quick-build, jvm-tests, native-tests, in-process-embedding-model-tests]
if: always()
steps:
- uses: actions/download-artifact@v4
with:
path: build-reports-artifacts
pattern: "build-reports-${{ github.run_attempt }}-"
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
- name: Produce report and add it as job summary
uses: quarkusio/action-build-reporter@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
build-reports-artifacts-path: build-reports-artifacts