Automatic label classification for developer job postings β reads issues opened on
backend-pt/vagas,dotnetdevbr/vagas,frontend-pt/vagas, andnodejsdevbr/vagas, and applies the labels each repository already has. Never creates, renames, or recolors a label β only applies and removes.
| 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.
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.
git clone https://github.com/ApiBR/vagas-labeler-bot.git
cd vagas-labeler-bot
dotnet build
dotnet testRequires 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.
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
- π΄ Fork the repository
- πΏ Create a feature branch:
git checkout -b feature/my-feature - β
Commit your changes and ensure
dotnet build/dotnet testpass - π¬ Push and open a pull request against
main
All PRs run through CI (build + test + coverage) and SonarCloud analysis.
MIT Β© API BR