{"id":15089437,"url":"https://github.com/urcomputeringpal/kubevalidator","last_synced_at":"2025-10-05T22:30:36.911Z","repository":{"id":45379259,"uuid":"143566710","full_name":"urcomputeringpal/kubevalidator","owner":"urcomputeringpal","description":"A GitHub App that uses kubeval to validate all of that Kubernetes YAML in your repo","archived":true,"fork":false,"pushed_at":"2021-12-16T18:59:28.000Z","size":3767,"stargazers_count":94,"open_issues_count":10,"forks_count":4,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-09-26T09:01:10.198Z","etag":null,"topics":["ci","github","github-app","kubectl","kubernetes","lint","linter","yaml","yml"],"latest_commit_sha":null,"homepage":"https://github.com/apps/kubevalidator","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/urcomputeringpal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null}},"created_at":"2018-08-04T22:20:20.000Z","updated_at":"2023-10-20T09:13:56.000Z","dependencies_parsed_at":"2022-08-31T12:41:54.259Z","dependency_job_id":null,"html_url":"https://github.com/urcomputeringpal/kubevalidator","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urcomputeringpal%2Fkubevalidator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urcomputeringpal%2Fkubevalidator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urcomputeringpal%2Fkubevalidator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urcomputeringpal%2Fkubevalidator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/urcomputeringpal","download_url":"https://codeload.github.com/urcomputeringpal/kubevalidator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219877064,"owners_count":16554821,"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","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":["ci","github","github-app","kubectl","kubernetes","lint","linter","yaml","yml"],"created_at":"2024-09-25T09:00:25.984Z","updated_at":"2025-10-05T22:30:31.029Z","avatar_url":"https://github.com/urcomputeringpal.png","language":"Go","readme":"# kubevalidator\n\nA GitHub App that validates the Kubernetes YAML in your GitHub PRs using [kubeval](https://github.com/garethr/kubeval).\n\n### Example\n\n![](https://urcomputeringpal.com/assets/kubevalidator.gif)\n\n### Goals\n\n* Improve the experience of changing and reviewing YAML documents representing Kubernetes resources by detecting and highlighting errors automatically.\n* Allow validation against multiple schemas to support applications deployed to multiple Kubernetes clusters with disparate versions.\n* Explore the viability of writing a generalized [Probot](http://probot.github.io/)-like GitHub App toolkit in Golang.\n\n### Non-goals\n\n* Validate the syntax of your YAML. (Shameless plug: use [YAMBURGER](https://github.com/urcomputeringpal/yamburger) for that! It's kinda dope!)\n\n## Configuration\n\nkubevalidator depends on you to tell it which YAML in your repository it should validate using a file at `.github/kubevalidator.yaml`. [This repo's config](./.github/kubevalidator.yaml) is a decent example:\n\n```yaml\napiversion: v1alpha\nkind: KubeValidatorConfig\nspec:\n  manifests:\n  - glob: config/kubernetes/default/*/*.yaml\n    schemas:\n    - version: 1.13.0\n    - version: 1.13.3\n    #\n    # Schema options and their defaults. See config.go for more details.\n    #\n\n    # version: 'master'\n    # name: 'human readable name' # defaults to the value of version\n\n    # If the schemas in https://github.com/garethr/kubernetes-json-schema\n    # don't work for you, fork it and drop your username here! Your schemas\n    # will be used instead.\n    #\n    # schemaFork: garethr\n\n    # Set this to openshift to use schemas from\n    # https://github.com/garethr/openshift-json-schema instead.\n    #\n    # type: kubernetes\n\n```\n\n## Hacking\n\nSee [`CONTRIBUTING.md`](./CONTRIBUTING.md)\n\n## Deploying your own instance\n\nThese instructions are untested. Please open a new issue or PR if you run into any problems or would prefer to use another deployment tool!\n\n* Fork \u0026 clone this repo.\n* Edit or delete the included [Ingress](./config/kubernetes/default/ingresses/kubevalidator.yaml) and/or [Service](./config/kubernetes/default/ingresses/kubevalidator.yaml) resources to match your target cluster's load balancing requirements.\n* Create a new GitHub App with the following settings:\n  * Homepage URL: the URL to the GitHub repository for your app\n  * Webhook URL: Use https://example.com/ for now, we'll come back in a minute to update this with the URL of your deployed app.\n  * Webhook Secret: Generate a unique secret with `openssl rand -base64 32` and save it because you'll need it in a minute to configure your deployed app\n  * Permissions:\n    * Checks: Read \u0026 Write\n    * Repository contents: Read-only\n    * Repository metadata: Read-only\n    * Pull requests: Read-only\n  * Webhooks:\n    * Check Suite\n    * Pull Request\n* Generate and download a new key for your app. Note the path.\n* Create a secret with values to authenticate your instance of kubevalidator as your GitHub app\n\n```\nkubectl create secret generic kubevalidator\n    --from-file=PRIVATE_KEY=~/Downloads/path-to-kubeval-key.pem \\\n    --from-literal=APP_ID=1234 \\\n    --from-literal=WEBHOOK_SECRET=1234 \\\n    --dry-run=true -o yaml \u003e config/kubernetes/default/secrets/kubeval.yaml\n```\n\n\n* Configure access to a Kubernetes cluster.\n* Create a `kubevalidator` namespace on that cluster.\n* Install [Skaffold](https://github.com/GoogleContainerTools/skaffold).\n* Point `build.artifacts[0].image` in skaffold.yaml to an accessible docker image path, and make sure it matches the image specified in the `kubernetes/default/deployments/kubevalidator.yaml` deployment manifest \n* Run `skaffold run` to deploy this application to your cluster!\n\n## Acknowledgements\n\n* :bow: to @keavy, @kytrinyx, @lizzhale and many more for your work on [GitHub Checks](https://developer.github.com/v3/checks/). PRs aren't ever going to be the same.\n* :bow: to @garethr for your work on [kubeval](https://github.com/garethr/kubeval). It does all of the heavy lifting here, I've just put some GitHub-flavored window dressing on top.\n* :bow: to @bkeepers for your work on [Probot](http://probot.github.io/). I've learned a ton building Probot apps in the past few months, and hope that you don't mind that I've poorly re-implemented a small portion of it in Golang in this project. :wink:\n\n## Questions?\n\nPlease [file an issue](https://github.com/urcomputeringpal/kubevalidator/issues/new/choose)! If you'd prefer to reach out in private, please send an email to pal@urcomputeringpal.com.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furcomputeringpal%2Fkubevalidator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Furcomputeringpal%2Fkubevalidator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furcomputeringpal%2Fkubevalidator/lists"}