Skip to content

Data Processing Pipeline #290

Data Processing Pipeline

Data Processing Pipeline #290

name: Data Processing Pipeline
on:
schedule:
# Run every 6 hours (at 00:00, 06:00, 12:00, 18:00 UTC)
- cron: '0 */6 * * *'
workflow_dispatch:
inputs:
run_bridge_data:
description: 'Run bridge data processing'
required: false
default: 'true'
type: boolean
run_musd_data:
description: 'Run MUSD data processing'
required: false
default: 'true'
type: boolean
run_market_data:
description: 'Run market data processing'
required: false
default: 'true'
type: boolean
run_swaps_data:
description: 'Run swaps data processing'
required: false
default: 'true'
type: boolean
run_pools_data:
description: 'Run pools data processing'
required: false
default: 'true'
type: boolean
env:
PYTHON_VERSION: 3.13
jobs:
process-bridge-data:
runs-on: ubuntu-latest
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.run_bridge_data == 'true')
steps:
- name: πŸ”„ Checkout repository
uses: actions/checkout@v4
- name: 🐍 Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
- name: πŸ“¦ Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: πŸŒ‰ Process Bridge Data
env:
SUPABASE_URL_PROD: ${{ secrets.SUPABASE_URL_PROD }}
SUPABASE_KEY_PROD: ${{ secrets.SUPABASE_KEY_PROD }}
SUPABASE_DATA_URL: ${{ secrets.SUPABASE_DATA_URL }}
SUPABASE_DATA_KEY: ${{ secrets.SUPABASE_DATA_KEY }}
COINGECKO_KEY: ${{ secrets.COINGECKO_KEY }}
GOOGLE_CLOUD_KEY: ${{ secrets.GOOGLE_CLOUD_KEY }}
run: |
echo "πŸš€ Starting bridge data processing..."
python scripts/process_bridge_data.py
echo "βœ… Bridge data processing completed"
process-musd-data:
runs-on: ubuntu-latest
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.run_musd_data == 'true')
steps:
- name: πŸ”„ Checkout repository
uses: actions/checkout@v4
- name: 🐍 Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
- name: πŸ“¦ Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: πŸ’° Process MUSD Data
env:
SUPABASE_URL_PROD: ${{ secrets.SUPABASE_URL_PROD }}
SUPABASE_KEY_PROD: ${{ secrets.SUPABASE_KEY_PROD }}
SUPABASE_DATA_URL: ${{ secrets.SUPABASE_DATA_URL }}
SUPABASE_DATA_KEY: ${{ secrets.SUPABASE_DATA_KEY }}
COINGECKO_KEY: ${{ secrets.COINGECKO_KEY }}
GOOGLE_CLOUD_KEY: ${{ secrets.GOOGLE_CLOUD_KEY }}
run: |
echo "πŸš€ Starting MUSD data processing..."
python scripts/process_musd_data.py
echo "βœ… MUSD data processing completed"
process-market-data:
runs-on: ubuntu-latest
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.run_market_data == 'true')
steps:
- name: πŸ”„ Checkout repository
uses: actions/checkout@v4
- name: 🐍 Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
- name: πŸ“¦ Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: πŸ›’ Process Market Data
env:
SUPABASE_URL_PROD: ${{ secrets.SUPABASE_URL_PROD }}
SUPABASE_KEY_PROD: ${{ secrets.SUPABASE_KEY_PROD }}
SUPABASE_DATA_URL: ${{ secrets.SUPABASE_DATA_URL }}
SUPABASE_DATA_KEY: ${{ secrets.SUPABASE_DATA_KEY }}
COINGECKO_KEY: ${{ secrets.COINGECKO_KEY }}
GOOGLE_CLOUD_KEY: ${{ secrets.GOOGLE_CLOUD_KEY }}
run: |
echo "πŸš€ Starting market data processing..."
python scripts/process_market_data.py
echo "βœ… Market data processing completed"
process-swaps-data:
runs-on: ubuntu-latest
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.run_swaps_data == 'true')
steps:
- name: πŸ”„ Checkout repository
uses: actions/checkout@v4
- name: 🐍 Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
- name: πŸ“¦ Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: πŸ”„ Process Swaps Data
env:
SUPABASE_URL_PROD: ${{ secrets.SUPABASE_URL_PROD }}
SUPABASE_KEY_PROD: ${{ secrets.SUPABASE_KEY_PROD }}
SUPABASE_DATA_URL: ${{ secrets.SUPABASE_DATA_URL }}
SUPABASE_DATA_KEY: ${{ secrets.SUPABASE_DATA_KEY }}
COINGECKO_KEY: ${{ secrets.COINGECKO_KEY }}
GOOGLE_CLOUD_KEY: ${{ secrets.GOOGLE_CLOUD_KEY }}
run: |
echo "πŸš€ Starting swaps data processing..."
python scripts/process_swaps_data.py
echo "βœ… Swaps data processing completed"
process-pools-data:
runs-on: ubuntu-latest
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.event.inputs.run_pools_data == 'true')
steps:
- name: πŸ”„ Checkout repository
uses: actions/checkout@v4
- name: 🐍 Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
- name: πŸ“¦ Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: 🏊 Process Pools Data
env:
SUPABASE_URL_PROD: ${{ secrets.SUPABASE_URL_PROD }}
SUPABASE_KEY_PROD: ${{ secrets.SUPABASE_KEY_PROD }}
SUPABASE_DATA_URL: ${{ secrets.SUPABASE_DATA_URL }}
SUPABASE_DATA_KEY: ${{ secrets.SUPABASE_DATA_KEY }}
COINGECKO_KEY: ${{ secrets.COINGECKO_KEY }}
GOOGLE_CLOUD_KEY: ${{ secrets.GOOGLE_CLOUD_KEY }}
run: |
echo "πŸš€ Starting pools data processing..."
python scripts/process_pools_data.py
echo "βœ… Pools data processing completed"
notify-on-failure:
runs-on: ubuntu-latest
if: always() && contains(needs.*.result, 'failure')
needs: [process-bridge-data, process-musd-data, process-market-data, process-swaps-data, process-pools-data]
steps:
- name: πŸ“± Discord notification on failure
run: |
# Determine which jobs failed
FAILED_JOBS=""
if [[ "${{ needs.process-bridge-data.result }}" == "failure" ]]; then
FAILED_JOBS="${FAILED_JOBS}β€’ Bridge Data Processing\n"
fi
if [[ "${{ needs.process-musd-data.result }}" == "failure" ]]; then
FAILED_JOBS="${FAILED_JOBS}β€’ MUSD Data Processing\n"
fi
if [[ "${{ needs.process-market-data.result }}" == "failure" ]]; then
FAILED_JOBS="${FAILED_JOBS}β€’ Market Data Processing\n"
fi
if [[ "${{ needs.process-swaps-data.result }}" == "failure" ]]; then
FAILED_JOBS="${FAILED_JOBS}β€’ Swaps Data Processing\n"
fi
if [[ "${{ needs.process-pools-data.result }}" == "failure" ]]; then
FAILED_JOBS="${FAILED_JOBS}β€’ Pools Data Processing\n"
fi
curl -X POST -H "Content-Type: application/json" \
-d '{
"embeds": [{
"title": "🚨 Data Processing Pipeline Failed",
"description": "One or more jobs failed in `${{ github.repository }}`",
"color": 15158332,
"fields": [
{
"name": "Failed Jobs",
"value": "'"${FAILED_JOBS}"'",
"inline": false
},
{
"name": "Workflow",
"value": "${{ github.workflow }}",
"inline": true
},
{
"name": "Branch",
"value": "${{ github.ref_name }}",
"inline": true
},
{
"name": "Triggered by",
"value": "${{ github.event_name }}",
"inline": true
},
{
"name": "View Logs",
"value": "[Run #${{ github.run_id }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})",
"inline": false
}
],
"timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"
}]
}' \
${{ secrets.DISCORD_WEBHOOK }}