Skip to content

migrate to any-cli/kit, add 20 commands#2

Open
tamnd wants to merge 1 commit into
mainfrom
feat/pr1-kit-migration
Open

migrate to any-cli/kit, add 20 commands#2
tamnd wants to merge 1 commit into
mainfrom
feat/pr1-kit-migration

Conversation

@tamnd

@tamnd tamnd commented Jun 15, 2026

Copy link
Copy Markdown
Owner

Summary

Rewrites the cobra-based CLI onto the any-cli/kit framework and adds 15 new commands on top of the original 5.

Commands added (20 total):

User group:

  • gitee user <username> — full user profile
  • gitee repos <username> — public repos (--sort, --direction)
  • gitee followers <username> — follower list
  • gitee following <username> — following list

Repo group:

  • gitee repo <owner/repo> — repo metadata
  • gitee commits <owner/repo> — commit list (--sha, --path, --author, --since, --until)
  • gitee branches <owner/repo> — branch list
  • gitee tags <owner/repo> — tag list (--sort, --direction)
  • gitee releases <owner/repo> — release list
  • gitee issues <owner/repo> — issue list (--state, --sort, --direction)
  • gitee pulls <owner/repo> — PR list (--state, --sort, --direction)
  • gitee readme <owner/repo> — README decoded text (--ref)
  • gitee tree <owner/repo> — recursive file tree (--ref, --recursive)
  • gitee stargazers <owner/repo> — stargazers
  • gitee forks <owner/repo> — forks (--sort)
  • gitee contributors <owner/repo> — contributors (--type)

Search group:

  • gitee search repos <query> — search repos (--sort)
  • gitee search users <query> — search users

Org group:

  • gitee org <name> — org profile
  • gitee org repos <name> — org repos (--type, --sort, --direction)

Key implementation notes:

  • Issue number is string (alphanumeric like "IJUFI0") — Gitee API contract
  • User.Stared preserves the "stared" API typo exactly (not "starred")
  • Repo.URL strips .git suffix from wire html_url
  • Search uses from/size pagination (Elasticsearch-style), not page/per_page
  • GITEE_TOKEN env var for higher rate limits (20,000 req/hr vs ~60 anonymous)
  • wireLicense handles both object and bare-string forms via custom UnmarshalJSON

Deleted: All cobra/fang-specific files (cli/cmd_*.go, cli/output.go, cli/errors.go, pkg/)

Test plan

  • go build ./... clean
  • go test -race -count=1 ./... passes (httptest-backed, no network)
  • CI green on push
  • Live smoke: gitee user torvalds, gitee repos oschina, gitee repo oschina/git-osc, gitee issues oschina/git-osc

Replace cobra/fang/pkg/render with the any-cli/kit framework.
Drop cli/cmd_*.go, cli/output.go, cli/errors.go, cli/version.go, pkg/render/.

gitee/ gains api.go (20 typed API methods), wire.go (all wire→public
converters, wireLicense dual-form, base64 README decode), ids.go
(ParseRepoSlug), domain.go (kit.Domain + Session + newClient + MapErr),
ops.go (20 kit.Handle registrations: user, user repos, followers,
following, repo, commits, branches, tags, releases, issues, pulls,
readme, tree, stargazers, forks, contributors, search repos, search
users, org, org repos).

gitee.go gets Token field + addToken(), ErrUnauthorized, ErrRateLimit.
types.go fully rewritten with table/kit struct tags.
Test suite updated; ids_test.go added.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant