# Go Sdk

> Use when writing Go code to interact with Gitea API - automation, bots, integrations, migrations, or programmatic git forge operations

- Skill: `majiayu000/go-sdk` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/go-sdk`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/go-sdk/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/go-sdk

---


# Gitea Go SDK

## Overview

The official Go SDK for Gitea provides 332+ API methods with full type safety. Use it for bots, automation, integrations, and complex workflows. For quick CLI operations, use `gitea:tea-cli` instead.

## Quick Setup

```go
import "code.gitea.io/sdk/gitea"

// Create client
client, err := gitea.NewClient(
    "https://gitea.example.com",
    gitea.SetToken("your-token"),
)
```

```bash
go get code.gitea.io/sdk/gitea
```

See `references/authentication.md` in tea-cli for token creation.

## Quick Reference

| Task | Method |
|------|--------|
| **Repos** | |
| List my repos | `client.ListMyRepos(ListReposOptions{})` |
| Get repo | `client.GetRepo(owner, repo)` |
| Create repo | `client.CreateRepo(CreateRepoOption{})` |
| **Issues** | |
| List issues | `client.ListRepoIssues(owner, repo, ListIssueOption{})` |
| Create issue | `client.CreateIssue(owner, repo, CreateIssueOption{})` |
| Edit issue | `client.EditIssue(owner, repo, index, EditIssueOption{})` |
| **PRs** | |
| List PRs | `client.ListRepoPullRequests(owner, repo, ListPullRequestsOptions{})` |
| Create PR | `client.CreatePullRequest(owner, repo, CreatePullRequestOption{})` |
| Merge PR | `client.MergePullRequest(owner, repo, index, MergePullRequestOption{})` |
| **Releases** | |
| List releases | `client.ListReleases(owner, repo, ListReleasesOptions{})` |
| Create release | `client.CreateRelease(owner, repo, CreateReleaseOption{})` |

## API Categories

See `references/api-reference.md` for complete method list:
- Repositories (70+ methods)
- Issues & comments (50+ methods)
- Pull requests & reviews (40+ methods)
- Releases & attachments
- Organizations & teams
- Users, webhooks, actions

## Common Types

See `references/types.md` for struct definitions:
- `Repository`, `Issue`, `PullRequest`, `Release`
- `User`, `Organization`, `Team`
- `ListOptions` for pagination
- Option structs for create/edit

## Patterns

See `references/examples.md` for idiomatic patterns:
- Error handling
- Pagination
- Context usage
- Webhook handlers

## Authentication Options

```go
// Token auth (recommended)
client, _ := gitea.NewClient(url, gitea.SetToken(token))

// Basic auth
client, _ := gitea.NewClient(url, gitea.SetBasicAuth(user, pass))

// With 2FA
client, _ := gitea.NewClient(url,
    gitea.SetBasicAuth(user, pass),
    gitea.SetOTP(otp),
)

// SSH key
client, _ := gitea.NewClient(url,
    gitea.UseSSHPubkey(fingerprint, keyPath, passphrase),
)
```

## Common Patterns

```go
// Pagination
opts := gitea.ListOptions{Page: 1, PageSize: 50}
for {
    repos, resp, _ := client.ListMyRepos(gitea.ListReposOptions{ListOptions: opts})
    // process repos...
    if resp.NextPage == 0 {
        break
    }
    opts.Page = resp.NextPage
}

// Context support
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
client.SetContext(ctx)
```

## Common Mistakes

| Problem | Solution |
|---------|----------|
| Nil pointer panic | Always check error before using result |
| Missing pagination | Use `resp.NextPage` to get all results |
| Context timeout | Set appropriate timeout for bulk operations |
| Rate limiting | Check `resp.Header` for rate limit info |

