Data Processing Pipeline #241
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |
| 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" | |
| notify-on-failure: | |
| runs-on: ubuntu-latest | |
| if: always() && contains(needs.*.result, 'failure') | |
| needs: [process-bridge-data, process-musd-data, process-market-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 | |
| 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 }} |