From b02ade4f238577155c6893cf8cb5f09346583f2c Mon Sep 17 00:00:00 2001 From: Rodin Date: Fri, 1 May 2026 14:19:37 -0700 Subject: [PATCH] fix: quick wins (#7, #9, #13) - Add --version flag and log version on startup (closes #9) - URL-escape ref query parameter in GetFileContentRef (closes #7) - Add go vet to release workflow (closes #13) Renamed local url variable to reqURL to avoid shadowing net/url package. --- .gitea/workflows/release.yml | 4 +++- cmd/review-bot/main.go | 8 ++++++++ gitea/client.go | 5 +++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index b268f29..3d2fde6 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -16,7 +16,9 @@ jobs: go-version: '1.26' - name: Run tests - run: go test ./... + run: | + go vet ./... + go test ./... - name: Build binaries run: | diff --git a/cmd/review-bot/main.go b/cmd/review-bot/main.go index f33e241..f31c756 100644 --- a/cmd/review-bot/main.go +++ b/cmd/review-bot/main.go @@ -18,6 +18,7 @@ import ( var version = "dev" func main() { + versionFlag := flag.Bool("version", false, "Print version and exit") // CLI flags giteaURL := flag.String("gitea-url", envOrDefault("GITEA_URL", ""), "Gitea instance URL") repo := flag.String("repo", envOrDefault("GITEA_REPO", ""), "Repository (owner/name)") @@ -36,6 +37,13 @@ func main() { flag.Parse() + if *versionFlag { + fmt.Printf("review-bot %s\n", version) + os.Exit(0) + } + + log.Printf("review-bot %s", version) + // Validate required fields if *giteaURL == "" || *repo == "" || *prNum == "" || *reviewerToken == "" || *llmBaseURL == "" || *llmAPIKey == "" || *llmModel == "" { diff --git a/gitea/client.go b/gitea/client.go index 6c00e21..cbd266d 100644 --- a/gitea/client.go +++ b/gitea/client.go @@ -8,6 +8,7 @@ import ( "io" "log" "net/http" + "net/url" "strings" "time" ) @@ -117,8 +118,8 @@ func (c *Client) GetFileContent(ctx context.Context, owner, repo, filepath strin // GetFileContentRef fetches a file from a specific ref (branch/tag/sha) in a repo. func (c *Client) GetFileContentRef(ctx context.Context, owner, repo, filepath, ref string) (string, error) { - url := fmt.Sprintf("%s/api/v1/repos/%s/%s/raw/%s?ref=%s", c.baseURL, owner, repo, filepath, ref) - body, err := c.doGet(ctx, url) + reqURL := fmt.Sprintf("%s/api/v1/repos/%s/%s/raw/%s?ref=%s", c.baseURL, owner, repo, filepath, url.QueryEscape(ref)) + body, err := c.doGet(ctx, reqURL) if err != nil { return "", fmt.Errorf("fetch file %s@%s: %w", filepath, ref, err) }