{"id":30821173,"url":"https://github.com/livekit/deploy-action","last_synced_at":"2025-09-06T10:47:41.911Z","repository":{"id":313103647,"uuid":"1019927227","full_name":"livekit/deploy-action","owner":"livekit","description":"GitHub plugin to control LiveKit Cloud Agents","archived":false,"fork":false,"pushed_at":"2025-09-04T20:05:32.000Z","size":77,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-04T20:31:35.784Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/livekit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-15T05:05:02.000Z","updated_at":"2025-09-04T20:05:35.000Z","dependencies_parsed_at":"2025-09-04T20:41:41.853Z","dependency_job_id":null,"html_url":"https://github.com/livekit/deploy-action","commit_stats":null,"previous_names":["livekit/cloud-agents-github-plugin","livekit/deploy-action"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/livekit/deploy-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livekit%2Fdeploy-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livekit%2Fdeploy-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livekit%2Fdeploy-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livekit%2Fdeploy-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/livekit","download_url":"https://codeload.github.com/livekit/deploy-action/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livekit%2Fdeploy-action/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273892840,"owners_count":25186561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-06T10:47:40.576Z","updated_at":"2025-09-06T10:47:41.884Z","avatar_url":"https://github.com/livekit.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LiveKit Cloud Agents GitHub Plugin\n\nA GitHub Action for creating, deploying, and getting the status of LiveKit Cloud Agents.\n\n## Usage\n\n### Manually Create a New Agent or Deploy a new version\n\nThe create or deploy operations in this workflow are triggered manually and requires a working directory input.\n**Automatic Deployment**: When creating a new agent, a deployment happens automatically. You do **not** need to manually call the deploy operation after creation.\n\n```yaml\nname: Create or Deploy LiveKit Cloud Agent Manually\non:\n  workflow_dispatch:\n    inputs:\n      working_directory:\n        description: 'Working directory for the agent'\n        required: true\n        type: string\n        default: '.'\n      operation:\n        description: 'Which operation to run'\n        required: true\n        type: choice\n        options:\n          - create\n          - deploy\n        default: 'create'\n\njobs:\n  create-agent:\n    runs-on: ubuntu-latest\n    environment: ${{ github.event.inputs.working_directory }}\n    if: github.event.inputs.operation == 'create'\n    concurrency:\n      group: ${{ github.workflow }}-${{ github.ref }}\n      cancel-in-progress: true\n    permissions:\n      contents: write\n      pull-requests: write\n      actions: read\n    \n    steps:\n      - uses: actions/checkout@v4\n      \n      - name: Create LiveKit Cloud Agent\n        id: livekit\n        uses: livekit/deploy-action@main\n        env:\n          LIVEKIT_URL: ${{ secrets.LIVEKIT_URL }}\n          LIVEKIT_API_KEY: ${{ secrets.LIVEKIT_API_KEY }}\n          LIVEKIT_API_SECRET: ${{ secrets.LIVEKIT_API_SECRET }}\n          SECRET_LIST: ${{ secrets.SECRET_LIST }}\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        with:\n          OPERATION: create\n          WORKING_DIRECTORY: ${{ github.event.inputs.working_directory }}\n      - name: Create Pull Request # create a pull request to add the newly created livekit.toml\n        uses: peter-evans/create-pull-request@v7\n        with:\n          add-paths: |\n            ${{ github.event.inputs.working_directory }}/livekit.toml\n          token: ${{ secrets.GITHUB_TOKEN }}\n          branch: cloud-agent-${{ github.run_id }}\n          title: \"Add LiveKit agent config\"\n          commit-message: \"Add LiveKit agent config\"\n          body: |\n            This PR adds the LiveKit agent configuration\n\n          base: main\n          delete-branch: true\n      - name: Checkout PR branch\n        uses: actions/checkout@v4\n        with:\n          ref: cloud-agent-${{ github.run_id }}\n      - name: Status Check # block until the agent is in the 'Running' state\n        uses: livekit/deploy-action@main\n        env:\n          LIVEKIT_URL: ${{ secrets.LIVEKIT_URL }}\n          LIVEKIT_API_KEY: ${{ secrets.LIVEKIT_API_KEY }}\n          LIVEKIT_API_SECRET: ${{ secrets.LIVEKIT_API_SECRET }}\n        with:\n          OPERATION: status-retry\n          WORKING_DIRECTORY: ${{ github.event.inputs.working_directory }}\n          TIMEOUT: 5m\n  deploy-agent:\n    runs-on: ubuntu-latest\n    environment: ${{ github.event.inputs.working_directory }}\n    if: github.event.inputs.operation == 'deploy'\n    concurrency:\n      group: ${{ github.workflow }}-${{ github.ref }}\n      cancel-in-progress: true\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Deploy LiveKit Cloud Agent\n        uses: livekit/deploy-action@main\n        env:\n          LIVEKIT_URL: ${{ secrets.LIVEKIT_URL }}\n          LIVEKIT_API_KEY: ${{ secrets.LIVEKIT_API_KEY }}\n          LIVEKIT_API_SECRET: ${{ secrets.LIVEKIT_API_SECRET }}\n          SECRET_LIST: ${{ secrets.SECRET_LIST }}\n        with:\n          OPERATION: deploy\n          WORKING_DIRECTORY: ${{ github.event.inputs.working_directory }}\n```\n\n### Deploy an Existing Agent on a file change\n\n```yaml\nname: Deploy test-agent on changes\non:\n  push:\n    branches:\n      - main\n    paths:\n      - 'test-agent/**'\n      - '!test-agent/livekit.toml'\n      - '!test-agent/README.md'\n      - '!test-agent/**/*.md'\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    environment: test-agent\n    concurrency:\n      group: ${{ github.workflow }}-test-agent\n      cancel-in-progress: true\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Deploy LiveKit Cloud Agent\n        uses: livekit/deploy-action@main\n        env:\n          LIVEKIT_URL: ${{ secrets.LIVEKIT_URL }}\n          LIVEKIT_API_KEY: ${{ secrets.LIVEKIT_API_KEY }}\n          LIVEKIT_API_SECRET: ${{ secrets.LIVEKIT_API_SECRET }}\n          SECRET_LIST: ${{ secrets.SECRET_LIST }}\n        with:\n          OPERATION: deploy\n          WORKING_DIRECTORY: test-agent\n```\n\n### Check Agent Status\n\n```yaml\nname: Monitor Agent Status\non:\n  schedule:\n    - cron: '*/30 * * * *'  # Every 30 minutes\n\njobs:\n  check-status:\n    runs-on: ubuntu-latest\n    concurrency:\n      group: ${{ github.workflow }}-${{ github.ref }}\n      cancel-in-progress: true\n    \n    steps:\n      - uses: actions/checkout@v4\n      \n      - name: Check Agent Status\n        uses: livekit/deploy-action@main\n        env:\n          LIVEKIT_URL: ${{ secrets.LIVEKIT_URL }}\n          LIVEKIT_API_KEY: ${{ secrets.LIVEKIT_API_KEY }}\n          LIVEKIT_API_SECRET: ${{ secrets.LIVEKIT_API_SECRET }}\n        with:\n          OPERATION: status\n          SLACK_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}\n          SLACK_CHANNEL: \"#monitoring\"\n```\n\n### Check Agent Status with Retry until timeout or status == Running\n```yaml\n      - name: Status Check\n        uses: livekit/deploy-action@main\n        env:\n          LIVEKIT_URL: ${{ secrets.LIVEKIT_URL }}\n          LIVEKIT_API_KEY: ${{ secrets.LIVEKIT_API_KEY }}\n          LIVEKIT_API_SECRET: ${{ secrets.LIVEKIT_API_SECRET }}\n        with:\n          OPERATION: status-retry\n          WORKING_DIRECTORY: ${{ github.event.inputs.working_directory }}\n          TIMEOUT: 5m\n```\n\n## Inputs\n\n| Input | Description | Required | Default |\n|-------|-------------|----------|---------|\n| `OPERATION` | Operation to perform (`create`, `deploy`, `status`, `status-retry`) | Yes | `status` |\n| `WORKING_DIRECTORY` | Directory containing the agent configuration | No | `.` |\n| `SLACK_TOKEN` | Slack Bot Token for sending notifications | No | - |\n| `SLACK_CHANNEL` | Slack channel to send notifications to (e.g., `#general`) | No | - |\n| `TIMEOUT` | Timeout for the status-retry check | No | 5m |\n\n## Environment Variables\n\n### Required LiveKit Configuration\n\nThese can be set either as direct environment variables or as secrets with `SECRET_` prefix:\n\n- `LIVEKIT_URL` - Your LiveKit Cloud URL\n- `LIVEKIT_API_KEY` - Your LiveKit Cloud API Key  \n- `LIVEKIT_API_SECRET` - Your LiveKit Cloud API Secret\n\n### Agent Secrets\n\nPass any number of secrets to your agent by setting the `SECRET_LIST` var with a comma separated list in your workflow:\n\n```yaml\n  OPENAI_API_KEY={{key}},AUTH_TOKEN={{token}}\n  # Add as many secrets as needed...\n```\n\n\n## Concurrency Control\n\nAll workflows should use concurrency control to prevent multiple operations on the same agent:\n\n```yaml\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n```\n\n## Permissions\n\nThe create operation performs git commits and pushes, so workflows need proper permissions:\n\n```yaml\npermissions:\n  contents: write\n  pull-requests: write\n  actions: read\n```\n\nAnd the checkout action should include the token:\n\n```yaml\n- uses: actions/checkout@v4\n  with:\n    token: ${{ secrets.GITHUB_TOKEN }}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flivekit%2Fdeploy-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flivekit%2Fdeploy-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flivekit%2Fdeploy-action/lists"}