docs(forge): align service docs with milestones
All checks were successful
Security Scan / security (push) Successful in 15s
Test / test (push) Successful in 1m47s

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-02 06:08:46 +00:00
parent 3fd44911ea
commit 491278904d
4 changed files with 13 additions and 13 deletions

View file

@ -33,9 +33,9 @@ The library is a flat package (`package forge`) with a layered design:
5. **`config.go`** — Config resolution: flags > env (`FORGE_URL`, `FORGE_TOKEN`) > defaults (`http://localhost:3000`).
6. **`forge.go`** — Top-level `Forge` struct aggregating all 19 service fields. Created via `NewForge(url, token)` or `NewForgeFromConfig(flagURL, flagToken)`.
6. **`forge.go`** — Top-level `Forge` struct aggregating all 20 service fields. Created via `NewForge(url, token)` or `NewForgeFromConfig(flagURL, flagToken)`.
7. **Service files** (`repos.go`, `issues.go`, etc.) — Each service struct embeds `Resource[T,C,U]` for standard CRUD, then adds hand-written action methods (e.g. `Fork`, `Pin`, `MirrorSync`). 19 services total: repos, issues, pulls, orgs, users, teams, admin, branches, releases, labels, webhooks, notifications, packages, actions, contents, wiki, commits, misc, activitypub.
7. **Service files** (`repos.go`, `issues.go`, etc.) — Each service struct embeds `Resource[T,C,U]` for standard CRUD, then adds hand-written action methods (e.g. `Fork`, `Pin`, `MirrorSync`). 20 services total: repos, issues, pulls, orgs, users, teams, admin, branches, releases, labels, webhooks, notifications, packages, actions, contents, wiki, commits, milestones, misc, activitypub.
8. **`types/`** — Generated Go types from `swagger.v1.json` (229 types). The `//go:generate` directive lives in `types/generate.go`. **Do not hand-edit generated type files** — modify `cmd/forgegen/` instead.

View file

@ -15,7 +15,7 @@ go-forge is organised in three layers, each building on the one below:
```
┌─────────────────────────────────────────────────┐
│ Forge (top-level client) │
│ Aggregates 19 service structs │
│ Aggregates 20 service structs │
├─────────────────────────────────────────────────┤
│ Service layer │
│ RepoService, IssueService, PullService, ... │

View file

@ -5,7 +5,7 @@ description: Full-coverage Go client for the Forgejo API with generics-based CRU
# go-forge
`dappco.re/go/core/forge` is a Go client library for the [Forgejo](https://forgejo.org) REST API. It provides typed access to 19 API domains (repositories, issues, pull requests, organisations, ActivityPub, and more) through a single top-level `Forge` client. Types are generated directly from Forgejo's `swagger.v1.json` specification, keeping the library in lockstep with the server.
`dappco.re/go/core/forge` is a Go client library for the [Forgejo](https://forgejo.org) REST API. It provides typed access to 20 API domains (repositories, issues, pull requests, organisations, milestones, ActivityPub, and more) through a single top-level `Forge` client. Types are generated directly from Forgejo's `swagger.v1.json` specification, keeping the library in lockstep with the server.
**Module path:** `dappco.re/go/core/forge`
**Go version:** 1.26+
@ -75,7 +75,7 @@ Environment variables:
go-forge/
├── client.go HTTP client, auth, error handling, rate limits
├── config.go Config resolution: flags > env > defaults
├── forge.go Top-level Forge struct aggregating all 19 services
├── forge.go Top-level Forge struct aggregating all 20 services
├── resource.go Generic Resource[T, C, U] for CRUD operations
├── pagination.go ListPage, ListAll, ListIter — paginated requests
├── params.go Path variable resolution ({owner}/{repo} -> values)
@ -95,8 +95,10 @@ go-forge/
├── actions.go ActionsService — CI/CD secrets, variables, dispatches, tasks
├── contents.go ContentService — file read/write/delete
├── wiki.go WikiService — wiki pages
├── commits.go CommitService — statuses, notes
├── misc.go MiscService — markdown, licences, gitignore, version
├── commits.go CommitService — statuses, notes
├── milestones.go MilestoneService — repository milestones
├── activitypub.go ActivityPubService — ActivityPub actors and inboxes
├── types/ 229 generated Go types from swagger.v1.json
│ ├── generate.go go:generate directive
│ ├── repo.go Repository, CreateRepoOption, EditRepoOption, ...
@ -114,7 +116,7 @@ go-forge/
## Services
The `Forge` struct exposes 19 service fields, each handling a different API domain:
The `Forge` struct exposes 20 service fields, each handling a different API domain:
| Service | Struct | Embedding | Domain |
|-----------------|---------------------|----------------------------------|--------------------------------------|
@ -134,8 +136,9 @@ The `Forge` struct exposes 19 service fields, each handling a different API doma
| `Actions` | `ActionsService` | (standalone) | CI/CD secrets, variables, dispatches, tasks |
| `Contents` | `ContentService` | (standalone) | File read/write/delete |
| `Wiki` | `WikiService` | (standalone) | Wiki pages |
| `Commits` | `CommitService` | (standalone) | Commit statuses, git notes |
| `Misc` | `MiscService` | (standalone) | Markdown, licences, gitignore, version |
| `Commits` | `CommitService` | (standalone) | Commit statuses, git notes |
| `Milestones` | `MilestoneService` | (standalone) | Repository milestones |
| `ActivityPub` | `ActivityPubService` | (standalone) | ActivityPub actors and inboxes |
Services that embed `Resource[T, C, U]` inherit `List`, `ListAll`, `Iter`, `Get`, `Create`, `Update`, and `Delete` methods automatically. Standalone services have hand-written methods because their API endpoints are heterogeneous and do not fit a uniform CRUD pattern.

View file

@ -102,11 +102,8 @@ func milestoneQuery(filters ...MilestoneListOptions) map[string]string {
query := make(map[string]string, 2)
for _, filter := range filters {
if filter.State != "" {
query["state"] = filter.State
}
if filter.Name != "" {
query["name"] = filter.Name
for key, value := range filter.queryParams() {
query[key] = value
}
}
if len(query) == 0 {