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