name: jpa-next # Advisory compatibility probes for future JPA/Hibernate/PostgreSQL majors. These targets are not # resolved by the current build, so the artifact records NOT_EXECUTABLE rather than implying that a # green policy test is compatibility evidence. on: workflow_dispatch: schedule: - cron: '0 5 * * 1' permissions: contents: read jobs: compatibility: strategy: fail-fast: false matrix: include: - id: jakarta-persistence-4 target: Jakarta Persistence 4 coordinate: jakarta.persistence:jakarta.persistence-api:4.x test: "*CompatibilityLaneDefinitionTest" reason: the JPA 4 API is not on any configuration this build resolves, so nothing has been compiled against it - id: hibernate-8 target: Hibernate 8 coordinate: org.hibernate.orm:hibernate-core:8.x test: "*HibernateCompatibilityPolicyTest" reason: Hibernate 8 is not resolvable from this build, so nothing has been compiled or run against it - id: postgresql-19 target: PostgreSQL 19 coordinate: postgres:19-alpine test: "*ExperimentalPromotionGateTest" reason: no PostgreSQL 19 image is published yet, so no container of that major has ever been started by this lane runs-on: ubuntu-latest timeout-minutes: 60 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # actions/checkout@v4.2.2 - uses: ./.github/actions/setup-gradle-java - name: Run the current-runtime policy probe id: compatibility-probe working-directory: src run: >- ./gradlew :adapter:outbound:persistence-jpa:test --tests '${{ matrix.test }}' --stacktrace - name: Record what this lane did and did not execute if: always() env: PROBE_OUTCOME: ${{ steps.compatibility-probe.outcome }} TARGET: ${{ matrix.target }} TARGET_COORDINATE: ${{ matrix.coordinate }} REASON: ${{ matrix.reason }} run: | mkdir -p compatibility-evidence { echo "target=${TARGET}" echo "target-coordinate=${TARGET_COORDINATE}" echo "status=NOT_EXECUTABLE" echo "probe-result=${PROBE_OUTCOME}" echo "reason=${REASON}" echo "what-ran=the current runtime's own policy and lane-definition tests" echo "sha=${{ github.sha }}" } > compatibility-evidence/status.properties echo "::notice::${TARGET} compatibility is NOT_EXECUTABLE: ${REASON}" - name: Upload the compatibility status if: always() uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # actions/upload-artifact@v4.6.2 with: name: compatibility-status-${{ matrix.id }} path: compatibility-evidence/status.properties retention-days: 30 if-no-files-found: error