Skip to content

Repository files navigation

πŸ·οΈπŸ€– Vagas Labeler Bot

Automatic label classification for developer job postings β€” reads issues opened on backend-pt/vagas, dotnetdevbr/vagas, frontend-pt/vagas, and nodejsdevbr/vagas, and applies the labels each repository already has. Never creates, renames, or recolors a label β€” only applies and removes.

Build Quality Gate Status Coverage .NET License: MIT Docs


✨ What it does

Step Detail
πŸ“₯ Reads GitHub issues opened/edited/reopened on the four vagas repos, via a GitHub App webhook
🧠 Classifies A deterministic, tiered text engine (explicit label directives β†’ structured fields β†’ section matching β†’ whole-body matching), with an optional LLM tier for the gaps
🏷️ Labels Applies/removes only labels that already exist in the target repo β€” configured per repo via a vagas-labeler.yml the maintainers own
🚫 Never Creates, renames, deletes, or recolors a label

Full design rationale, the per-repo configuration schema, and the classification tiers are documented on the docs site.


πŸ—οΈ Architecture

GitHub issues ──HTTPS──► Webhook Ingress ──publish──► LavinMQ ──► Worker ──► GitHub REST API
                              β”‚                                      β”‚
                              └──────────── persist raw ─────────────┴──► MariaDB ◄── Private API

Three independently deployable entry points, Clean Architecture underneath:

src/
β”œβ”€β”€ ApiBr.Vagas.Domain            # entities, value objects β€” zero dependencies
β”œβ”€β”€ ApiBr.Vagas.Application       # use cases, ports (interfaces)
β”œβ”€β”€ ApiBr.Vagas.Contracts         # AMQP message envelopes
β”œβ”€β”€ ApiBr.Vagas.Configuration     # per-repo YAML schema, parser, validator
β”œβ”€β”€ ApiBr.Vagas.Labeling          # deterministic classification engine
β”œβ”€β”€ ApiBr.Vagas.Inference         # optional LLM tier β€” off by default
β”œβ”€β”€ ApiBr.Vagas.Infrastructure    # MariaDB, LavinMQ, GitHub client, health/version
β”œβ”€β”€ ApiBr.Vagas.Webhook           # entry point 1 β€” ingress (ASP.NET Core minimal API)
β”œβ”€β”€ ApiBr.Vagas.Worker            # entry point 2 β€” AMQP consumer + scheduled jobs
└── ApiBr.Vagas.Api               # entry point 3 β€” private API (internal only)

Dependency direction: Webhook/Worker/Api β†’ Infrastructure β†’ Application β†’ Domain. Domain never references anything else.


πŸš€ Getting started

git clone https://github.com/ApiBR/vagas-labeler-bot.git
cd vagas-labeler-bot
dotnet build
dotnet test

Requires the .NET 10 SDK (see global.json for the pinned version). Running the entry points locally against real MariaDB/LavinMQ instances is covered in Getting Started on the docs site.


πŸ“Š Project status

This repository is being built in phases; see the roadmap for the full plan and current status. In short:

  • βœ… Skeleton β€” solution, Clean Architecture project graph, GitVersion, CI, health/version endpoints on all three entry points
  • 🚧 Ingress, broker, persistence, config subsystem, classification engine, inference tier, private API, deployment β€” not yet built

🀝 Contributing

  1. 🍴 Fork the repository
  2. 🌿 Create a feature branch: git checkout -b feature/my-feature
  3. βœ… Commit your changes and ensure dotnet build / dotnet test pass
  4. πŸ“¬ Push and open a pull request against main

All PRs run through CI (build + test + coverage) and SonarCloud analysis.


πŸ“„ License

MIT Β© API BR

Releases

Packages

Used by

Contributors

Languages