{"id":50985042,"url":"https://github.com/konojunya/celguard","last_synced_at":"2026-06-19T18:04:07.739Z","repository":{"id":322632978,"uuid":"1090212721","full_name":"konojunya/celguard","owner":"konojunya","description":"Pull Request Linter with CEL","archived":false,"fork":false,"pushed_at":"2026-01-20T14:23:39.000Z","size":120,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-31T00:12:24.377Z","etag":null,"topics":["cell","golang","prlint"],"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/konojunya.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":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-05T11:17:05.000Z","updated_at":"2026-01-20T14:25:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/konojunya/celguard","commit_stats":null,"previous_names":["konojunya/prlint","konojunya/celguard"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/konojunya/celguard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konojunya%2Fcelguard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konojunya%2Fcelguard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konojunya%2Fcelguard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konojunya%2Fcelguard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/konojunya","download_url":"https://codeload.github.com/konojunya/celguard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konojunya%2Fcelguard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34542467,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"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":["cell","golang","prlint"],"created_at":"2026-06-19T18:04:07.191Z","updated_at":"2026-06-19T18:04:07.728Z","avatar_url":"https://github.com/konojunya.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# celguard 🛡️\n\n[![GitHub Actions](https://img.shields.io/github/actions/workflow/status/konojunya/celguard/ci.yaml?branch=main)](https://github.com/konojunya/celguard/actions)\n\nA GitHub Action that validates Pull Requests using [Common Expression Language (CEL)](https://github.com/google/cel-spec).\n\nIt reads rules from `.github/celguard.yaml` and ensures your PR title, body, branch, labels, etc. follow your team's conventions.\n\n![](./screenshots/screen.png)\n\n## ✨ Features\n\n- 🔍 **CEL-based rules** — powerful and flexible expression syntax (regex, list operations, logic)\n- ⚙️ **Custom config per repo** — define rules in `.github/celguard.yaml`\n- 🧪 **Go implementation** — single binary, so fast\n\n## 🚀 Quick Start\n\n### 1. Create Configuration File\n\nCreate `.github/celguard.yaml` in your repository root.\n\n```yaml\ntitle:\n  cel: \"value.matches('^(feat|fix|docs|style|refactor|test|chore): .+')\"\n  error: PR title must follow conventional commits format\nhead_ref:\n  cel: \"!value.matches('^(main|master|develop)$')\"\n  error: Direct commits to main/master/develop are not allowed\nlabels:\n  cel: \"value.exists(l, l in ['bug', 'enhancement', 'documentation'])\"\n  error: At least one of [bug, enhancement, documentation] label is required\n```\n\n### 2. Add Workflow\n\nCreate `.github/workflows/celguard.yaml`.\n\n```yaml\nname: PR Lint\non:\n  pull_request:\n    types: [opened, reopened, edited]\n\npermissions:\n  contents: read\n  pull-requests: write\n\njobs:\n  celguard:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - name: Run PR Lint\n        uses: konojunya/celguard@v1\n```\n\n## 📖 Configuration\n\n### Supported Configuration Keys\n\nYou can define validation rules for the following keys:\n\n| Key | Type | Description | Example |\n|-----|------|-------------|---------|\n| `title` | `string` | PR title | `\"feat: add new feature\"` |\n| `body` | `string` | PR body | `\"This PR adds...\"` |\n| `author` | `string` | PR author's GitHub username | `\"konojunya\"` |\n| `base_ref` | `string` | Base branch name | `\"main\"` |\n| `head_ref` | `string` | Head branch name (source branch of PR) | `\"feature/new-feature\"` |\n| `labels` | `[]string` | Array of labels attached to PR | `[\"bug\", \"enhancement\"]` |\n\n### Configuration File Format\n\nFor each key, define rules in the following format:\n\n```yaml\n\u003ckey\u003e:\n  cel: \u003cCEL expression\u003e\n  error: \u003cerror message\u003e\n```\n\n- **`cel`**: CEL expression. The validation passes when this expression returns `true`\n- **`error`**: Error message displayed when validation fails (optional)\n\n## 🛠️ Development\n\n### Testing\n\n```bash\ngo test ./...\n```\n\n## 🤝 Contributing\n\nContributions are welcome! You can contribute by following these steps:\n\n1. Fork this repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Contribution Guidelines\n\n- Bug reports and feature requests are welcome in [Issues](https://github.com/konojunya/celguard/issues)\n- Code changes should be submitted via Pull Request\n- Please follow the existing code style\n- When adding new features, please also add tests\n\n## 📄 License\n\nThis project is licensed under the license specified in the [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkonojunya%2Fcelguard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkonojunya%2Fcelguard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkonojunya%2Fcelguard/lists"}