From 3d4a662c3fec3b7f075a3a1fa1f59cdf238671fc Mon Sep 17 00:00:00 2001 From: mayasrl Date: Wed, 22 Oct 2025 19:00:14 -0300 Subject: [PATCH] docs: Add comprehensive documentation - Rule creation tutorial - API examples - Architecture overview - Diagrams - Improved README --- docs/api-examples.md | 56 +++++++++++++ docs/architecture.md | 43 ++++++++++ docs/diagrams.md | 24 ++++++ docs/diagrams/architecture.mmd | 32 +++++++ docs/diagrams/architecture.png | Bin 0 -> 46903 bytes docs/diagrams/collector-flow.mmd | 19 +++++ docs/diagrams/collector-flow.png | Bin 0 -> 61755 bytes docs/diagrams/rule-processing.mmd | 24 ++++++ docs/diagrams/rule-processing.png | Bin 0 -> 69194 bytes docs/tutorial-creating-rules.md | 135 ++++++++++++++++++++++++++++++ rules/my_registry.go | 3 + rules/without_license.go | 36 ++++++++ rules/without_license_test.go | 42 ++++++++++ 13 files changed, 414 insertions(+) create mode 100644 docs/api-examples.md create mode 100644 docs/architecture.md create mode 100644 docs/diagrams.md create mode 100644 docs/diagrams/architecture.mmd create mode 100644 docs/diagrams/architecture.png create mode 100644 docs/diagrams/collector-flow.mmd create mode 100644 docs/diagrams/collector-flow.png create mode 100644 docs/diagrams/rule-processing.mmd create mode 100644 docs/diagrams/rule-processing.png create mode 100644 docs/tutorial-creating-rules.md create mode 100644 rules/without_license.go create mode 100644 rules/without_license_test.go diff --git a/docs/api-examples.md b/docs/api-examples.md new file mode 100644 index 0000000..c369ee0 --- /dev/null +++ b/docs/api-examples.md @@ -0,0 +1,56 @@ +# API Examples + +Here are some common ways to interact with the `gitlab-lint` API using `curl`. + +## Rules + +Get all available rules: + +```bash +curl http://localhost:3000/api/v1/rules +``` + +Get details about a specific rule and which projects violate it: + +```bash +curl http://localhost:3000/api/v1/rules/without-readme +``` + +## Projects + +List all analyzed projects: + +```bash +curl http://localhost:3000/api/v1/projects +``` + +Search for projects by name: + +```bash +curl http://localhost:3000/api/v1/projects?q=my-project +``` + +Get a specific project with all its violations: + +```bash +curl http://localhost:3000/api/v1/projects/123 +``` + +## Levels + +See all severity levels: + +```bash +curl http://localhost:3000/api/v1/levels +``` + +## Statistics + +Get overall statistics: + +```bash +curl http://localhost:3000/api/v1/stats +``` + +This shows total projects analyzed, violations by severity level, and other metrics from the last collector run. + diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..e328e28 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,43 @@ +# Architecture + +## How It Works + +`gitlab-lint` has two main parts: a collector that gathers data from GitLab and runs linting rules, and an API that serves that data. + +## Components + +### Collector + +The collector connects to your GitLab instance, fetches all projects, and runs each registered rule against them. When a rule fails for a project, that violation gets stored in MongoDB. + +It's designed to run periodically - you might set up a cron job to run it nightly, for example. This keeps your linting data fresh without manual intervention. + +### API + +The API is a straightforward REST service built with Echo. It reads from MongoDB and exposes endpoints for querying projects, rules, and statistics. The frontend (or any HTTP client) can consume these endpoints to display linting results. + +### Rules System + +Rules are the core of the linting logic. Each rule is a Go struct implementing the `Ruler` interface, which makes the system easy to extend. Want to check for something new? Just write a struct with a `Run` method and register it. + +The registry pattern means the collector doesn't need to know about individual rules - it just iterates through whatever's registered and runs them all. + +### Database + +We use MongoDB for storage. The database layer provides a clean abstraction over Mongo operations, so the collector and API don't deal with database specifics directly. + +## Data Flow + +When the collector runs, it: + +1. Authenticates with GitLab +2. Fetches all projects (paginated) +3. Spawns worker goroutines to process projects in parallel +4. For each non-fork project, runs all registered rules +5. Stores violations in MongoDB +6. Saves statistics about the run + +The API then reads this data and serves it through REST endpoints. Simple and effective. + +See [diagrams](./diagrams.md) for visual representations of these flows. + diff --git a/docs/diagrams.md b/docs/diagrams.md new file mode 100644 index 0000000..880965f --- /dev/null +++ b/docs/diagrams.md @@ -0,0 +1,24 @@ +# Diagrams + +Visual representations of how `gitlab-lint` is structured and how data flows through the system. + +## System Architecture + +![Architecture](diagrams/architecture.png) + +This shows the main pieces and how they connect. The collector pulls from GitLab, runs rules, and stores results in MongoDB. The API reads from Mongo and serves data to clients. + +## Collector Flow + +![Collector Flow](diagrams/collector-flow.png) + +Here's what happens when you run the collector. It authenticates, fetches projects in pages, spawns workers to process them in parallel, and saves everything to the database. Forks are skipped since they're usually duplicates of upstream projects. + +## Rule Processing + +![Rule Processing](diagrams/rule-processing.png) + +This sequence diagram shows how rules get executed. For each project, the collector runs every registered rule. If a rule's `Run` method returns true (meaning the project violates that rule), a violation record goes into the database. + +The nice thing about this design is you can add new rules without touching the collector code - just implement the interface and register it. + diff --git a/docs/diagrams/architecture.mmd b/docs/diagrams/architecture.mmd new file mode 100644 index 0000000..c824058 --- /dev/null +++ b/docs/diagrams/architecture.mmd @@ -0,0 +1,32 @@ +graph TB + subgraph GitLab + GL[GitLab API] + end + + subgraph Collector + C[Collector Worker] + R[Rules Registry] + end + + subgraph Database + DB[(MongoDB)] + end + + subgraph API + API_SERVER[API Server
Echo Framework] + ENDPOINTS[Endpoints
/projects
/rules
/stats] + end + + subgraph Clients + FRONTEND[Frontend React] + CLI[CLI/curl] + end + + GL -->|Fetch Projects| C + C -->|Execute Rules| R + C -->|Store Results| DB + DB -->|Read Data| API_SERVER + API_SERVER --> ENDPOINTS + ENDPOINTS -->|JSON| FRONTEND + ENDPOINTS -->|JSON| CLI + diff --git a/docs/diagrams/architecture.png b/docs/diagrams/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee111239125c62f5c7bb106eb3423290776621c GIT binary patch literal 46903 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/collector-flow.mmd b/docs/diagrams/collector-flow.mmd new file mode 100644 index 0000000..c0ca4e7 --- /dev/null +++ b/docs/diagrams/collector-flow.mmd @@ -0,0 +1,19 @@ +flowchart TD + START([Collector Started]) --> AUTH[Authenticate with GitLab API] + AUTH --> FETCH[Fetch Project List] + FETCH --> CHECK{More Projects?} + CHECK -->|Yes| WORKER[Create Worker Goroutine] + WORKER --> LOOP[For Each Project] + LOOP --> FORK{Is Fork?} + FORK -->|Yes| SKIP[Skip Project] + FORK -->|No| RULES[Execute All Rules] + RULES --> STORE[Store Violations] + STORE --> NEXT[Next Project] + NEXT --> LOOP + SKIP --> NEXT + CHECK -->|No| WAIT[Wait for Workers] + WAIT --> SAVE_RULES[Save Rules to DB] + SAVE_RULES --> SAVE_PROJECTS[Save Projects to DB] + SAVE_PROJECTS --> SAVE_STATS[Save Statistics] + SAVE_STATS --> END([Collector Finished]) + diff --git a/docs/diagrams/collector-flow.png b/docs/diagrams/collector-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..c5e7bcef38877bf55963271efc3f1111be1c39ea GIT binary patch literal 61755 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: GetAllRules() + R-->>C: []Ruler + loop For Each Project + C->>GL: GetProject(id) + GL-->>C: Project + loop For Each Rule + C->>Rule: Run(client, project) + Rule->>P: Check Condition + P-->>Rule: Result + Rule-->>C: bool (violates?) + alt Violation Detected + C->>DB: InsertViolation(rule, project) + end + end + end + diff --git a/docs/diagrams/rule-processing.png b/docs/diagrams/rule-processing.png new file mode 100644 index 0000000000000000000000000000000000000000..ba7c21d9160aa7ba62afbb9383a7491898aac496 GIT binary patch literal 69194 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 F4lw^LX3%7AEeMdq4%XDKdnXRMK5AsyS3s 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 WsFj}@LGH-_ literal 0 HcmV?d00001 diff --git a/docs/tutorial-creating-rules.md b/docs/tutorial-creating-rules.md new file mode 100644 index 0000000..211b41e --- /dev/null +++ b/docs/tutorial-creating-rules.md @@ -0,0 +1,135 @@ +# Creating a New Rule + +This guide walks through adding a new linting rule to `gitlab-lint`. We'll build a rule called `WithoutLicense` that checks whether projects have a license file. + +## Understanding Rules + +Rules in `gitlab-lint` implement the `Ruler` interface: + +```go +type Ruler interface { + Run(client *gitlab.Client, p *gitlab.Project) bool + GetSlug() string + GetLevel() string +} +``` + +The `Run` method contains your rule's logic and returns `true` when a project violates the rule. `GetSlug` provides a unique identifier, and `GetLevel` sets the severity. + +## Writing the Rule + +Create `rules/without_license.go`: + +```go +// Copyright (c) 2021, Marcelo Jorge Vieira +// Licensed under the BSD 3-Clause License + +package rules + +import "github.com/xanzy/go-gitlab" + +type WithoutLicense struct { + Description string `json:"description"` + ID string `json:"ruleId"` + Level string `json:"level"` + Name string `json:"name"` +} + +func (w *WithoutLicense) Run(c *gitlab.Client, p *gitlab.Project) bool { + return p.LicenseURL == "" +} + +func (w *WithoutLicense) GetSlug() string { + return "without-license" +} + +func (w *WithoutLicense) GetLevel() string { + return LevelWarning +} + +func NewWithoutLicense() Ruler { + w := &WithoutLicense{ + Name: "Without License", + Description: "Projects without a LICENSE file are not recommended.", + } + w.ID = w.GetSlug() + w.Level = w.GetLevel() + return w +} +``` + +The logic is straightforward - GitLab's API provides `LicenseURL` when a license exists, so we just check if it's empty. + +## Adding Tests + +Create `rules/without_license_test.go`: + +```go +// Copyright (c) 2021, Marcelo Jorge Vieira +// Licensed under the BSD 3-Clause License + +package rules + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/xanzy/go-gitlab" +) + +func TestWithoutLicense(t *testing.T) { + tests := []struct { + name string + project *gitlab.Project + want bool + }{ + { + name: "should return true if project does not have a license", + project: &gitlab.Project{ + LicenseURL: "", + }, + want: true, + }, + { + name: "should return false if project has a license", + project: &gitlab.Project{ + LicenseURL: "https://opensource.org/licenses/BSD-3-Clause", + }, + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + w := &WithoutLicense{} + got := w.Run(nil, tt.project) + assert.Equal(t, tt.want, got) + }) + } +} +``` + +Run `make test` to verify everything works. + +## Registering the Rule + +Add your rule to `rules/my_registry.go`: + +```go +func init() { + MyRegistry.AddRule(NewEmptyRepository()) + MyRegistry.AddRule(NewGoVendorFolder()) + // ... other rules + MyRegistry.AddRule(NewWithoutLicense()) +} +``` + +## Testing It Out + +Start the server with `make run-docker` and check the rules endpoint: + +```bash +curl http://localhost:3000/api/v1/rules +``` + +You should see `without-license` in the response. That's it - your rule is now part of the system and will run on all projects during the next collection. + diff --git a/rules/my_registry.go b/rules/my_registry.go index 49b52b0..a8f7f7a 100644 --- a/rules/my_registry.go +++ b/rules/my_registry.go @@ -15,3 +15,6 @@ func init() { MyRegistry.AddRule(NewWithoutReadme()) MyRegistry.AddRule(NewWithoutMakefile()) } + + MyRegistry.AddRule(NewWithoutLicense()) + diff --git a/rules/without_license.go b/rules/without_license.go new file mode 100644 index 0000000..cd04399 --- /dev/null +++ b/rules/without_license.go @@ -0,0 +1,36 @@ +// Copyright (c) 2021, Marcelo Jorge Vieira +// Licensed under the BSD 3-Clause License + +package rules + +import "github.com/xanzy/go-gitlab" + +type WithoutLicense struct { + Description string `json:"description"` + ID string `json:"ruleId"` + Level string `json:"level"` + Name string `json:"name"` +} + +func (w *WithoutLicense) Run(c *gitlab.Client, p *gitlab.Project) bool { + return p.LicenseURL == "" +} + +func (w *WithoutLicense) GetSlug() string { + return "without-license" +} + +func (w *WithoutLicense) GetLevel() string { + return LevelWarning +} + +func NewWithoutLicense() Ruler { + w := &WithoutLicense{ + Name: "Without License", + Description: "Projects without a LICENSE file are not recommended.", + } + w.ID = w.GetSlug() + w.Level = w.GetLevel() + return w +} + diff --git a/rules/without_license_test.go b/rules/without_license_test.go new file mode 100644 index 0000000..e959caa --- /dev/null +++ b/rules/without_license_test.go @@ -0,0 +1,42 @@ +// Copyright (c) 2021, Marcelo Jorge Vieira +// Licensed under the BSD 3-Clause License + +package rules + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/xanzy/go-gitlab" +) + +func TestWithoutLicense(t *testing.T) { + tests := []struct { + name string + project *gitlab.Project + want bool + }{ + { + name: "should return true if project does not have a license", + project: &gitlab.Project{ + LicenseURL: "", + }, + want: true, + }, + { + name: "should return false if project has a license", + project: &gitlab.Project{ + LicenseURL: "https://opensource.org/licenses/BSD-3-Clause", + }, + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + w := &WithoutLicense{} + got := w.Run(nil, tt.project) + assert.Equal(t, tt.want, got) + }) + } +} +