Skip to content

Raincloud conformance #3

Raincloud conformance

Raincloud conformance #3

name: Raincloud conformance
# Real-world cross-implementation conformance (issue #205): hydrates the Raincloud
# corpus (Vortex files written by the Python bindings + Parquet oracles) and runs
# RaincloudConformanceIntegrationTest against everything hydrated. Scheduled, not on
# the PR path: hydration depends on upstream dataset URLs that rot independently of
# our code, so a failure here is a finding to triage, not a broken build.
on:
schedule:
- cron: '0 5 * * 1' # Mondays 05:00 UTC
workflow_dispatch:
inputs:
max-mb:
description: 'Per-slug artifact size cap in MB (0 = uncapped)'
default: '200'
jobs:
conformance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Set up Azul Zulu JDK 25
uses: actions/setup-java@v5
with:
distribution: zulu
java-version: '25'
- name: Cache Maven repository
uses: actions/cache@v6
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- uses: actions/setup-python@v6
with:
python-version: '3.12'
# keyed on the matrix + pinned tag: a corpus change rebuilds, otherwise
# weekly runs reuse artifacts instead of re-fetching upstream sources
- name: Cache Raincloud corpus
uses: actions/cache@v6
with:
path: ~/.cache/raincloud
key: raincloud-corpus-${{ hashFiles('scripts/hydrate-raincloud-corpus.sh', 'integration/src/test/resources/raincloud/expected-status.csv') }}
- name: Hydrate corpus
run: scripts/hydrate-raincloud-corpus.sh --max-mb "${{ github.event.inputs.max-mb || '200' }}"
- name: Run conformance suite
run: ./mvnw verify -pl integration -am -Dit.test=RaincloudConformanceIntegrationTest
- name: Publish per-slug results to job summary
if: always()
run: |
{
echo '## Raincloud conformance'
echo '```'
grep -hE "Tests run|slug" integration/target/failsafe-reports/*.txt || true
echo '```'
} >> "$GITHUB_STEP_SUMMARY"