{"id":22018349,"url":"https://github.com/flavienbwk/repochat-action","last_synced_at":"2026-03-17T18:12:51.966Z","repository":{"id":255935054,"uuid":"847185140","full_name":"flavienbwk/repochat-action","owner":"flavienbwk","description":"Deploy an AI-powered chatbot for your repo in under 2 minutes.","archived":false,"fork":false,"pushed_at":"2024-09-13T03:53:15.000Z","size":1152,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-18T11:54:46.682Z","etag":null,"topics":["ai-ops","chatbot","devops","github-actions","llm","llm-ops"],"latest_commit_sha":null,"homepage":"https://gharepochatactionxfabjtdg-gha-repochat-action.functions.fnc.fr-par.scw.cloud/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flavienbwk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-08-25T05:09:42.000Z","updated_at":"2024-09-13T13:21:37.000Z","dependencies_parsed_at":"2024-09-13T14:38:34.464Z","dependency_job_id":null,"html_url":"https://github.com/flavienbwk/repochat-action","commit_stats":null,"previous_names":["flavienbwk/repochat-action"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/flavienbwk/repochat-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flavienbwk%2Frepochat-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flavienbwk%2Frepochat-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flavienbwk%2Frepochat-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flavienbwk%2Frepochat-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flavienbwk","download_url":"https://codeload.github.com/flavienbwk/repochat-action/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flavienbwk%2Frepochat-action/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266661940,"owners_count":23964400,"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-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["ai-ops","chatbot","devops","github-actions","llm","llm-ops"],"created_at":"2024-11-30T05:11:58.487Z","updated_at":"2025-12-28T18:36:21.345Z","avatar_url":"https://github.com/flavienbwk.png","language":"JavaScript","funding_links":[],"categories":["Features"],"sub_categories":["Software productivity"],"readme":"# Repochat Action\n\n[![Deployment CI](https://github.com/flavienbwk/repochat-action/actions/workflows/push-deploy.yml/badge.svg)](https://github.com/flavienbwk/repochat-action/actions/workflows/push-deploy.yml)\n[![GitHub release](https://img.shields.io/github/v/release/flavienbwk/repochat-action)](https://github.com/flavienbwk/repochat-action/releases/latest)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n\u003e [!WARNING]\n\u003e This project is in early development and may contain bugs. Use with caution in production environments.\n\nChat with your repo in under 2 minutes using GitHub Actions on [supported Cloud providers](#supported-cloud-providers).\n\nFeatures:\n\n- :sparkles: A nice web UI\n- :octocat: Available as a GitHub Action\n- :arrows_counterclockwise: Sateless ingestion via API\n- :floppy_disk: Optional state persisted to PostgreSQL or ChromaDB\n- :closed_lock_with_key: Optional password on web UI\n\n![RepoChat interface example](./media/screenshot.png)\n\n## Requirements\n\n- A [supported cloud provider](#supported-cloud-providers) credentials ;\n- An [OpenAI](https://openai.com/api/) API key.\n\n## Usage for GitHub Actions\n\nEasily add RepoChat to your project using GitHub Actions:\n\n```yaml\nname: \"Deploy Repochat for this repo\"\n\non:\n  push:\n    branches:\n    - main\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v2\n    - uses: flavienbwk/repochat-action@v0\n      name: 'Deploy Repochat'\n      id: deploy_repochat\n      with:\n        # All parameters not explicitly marked as \"optional\" are required\n        dirs_to_scan: \".\"  # comma-separated glob dirs to analyze\n        interface_password: ${{ secrets.INTERFACE_PASSWORD }}  # optional\n        openai_api_key: ${{ secrets.OPENAI_API_KEY }}\n        openai_model_type_inference: \"gpt-4o-mini\"\n        openai_model_type_embedding : \"text-embedding-3-small\"\n        provider_name: 'scaleway'\n        provider_key_id: ${{ secrets.PROVIDER_KEY_ID }}\n        provider_key_secret: ${{ secrets.PROVIDER_KEY_SECRET }}\n        provider_project_id: ${{ secrets.PROVIDER_PROJECT_ID }}\n        provider_default_region: 'fr-par'\n        provider_default_zone: 'fr-par-2'\n\n    - name: Get repochat domain\n      run: echo \"DOMAIN=${{ steps.deploy_repochat.outputs.domain }}\" \u003e\u003e $GITHUB_OUTPUT\n      id: repochat_domain\n```\n\n| Name                        | Required | Secret | Description                                                                                              |\n| --------------------------- | -------- | ------ | -------------------------------------------------------------------------------------------------------- |\n| dirs_to_scan                | Yes      | No     | Comma-separated glob directories to analyze                                                              |\n| openai_api_key              | Yes      | Yes    | OpenAI API key for authentication                                                                        |\n| openai_model_type_inference | Yes      | No     | OpenAI model type for inference (e.g., \"gpt-4o-mini\")                                                    |\n| openai_model_type_embedding | Yes      | No     | OpenAI model type for embedding (e.g., \"text-embedding-3-small\")                                         |\n| provider_name               | Yes      | No     | Name of the cloud provider (e.g., 'scaleway')                                                            |\n| provider_key_id             | Yes      | Yes    | Cloud provider API key ID                                                                                |\n| provider_key_secret         | Yes      | Yes    | Cloud provider API key secret                                                                            |\n| provider_project_id         | Yes      | Yes    | Cloud provider project ID                                                                                |\n| provider_default_region     | Yes      | No     | Default region for the cloud provider (e.g., 'fr-par')                                                   |\n| provider_default_zone       | Yes      | No     | Default zone for the cloud provider (e.g., 'fr-par-2')                                                   |\n| interface_password          | No       | Yes    | Optional password for the interface                                                                      |\n| pg_connection_string        | No       | Yes    | Enables storage to external PG DB (format: 'postgresql://username:password@hostname:port/database_name') |\n| cpu_limit                   | No       | No     | Default to 1000 (1 vCPU). Capabilities depend on the Cloud provider.                                     |\n| memory_limit                | No       | No     | Default to 1024. Capabilities depend on the Cloud provider.                                              |\n| min_scale                   | No       | No     | Default to 1. Must be left to 1 if not using the PG connection.                                          |\n| max_scale                   | No       | No     | Default to 1. Must be left to 1 if not using the PG connection.                                          |\n\nGet a practical implementation example with [`.github/workflows/push-deploy.yml`](./.github/workflows/push-deploy.yml#L76).\n\nYou can restrict your OpenAI API key permissions to:\n\n- Models: `Read`\n- Model capabilities: `Write`\n\n### Supported Cloud providers\n\n- **[Scaleway](https://www.scaleway.com/en/)**\n  - Refer to [Scaleway's documentation to generate API keys](https://www.scaleway.com/en/docs/identity-and-access-management/iam/how-to/create-api-keys/).\n  - Additional required parameters:\n\n    ```txt\n    provider_name: 'scaleway'\n    provider_key_id: ${{ secrets.PROVIDER_KEY_ID }}\n    provider_key_secret: ${{ secrets.PROVIDER_KEY_SECRET }}\n    provider_project_id: ${{ secrets.PROVIDER_PROJECT_ID }}\n    provider_default_region: 'fr-par'  # example\n    provider_default_zone: 'fr-par-2'  # example\n    ```\n\n  - Policies: ContainersFullAccess, ServerlessJobsFullAccess, FunctionsFullAccess\n\n## Other deployments\n\n### Deploy with Docker\n\n\u003cdetails\u003e\n\u003csummary\u003e👉 Deploy locally as a stateless API...\u003c/summary\u003e\n\n1. Copy and update env variables\n\n    ```bash\n    cp .env.example .env\n    ```\n\n2. Run the Docker container\n\n    ```bash\n    docker compose up --build -d\n    ```\n\n3. Inject data taking example on the [Python](./scripts/ingest-docs-api.py) or [JS](./scripts/ingest-docs-api.js) scripts\n\n4. Access the app at `http://localhost:3001`\n\n\u003c/details\u003e\n\n## Development\n\n\u003cdetails\u003e\n\u003csummary\u003e👉 Run RepoChat for development...\u003c/summary\u003e\n\n1. Clone this repo\n\n    ```bash\n    git@github.com:flavienbwk/repochat-action.git\n    ```\n\n2. Copy and update env variables\n\n    ```bash\n    cp .env.example .env\n    ```\n\n3. Run the local stack\n\n    ```bash\n    make dev\n    ```\n\n4. Access the app at `http://127.0.0.1:3000`\n\n\u003c/details\u003e\n\n## Release Action\n\n1. Increase repochat's version in `./package.json`\n\n2. Run build and commit latest edits:\n\n    ```bash\n    npm run build\n    # git add \u0026\u0026 git commit \u0026\u0026 git push...\n    ```\n\n3. Merge on `main`\n\n    This will create a release based on `package.json` and push the `:latest` Docker image.\n\n## Why not use Vercel ?\n\nVercel is very limited when it comes to deploying everything but JS. First, ChromaDB (and any sqlite-based library) [is not supported in Vercel](https://vercel.community/t/is-vercel-incompatible-with-chromadb-sqlite/787). Then, this project uses a FastAPI Python API that requires more storage than [Vercel's 250MB bundle limit](https://vercel.com/docs/functions/runtimes#bundle-size-limits).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflavienbwk%2Frepochat-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflavienbwk%2Frepochat-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflavienbwk%2Frepochat-action/lists"}