Expose any node param via OSC + per-param opt-in + defaults in docs #1811
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: Build and Push Docker Image | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version tag for the Docker image' | |
| required: true | |
| type: string | |
| default: 'latest' | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| - runpod-serverless | |
| tags: | |
| - 'v*' | |
| # Permissions for the reusable workflow jobs | |
| permissions: | |
| contents: read | |
| packages: write | |
| pull-requests: write | |
| issues: write | |
| jobs: | |
| # Cloud image - faster, used for PR deploys | |
| build-cloud: | |
| uses: ./.github/workflows/docker-build-image.yml | |
| with: | |
| variant: cloud | |
| suffix: '-cloud' | |
| dockerfile: Dockerfile.cloud | |
| description: Daydream Scope (Cloud) | |
| secrets: inherit | |
| # Standard image - slower, not needed for PR deploys | |
| build-standard: | |
| uses: ./.github/workflows/docker-build-image.yml | |
| with: | |
| variant: standard | |
| suffix: '' | |
| dockerfile: Dockerfile | |
| description: Daydream Scope | |
| secrets: inherit | |
| # PR deploy - only waits for cloud build | |
| deploy-pr: | |
| needs: build-cloud | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| livepeer_fal_app_id: ${{ steps.deploy_livepeer.outputs.livepeer_fal_app_id }} | |
| livepeer_fal_ws_url: ${{ steps.deploy_livepeer.outputs.livepeer_fal_ws_url }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.12' | |
| - name: Install fal | |
| run: pip install fal | |
| - name: Deploy Livepeer runner to fal (PR environment) | |
| id: deploy_livepeer | |
| env: | |
| FAL_KEY: ${{ secrets.FAL_KEY }} | |
| run: | | |
| set -euo pipefail | |
| PR_NUMBER="${{ needs.build-cloud.outputs.pr_number }}" | |
| APP_NAME="scope-livepeer-pr-${PR_NUMBER}" | |
| echo "Deploying Livepeer runner for PR #${PR_NUMBER} to fal as ${APP_NAME}" | |
| fal deploy \ | |
| --app-name "$APP_NAME" \ | |
| --env preview \ | |
| --auth private \ | |
| src/scope/cloud/livepeer_fal_app.py 2>&1 | tee deploy_livepeer_output.txt | |
| LIVEPEER_FAL_APP_ID="daydream/${APP_NAME}--preview" | |
| LIVEPEER_FAL_WS_URL="wss://fal.run/${LIVEPEER_FAL_APP_ID}/ws" | |
| echo "livepeer_fal_app_id=${LIVEPEER_FAL_APP_ID}" >> $GITHUB_OUTPUT | |
| echo "livepeer_fal_ws_url=${LIVEPEER_FAL_WS_URL}" >> $GITHUB_OUTPUT | |
| echo "Deployed Livepeer runner to: ${LIVEPEER_FAL_APP_ID}" | |
| echo "Livepeer WebSocket URL: ${LIVEPEER_FAL_WS_URL}" | |
| - name: Comment on PR with deployment info | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const prNumber = ${{ github.event.pull_request.number }}; | |
| const livepeerFalAppId = '${{ steps.deploy_livepeer.outputs.livepeer_fal_app_id }}'; | |
| const livepeerFalWsUrl = '${{ steps.deploy_livepeer.outputs.livepeer_fal_ws_url }}'; | |
| const shortSha = '${{ needs.build-cloud.outputs.short_sha }}'; | |
| const body = `## 🚀 fal.ai Preview Deployment | |
| | | | | |
| |---|---| | |
| | **Commit** | \`${shortSha}\` | | |
| | **App ID** | \`${livepeerFalAppId}\` | | |
| | **WebSocket** | \`${livepeerFalWsUrl}\` | | |
| ### Testing on Cloud | |
| \`\`\` | |
| SCOPE_CLOUD_APP_ID="${livepeerFalAppId}/ws" uv run daydream-scope | |
| \`\`\` | |
| `; | |
| const { data: comments } = await github.rest.issues.listComments({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: prNumber | |
| }); | |
| const existingComment = comments.find(c => | |
| c.user.type === 'Bot' && | |
| c.body.includes('fal.ai Preview Deployment') | |
| ); | |
| if (existingComment) { | |
| await github.rest.issues.updateComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| comment_id: existingComment.id, | |
| body | |
| }); | |
| } else { | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: prNumber, | |
| body | |
| }); | |
| } | |