Files
Radixor/.github/workflows/build.yml
Leo Galambos e7800b29c9 feat!: modularize stemmer models and release infrastructure
Move bundled stemmer dictionaries from the core artifact into independently
versioned model modules. Add model discovery and explicit model-loading APIs,
a standard model aggregate, a model BOM, and dedicated model and catalog
release workflows.

Add full PoliMorf integration, model provenance and licensing validation,
streaming model-input verification, strict dependency verification, consumer
resolution tests, Configuration Cache compatibility, and expanded JMH,
quality, documentation, and release checks.

Upgrade the CycloneDX and JMH Gradle plugins and remove Gradle 10 and Java
compiler deprecations.

BREAKING CHANGE: The core Radixor artifact no longer contains bundled stemmer
dictionaries. Applications must add the required model artifacts, the standard
model aggregate, or model dependencies managed through the Radixor model BOM.
2026-07-22 23:33:28 +02:00

194 lines
5.5 KiB
YAML

name: Build and Release
on:
push:
branches:
- main
- develop
tags:
- 'release@*'
pull_request:
branches:
- main
- develop
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
quality-gates:
name: Quality gates
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@v4
- name: Set up Temurin JDK 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
- name: Set up Gradle caching and instrumentation
uses: gradle/actions/setup-gradle@v4
- name: Verify reproducibility inputs
shell: bash
run: |
set -euo pipefail
test -f gradle.lockfile
test -f gradle.properties
test -f gradle/verification-metadata.xml
- name: Execute build, tests, PMD, coverage, Javadoc, distribution packaging, and SBOM generation
run: ./gradlew --no-daemon clean ciRelease distZip pmdMain javadoc jacocoCiReleaseReport :cyclonedxDirectBom
- name: Upload SBOM
if: always()
uses: actions/upload-artifact@v4
with:
name: sbom
path: |
build/reports/sbom/radixor-sbom.json
build/reports/sbom/radixor-sbom.xml
if-no-files-found: error
retention-days: 14
- name: Upload test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: test-reports
path: |
build/reports/tests
build/test-results
if-no-files-found: warn
retention-days: 14
- name: Upload PMD reports
if: always()
uses: actions/upload-artifact@v4
with:
name: pmd-reports
path: build/reports/pmd
if-no-files-found: warn
retention-days: 14
- name: Upload coverage reports
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-reports
path: |
build/reports/jacoco/jacocoCiReleaseReport/html
build/reports/jacoco/jacocoCiReleaseReport/jacocoCiReleaseReport.xml
if-no-files-found: warn
retention-days: 14
- name: Upload Javadoc
if: always()
uses: actions/upload-artifact@v4
with:
name: javadoc
path: build/docs/javadoc
if-no-files-found: warn
retention-days: 14
- name: Upload benchmark reports
if: always()
uses: actions/upload-artifact@v4
with:
name: benchmark-reports
path: build/reports/jmh
if-no-files-found: ignore
retention-days: 14
- name: Upload distribution archives
if: success()
uses: actions/upload-artifact@v4
with:
name: distributions
path: build/distributions/*.zip
if-no-files-found: error
retention-days: 14
release:
name: Publish tagged distribution
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/release@')
runs-on: ubuntu-latest
needs: quality-gates
permissions:
contents: write
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@v4
- name: Set up Temurin JDK 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
- name: Set up Gradle caching and instrumentation
uses: gradle/actions/setup-gradle@v4
- name: Verify reproducibility inputs
shell: bash
run: |
set -euo pipefail
test -f gradle.lockfile
test -f gradle.properties
test -f gradle/verification-metadata.xml
- name: Validate exact core release tag
run: ./tools/parse-model-release-tag.sh "${GITHUB_REF_NAME}" .
- name: Build release inputs, signed Maven bundle, and SBOM
env:
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
run: ./gradlew --no-daemon clean ciRelease distZip pmdMain javadoc jacocoCiReleaseReport :cyclonedxDirectBom centralBundle
- name: Generate release changelog
shell: bash
run: |
set -euo pipefail
chmod +x ./tools/generate-release-notes.sh
mkdir -p build/generated/release-notes
./tools/generate-release-notes.sh "${GITHUB_REF_NAME}" > build/generated/release-notes/CHANGELOG.md
- name: Package release distribution
run: ./gradlew --no-daemon distZip
- name: Publish bundle to Maven Central
shell: bash
env:
CENTRAL_BEARER_TOKEN: ${{ secrets.CENTRAL_BEARER_TOKEN }}
run: ./tools/publish-central-bundle.sh "$(ls build/central-bundle/*.zip)" "org.egothor:radixor:${GITHUB_REF_NAME#release@}"
- name: Publish GitHub release assets
uses: softprops/action-gh-release@v2
with:
body_path: build/generated/release-notes/CHANGELOG.md
files: |
build/distributions/*.zip
build/reports/sbom/radixor-sbom.json
build/reports/sbom/radixor-sbom.xml
build/central-bundle/*.zip