Tools / .github /workflows /process_csv.yml
jebin2's picture
chore: Enable verbose output for the video generation script in the CI workflow.
6d0371e
name: Process CSV and Track Progress
on:
workflow_dispatch:
inputs:
# Run Config
JOB_INDEX:
description: 'Job Index (0-based)'
required: true
default: '0'
TOTAL_JOBS:
description: 'Total Jobs'
required: true
default: '1'
SETUP_TYPE:
description: 'Setup Type'
required: true
# Content & Style
CAPTION_STYLE:
description: 'Caption Style'
required: false
IS_A2E_LIP_SYNC:
description: 'Is A2E Lip Sync'
required: false
USE_VEO:
description: 'Use Veo'
required: false
IS_ONSCREEN_CTA:
description: 'Is Onscreen CTA'
required: false
VIDEO_GENERATION_TYPE:
description: 'Video Generation Type (runway, grok, gemini, fal)'
required: false
GENERATION_COUNT:
description: 'Generation Count'
required: false
USE_1X1_RATIO:
description: 'Use 1x1 Ratio'
required: false
ON_SCREEN_TEXT:
description: 'On Screen Text'
required: false
AI_GENERATION:
description: 'AI Generation (True/False)'
required: false
VIDEO_MERGE_TYPE:
description: 'Video Merge Type'
required: false
PRODUCT_NAME:
description: 'Product Name'
required: false
PRODUCT_INFO:
description: 'Product Info'
required: false
PRODUCT_VIDEO_LIBRARY_GSHEET_WORKSHEET:
description: 'Product Video Library Worksheet'
required: false
# Google Sheets & Drive
GSHEET_ID:
description: 'Google Sheet ID'
required: true
GSHEET_WORKSHEET_TEXT_OVERLAY:
description: 'Text Overlay Worksheet'
required: false
GSHEET_WORKSHEET_TEXT_OVERLAY_COLUMN:
description: 'Text Overlay Column'
required: false
VIDEO_LIBRARY_GSHEET_WORKSHEET:
description: 'Video Library Worksheet'
required: true
AUDIO_LIBRARY_GSHEET_WORKSHEET:
description: 'Audio Library Worksheet'
required: true
DRIVE_UPLOAD_FOLDER_ID:
description: 'Drive Upload Folder ID (Shared Drive)'
required: false
CONTENT_STRATEGY_GSHEET_WORKSHEET:
description: 'Content Strategy Worksheet'
required: false
# Secrets Overrides
GCS_BUCKET_NAME:
description: 'GCS Bucket Name'
required: false
GCS_BUCKET_FOLDER_NAME:
description: 'GCS Bucket Folder Name'
required: false
push:
tags:
- 'run_wip*'
# schedule:
# - cron: '0 */6 * * *' # Runs every 6 hours
jobs:
run-processor:
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write # Required for Workload Identity Federation
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
ref: feature/video-revamp # Lock to specific branch
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: pip
- name: Setup FFmpeg
uses: FedericoCarboni/setup-ffmpeg@v3
with:
ffmpeg-version: release
- name: Cache apt packages
uses: awalsh128/cache-apt-pkgs-action@v1.4.3
with:
packages: ffmpeg libsndfile1 libgl1
version: 1.0
- name: Install Python Dependencies
run: |
python -m pip install --upgrade pip wheel setuptools
pip install --prefer-binary -r requirements.txt
- name: Authenticate to Google Cloud - Final Data
id: auth_final_data
uses: google-github-actions/auth@v2
with:
workload_identity_provider: 'projects/562552765087/locations/global/workloadIdentityPools/elvoro/providers/elvorogithub'
service_account: 'elvoro@elvoro-final-videos.iam.gserviceaccount.com'
audience: 'sts.googleapis.com'
create_credentials_file: true
- name: Save Final Data credentials
run: |
cp "${{ steps.auth_final_data.outputs.credentials_file_path }}" ./final-data-key.json
echo "GCLOUD_FINAL_DATA_CREDENTIALS=./final-data-key.json" >> $GITHUB_ENV
echo "GCP_PROJECT_FINAL=elvoro-final-videos" >> $GITHUB_ENV
- name: Authenticate to Google Cloud - Test Data
id: auth_test_data
uses: google-github-actions/auth@v2
with:
workload_identity_provider: 'projects/181713295829/locations/global/workloadIdentityPools/test-elvoro-data/providers/github'
service_account: 'clientdata@elvoro-483807.iam.gserviceaccount.com'
audience: 'sts.googleapis.com'
create_credentials_file: true
- name: Save Test Data credentials
run: |
cp "${{ steps.auth_test_data.outputs.credentials_file_path }}" ./test-data-key.json
echo "GCLOUD_TEST_DATA_CREDENTIALS=./test-data-key.json" >> $GITHUB_ENV
echo "GCP_PROJECT_TEST=elvoro-483807" >> $GITHUB_ENV
- name: Configure Git for commits
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Run processor
env:
# Run Config
JOB_INDEX: ${{ github.event.inputs.JOB_INDEX || vars.JOB_INDEX || 0 }}
TOTAL_JOBS: ${{ github.event.inputs.TOTAL_JOBS || vars.TOTAL_JOBS || 1 }}
SETUP_TYPE: ${{ github.event.inputs.SETUP_TYPE || vars.SETUP_TYPE }}
# Content & Style
CAPTION_STYLE: ${{ github.event.inputs.CAPTION_STYLE || vars.CAPTION_STYLE }}
CONTENT_STRATEGY_FILE: ${{ vars.CONTENT_STRATEGY_FILE }}
IS_A2E_LIP_SYNC: ${{ github.event.inputs.IS_A2E_LIP_SYNC || vars.IS_A2E_LIP_SYNC }}
USE_VEO: ${{ github.event.inputs.USE_VEO || vars.USE_VEO }}
IS_ONSCREEN_CTA: ${{ github.event.inputs.IS_ONSCREEN_CTA || vars.IS_ONSCREEN_CTA }}
DELETE_ALL_A2E_VIDEOS: ${{ vars.DELETE_ALL_A2E_VIDEOS }}
VIDEO_GENERATION_TYPE: ${{ github.event.inputs.VIDEO_GENERATION_TYPE || vars.VIDEO_GENERATION_TYPE }}
GENERATION_COUNT: ${{ github.event.inputs.GENERATION_COUNT || vars.GENERATION_COUNT }}
USE_1X1_RATIO: ${{ github.event.inputs.USE_1X1_RATIO || vars.USE_1X1_RATIO }}
ON_SCREEN_TEXT: ${{ github.event.inputs.ON_SCREEN_TEXT || vars.ON_SCREEN_TEXT }}
AI_GENERATION: ${{ github.event.inputs.AI_GENERATION || vars.AI_GENERATION }}
VIDEO_MERGE_TYPE: ${{ github.event.inputs.VIDEO_MERGE_TYPE || vars.VIDEO_MERGE_TYPE }}
# Google Sheets & Drive
GSHEET_ID: ${{ github.event.inputs.GSHEET_ID || vars.GSHEET_ID }}
GSHEET_WORKSHEET_TEXT_OVERLAY: ${{ github.event.inputs.GSHEET_WORKSHEET_TEXT_OVERLAY || vars.GSHEET_WORKSHEET_TEXT_OVERLAY }}
GSHEET_WORKSHEET_TEXT_OVERLAY_COLUMN: ${{ github.event.inputs.GSHEET_WORKSHEET_TEXT_OVERLAY_COLUMN || vars.GSHEET_WORKSHEET_TEXT_OVERLAY_COLUMN }}
VIDEO_LIBRARY_GSHEET_WORKSHEET: ${{ github.event.inputs.VIDEO_LIBRARY_GSHEET_WORKSHEET || vars.VIDEO_LIBRARY_GSHEET_WORKSHEET }}
AUDIO_LIBRARY_GSHEET_WORKSHEET: ${{ github.event.inputs.AUDIO_LIBRARY_GSHEET_WORKSHEET || vars.AUDIO_LIBRARY_GSHEET_WORKSHEET }}
DRIVE_UPLOAD_FOLDER_ID: ${{ github.event.inputs.DRIVE_UPLOAD_FOLDER_ID || vars.DRIVE_UPLOAD_FOLDER_ID }}
CONTENT_STRATEGY_GSHEET_WORKSHEET: ${{ github.event.inputs.CONTENT_STRATEGY_GSHEET_WORKSHEET || vars.CONTENT_STRATEGY_GSHEET_WORKSHEET }}
GCS_BUCKET_FOLDER_NAME: ${{ github.event.inputs.GCS_BUCKET_FOLDER_NAME || vars.GCS_BUCKET_FOLDER_NAME }}
PRODUCT_NAME: ${{ github.event.inputs.PRODUCT_NAME || vars.PRODUCT_NAME }}
PRODUCT_INFO: ${{ github.event.inputs.PRODUCT_INFO || vars.PRODUCT_INFO }}
PRODUCT_VIDEO_LIBRARY_GSHEET_WORKSHEET: ${{ github.event.inputs.PRODUCT_VIDEO_LIBRARY_GSHEET_WORKSHEET || vars.PRODUCT_VIDEO_LIBRARY_GSHEET_WORKSHEET }}
# Secrets Overrides
RUNWAY_2ND_API_KEY: ${{ secrets.RUNWAY_2ND_API_KEY }}
RUNWAY_3RD_API_KEY: ${{ secrets.RUNWAY_3RD_API_KEY }}
RUNWAY_4TH_API_KEY: ${{ secrets.RUNWAY_4TH_API_KEY }}
GCS_BUCKET_NAME: ${{ github.event.inputs.GCS_BUCKET_NAME || secrets.GCS_BUCKET_NAME }}
SPARK_KEY: ${{ secrets.SPARK_KEY }}
A2E_API_KEY: ${{ secrets.A2E_API_KEY }}
# Secrets (No Override in Inputs)
GOOGLE_AISTUDIO_IMAGEN_API_KEY: ${{ secrets.GOOGLE_AISTUDIO_IMAGEN_API_KEY }}
GOOGLE_AISTUDIO_2ND_API_KEY: ${{ secrets.GOOGLE_AISTUDIO_2ND_API_KEY }}
GOOGLE_AISTUDIO_3RD_API_KEY: ${{ secrets.GOOGLE_AISTUDIO_3RD_API_KEY }}
GOOGLE_AI_API_KEY: ${{ secrets.GOOGLE_AI_API_KEY }}
GOOGLE_AI_API_KEY_1: ${{ secrets.GOOGLE_AI_API_KEY_1 }}
GOOGLE_AI_API_KEY_2: ${{ secrets.GOOGLE_AI_API_KEY_2 }}
RUNWAYML_API_KEY: ${{ secrets.RUNWAY_API_KEY }}
XAI_GROK_API_KEY: ${{ secrets.XAI_GROK_API_KEY }}
ONEUP_API_KEY: ${{ secrets.ONEUP_API_KEY }}
run: |
echo "🚀 Starting Video Generation..."
python src/main.py --verbose