Files
foxhunt/.github/workflows/data-quality-validation.yml
jgrusewski e8a68ee39f Download 360 DBN files (36.3 MB) using Rust databento client
- Created data/examples/download_ml_training_data.rs using reqwest + Databento HTTP API
- Downloaded 90 days × 4 symbols (ES.FUT, NQ.FUT, ZN.FUT, 6E.FUT)
- Files saved to test_data/real/databento/ml_training/
- Total: 360 files, 15 MB compressed DBN format
- Used existing Rust pattern from download_nq_fut.rs
- API key loaded from .env file
- 100% success rate (360/360 files)
- Ready for ML training benchmarks

Next: Create simplified training benchmark for RTX 3050 Ti GPU measurements
2025-10-13 13:30:02 +02:00

166 lines
5.5 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: DBN Data Quality Validation
on:
push:
paths:
- 'test_data/**/*.dbn'
- 'scripts/validate_data_quality.sh'
- 'services/backtesting_service/src/bin/validate_dbn_data.rs'
pull_request:
paths:
- 'test_data/**/*.dbn'
- 'scripts/validate_data_quality.sh'
- 'services/backtesting_service/src/bin/validate_dbn_data.rs'
schedule:
# Run daily at 2 AM UTC to catch any data degradation
- cron: '0 2 * * *'
workflow_dispatch:
inputs:
min_quality:
description: 'Minimum quality score (0-100)'
required: false
default: '70'
symbol:
description: 'Specific symbol to validate (leave empty for all)'
required: false
default: ''
jobs:
validate-data-quality:
name: Validate DBN Data Quality
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
components: rustfmt, clippy
- name: Cache Cargo dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-validation-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-validation-
${{ runner.os }}-cargo-
- name: Check for DBN files
id: check_files
run: |
if [ -d "test_data/real/databento" ]; then
COUNT=$(find test_data/real/databento -name "*.dbn" | wc -l)
echo "count=$COUNT" >> $GITHUB_OUTPUT
echo "Found $COUNT DBN files"
else
echo "count=0" >> $GITHUB_OUTPUT
echo "No test_data directory found"
fi
- name: Build validation tool
if: steps.check_files.outputs.count > 0
run: |
cargo build --release --bin validate_dbn_data
- name: Run data quality validation
if: steps.check_files.outputs.count > 0
env:
MIN_QUALITY: ${{ github.event.inputs.min_quality || '70' }}
SYMBOL: ${{ github.event.inputs.symbol || '' }}
run: |
mkdir -p validation_reports
# Build validation command
if [ -z "$SYMBOL" ]; then
# Validate all symbols
./scripts/validate_data_quality.sh \
--min-quality "$MIN_QUALITY" \
--output validation_reports \
--all
else
# Validate specific symbol
./scripts/validate_data_quality.sh \
--min-quality "$MIN_QUALITY" \
--output validation_reports \
--symbol "$SYMBOL"
fi
- name: Upload validation reports
if: always() && steps.check_files.outputs.count > 0
uses: actions/upload-artifact@v4
with:
name: validation-reports
path: validation_reports/
retention-days: 30
- name: Comment PR with validation results
if: github.event_name == 'pull_request' && steps.check_files.outputs.count > 0
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const fs = require('fs');
const reportPath = 'validation_reports/latest.txt';
if (fs.existsSync(reportPath)) {
const report = fs.readFileSync(reportPath, 'utf8');
const summary = report.split('\n').slice(0, 30).join('\n');
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## 📊 DBN Data Quality Validation\n\n\`\`\`\n${summary}\n\`\`\`\n\n<details>\n<summary>View full report</summary>\n\n\`\`\`\n${report}\n\`\`\`\n\n</details>`
});
}
- name: Fail if validation failed
if: failure() && steps.check_files.outputs.count > 0
run: |
echo "❌ Data quality validation failed!"
echo "See validation reports artifact for details"
exit 1
summary:
name: Validation Summary
runs-on: ubuntu-latest
needs: validate-data-quality
if: always()
steps:
- name: Download validation reports
uses: actions/download-artifact@v4
with:
name: validation-reports
path: validation_reports/
continue-on-error: true
- name: Create job summary
run: |
echo "# DBN Data Quality Validation Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ -f "validation_reports/latest.json" ]; then
# Parse JSON report for summary
echo "✅ Validation completed successfully" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Download the full validation report from the artifacts." >> $GITHUB_STEP_SUMMARY
else
echo " No validation report generated (no DBN files or validation skipped)" >> $GITHUB_STEP_SUMMARY
fi
if [ "${{ needs.validate-data-quality.result }}" == "failure" ]; then
echo "" >> $GITHUB_STEP_SUMMARY
echo "❌ **Validation failed - quality score below threshold**" >> $GITHUB_STEP_SUMMARY
fi