{"id":20243965,"url":"https://github.com/wille/review-app-operator","last_synced_at":"2026-05-07T01:06:09.780Z","repository":{"id":250140379,"uuid":"821523940","full_name":"wille/review-app-operator","owner":"wille","description":"Kubernetes Operator that creates on-demand staging environments for Pull Requests","archived":false,"fork":false,"pushed_at":"2025-05-10T14:34:28.000Z","size":373,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-10T15:34:55.378Z","etag":null,"topics":["continuous-deployment","github-actions","gitops","kubernetes"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wille.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}},"created_at":"2024-06-28T18:31:43.000Z","updated_at":"2025-05-10T14:34:32.000Z","dependencies_parsed_at":"2024-07-25T12:29:37.520Z","dependency_job_id":"e9580c1e-b7ff-434a-aa49-f2ea6d0cdaf3","html_url":"https://github.com/wille/review-app-operator","commit_stats":null,"previous_names":["wille/review-app-operator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wille/review-app-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wille%2Freview-app-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wille%2Freview-app-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wille%2Freview-app-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wille%2Freview-app-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wille","download_url":"https://codeload.github.com/wille/review-app-operator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wille%2Freview-app-operator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272929996,"owners_count":25017057,"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-08-30T02:00:09.474Z","response_time":77,"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":["continuous-deployment","github-actions","gitops","kubernetes"],"created_at":"2024-11-14T09:10:53.048Z","updated_at":"2026-05-07T01:06:09.741Z","avatar_url":"https://github.com/wille.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GitHub release](https://img.shields.io/github/release/wille/review-app-operator.svg?style=flat-square)](https://github.com/wille/review-app-operator/releases/latest)\n\n# Review App Operator\n\nA Kubernetes operator for creating staging/preview environments for pull requests, aimed towards web applications and APIs, but can be used to deploy a staging instance of any containerized application.\n\nIt's intended to be the most simple solution to have fully functional dynamic staging review environments for pull requests and to not waste computing resources by automatically stopping environments that are not used and starting them again on demand.\n\nUse the [Review App Action](https://github.com/wille/review-app-action) to keep deployments in sync with Pull Requests.\n\nThe Review App Operator consists of four components:\n\n- **Manager**: The controller responsible for creating and managing the deployments and keeping them in sync\n- **Forwarder**: The proxy responsible for routing traffic to the correct deployment and starting deployments on demand\n- **Downscaler**: Watches pull request deployments and downscales if no traffic is received after `scaleDownAfter` (default 1h)\n- **Deployment Webhook**: Receives pull request open, sync and close events from Github Actions with [`wille/review-app-action`](https://github.com/wille/review-app-action)\n\n## Installation\n\n### Prerequisites\n\n- Access to a Kubernetes v1.11.3+ cluster.\n- Familiarity with Helm charts.\n- An Ingress controller like [ingress-nginx](https://github.com/kubernetes/ingress-nginx) with [cert-manager](https://cert-manager.io).\n\n## Configuration `values.yaml`\n\nSee [values.yaml](/chart/values.yaml) for all available options\n\n```yaml\nwebhook:\n  # The webhook secret that will be used by the CI to trigger pull request events\n  # The secret will be created if it does not exist.\n  secretKeyRef:\n    name: webhook-secret\n    key: webhook-secret\n  ingress:\n    annotations:\n      cert-manager.io/cluster-issuer: letsencrypt # Use cert-manager to issue a certificate for the webhook Ingress\n    tls: true # Enable TLS for the ingress\n    host: review-app-webhooks.example.com\nforwarder:\n  ingress:\n    annotations:\n      cert-manager.io/cluster-issuer: letsencrypt\n    hosts:\n      - \"*.review-apps.example.com\"\n```\n\n\u003e [!IMPORTANT]\n\u003e\n\u003e - The `forwarder.ingress.host` field must be a a wildcard hostname as only one Ingress is used to route traffic to the forwarder. You need to use this hostname suffix in `hostTemplates` in your `ReviewAppConfig`\n\u003e - The `webhook.ingress.host` is the host used for the [Review App Action](https://github.com/wille/review-app-action) webhook\n\n## Install with Helm\n\n```bash\n$ helm repo add review-app-operator https://wille.github.io/review-app-operator\n$ helm install review-app-operator review-app-operator/review-app-operator \\\n    --namespace review-app-operator-system --create-namespace \\\n    -f values.yaml\n```\n\n## Creating a Review App\n\nThe Review App Controller introduces two new Kubernetes resources: `ReviewAppConfig` and `PullRequest`.\n\nThe `ReviewAppConfig` is similar to a `Deployment` but with extra fields to select which container and port to target.\n\n### `my-review-app.yml`\n\n```yaml\napiVersion: reviewapps.william.nu/v1alpha1\nkind: ReviewAppConfig\nmetadata:\n  name: my-review-app\n  namespace: staging\nspec:\n  deployments:\n    - name: test\n      targetContainerName: test # Update this container when a Pull request is opened or updated\n      targetContainerPort: 80 # The container port to forward traffic to\n      hostTemplates:\n        # The host template to use for the review app\n        # This will be combined with the `.spec.domain` like:\n        # `test-branch-name.review-apps.example.com`\n        - \"test-{{.BranchName}}.review-apps.example.com\"\n      template:\n        spec:\n          containers:\n            - name: test # Update this container when a Pull request is opened or updated\n              image: nginx:latest\n              ports:\n                - containerPort: 80\n            - name: redis\n              image: redis:7\n```\n\nCreate this ReviewAppConfig\n`kubectl apply -f my-review-app.yml`\n\n\u003e [!NOTE]\n\u003e See the [ReviewAppConfig sample](/config/samples/reviewapps.william.nu_v1alpha1_reviewapp.yaml) for a more detailed example.\n\u003e\n\u003e Hostnames can be templated with `{{.ReviewAppConfig}}`, `{{.BranchName}}`, `{{.DeploymentName}}`, `{{.PullRequestNumber}}`\n\n## PullRequest resource\n\n\u003e [!IMPORTANT]\n\u003e Pull requests are created and deleted automatically by the [Review App Action](https://github.com/wille/review-app-action) that runs your Github Actions `pull_request` workflows\n\u003e\n\u003e You can manually create PullRequest resources to test the operator\n\n```yaml\napiVersion: reviewapps.william.nu/v1alpha1\nkind: PullRequest\nmetadata:\n  name: my-pull-request\n  namespace: staging\nspec:\n  # The branch name to create a review app for\n  branchName: my-branch\n  # The name of the review app to create\n  reviewAppName: my-review-app\n\n  # The latest deployed image\n  imageName: \u003cuser\u003e/\u003crepo\u003e:29df5a41b93906346d693c90adcd8acf266893c3@sha256:...\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwille%2Freview-app-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwille%2Freview-app-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwille%2Freview-app-operator/lists"}