Skip to content

Conversation

@babakks
Copy link
Member

@babakks babakks commented Nov 3, 2025

Fixes #12083

A few notes for the reviewers:

  • For bodyclose: the api.HandleHTTPError(*http.Response) function pass the provided response to go-gh's HandleHTTPError function, which, thankfully, does not close the response body. Added a line to the function to highlight this. I've opened cli/go-gh#202 in go-gh to remark the same thing in the HandleHTTPError function docs.
  • For bodyclose: refactored a few places where the HTTP response was returned to the caller to be used for pagination data extraction. Again, bodyclose assumes the body stream of returned *http.Response values should be closed by the caller. Since returning the entire response wasn't really necessary I refactored the code to only return the needed response header. It definitely can be better, but for now resolves the issue in a safe way.
  • For copyloopvar: As of Go 1.22+, reusing the loop variable is safe, so I got rid off all cases.

@babakks babakks requested a review from a team as a code owner November 3, 2025 15:58
Copilot AI review requested due to automatic review settings November 3, 2025 15:58
@babakks babakks requested a review from a team as a code owner November 3, 2025 15:58
@babakks babakks linked an issue Nov 3, 2025 that may be closed by this pull request
@babakks babakks requested a review from BagToad November 3, 2025 15:58
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR refactors HTTP response handling to improve resource management and modernizes the codebase by enabling additional linters. The main changes include extracting link headers from HTTP responses for pagination, fixing resource leaks, and correcting error handling patterns.

Key changes:

  • Refactored pagination logic to extract link headers directly from responses instead of passing entire response objects
  • Added missing defer resp.Body.Close() calls to prevent resource leaks
  • Removed unnecessary tt := tt shadowing patterns for Go 1.22+ compatibility
  • Enabled additional linters (bodyclose, copyloopvar, nilerr, etc.) to enforce better code quality

Reviewed Changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pkg/search/searcher.go Refactored search() to return link header string instead of full response; updated pagination logic
pkg/cmd/repo/garden/http.go Modified getResponse() to return link header array instead of response object
pkg/cmd/repo/fork/fork.go Fixed error return to properly return nil on success
pkg/cmd/repo/edit/edit.go Added missing defer resp.Body.Close() calls
pkg/cmd/repo/delete/http.go Split EndpointNeedsScopes() call from error handling return
pkg/httpmock/stub.go Added //nolint:bodyclose directive for test helper
pkg/cmd/pr/shared/templates.go Added //nolint:nilerr directive with explanation
pkg/cmd/gist/list/list.go Fixed error return to propagate error instead of returning nil
pkg/cmd/gist/create/create.go Split EndpointNeedsScopes() call from error handling return
pkg/cmd/codespace/ssh.go Fixed goroutine closure to pass loop variable as parameter
pkg/cmd/codespace/ports.go Removed unnecessary pair := pair shadowing
pkg/cmd/root/help_topic_test.go Removed unnecessary tt := tt shadowing in test
pkg/cmd/browse/browse_test.go Changed filepath.Join to filepath.FromSlash for cross-platform compatibility
pkg/cmd/run/download/download_test.go Removed unnecessary filepath.Join calls for single-element paths
internal/safepaths/absolute_test.go Removed unnecessary tt := tt shadowing in test
api/queries_repo.go Added missing defer resp.Body.Close() call
api/pull_request_test.go Removed unnecessary tt := tt shadowing in tests
api/client.go Changed EndpointNeedsScopes() to void return; added documentation about response body handling
.golangci.yml Enabled multiple new linters including bodyclose, copyloopvar, nilerr, etc.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
The returned response from `api.EndpointNeedsScopes` causes `bodyclose`
linter to raise a false positive error, assuming it's a new response that
its body needs to be closed.

Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
Signed-off-by: Babak K. Shandiz <babakks@github.com>
@babakks babakks force-pushed the babakks/add-basic-linters branch from 56dbaad to 917e365 Compare November 3, 2025 20:06
Signed-off-by: Babak K. Shandiz <babakks@github.com>
Copy link
Member

@BagToad BagToad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! ✨

@BagToad
Copy link
Member

BagToad commented Nov 4, 2025

overriding reviews with @babakks since these are all simple noop linter fixes.

@BagToad BagToad merged commit 152d328 into trunk Nov 4, 2025
11 checks passed
@BagToad BagToad deleted the babakks/add-basic-linters branch November 4, 2025 17:46
Copy link

@mairucell667-hash mairucell667-hash left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

babakks/add-basic-linters

tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Nov 6, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [cli/cli](https://github.com/cli/cli) | minor | `v2.82.1` -> `v2.83.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>cli/cli (cli/cli)</summary>

### [`v2.83.0`](https://github.com/cli/cli/releases/tag/v2.83.0): GitHub CLI 2.83.0

[Compare Source](cli/cli@v2.82.1...v2.83.0)

#### What's Changed

##### ✨ Features

- Add `isImmutable` to `release list` JSON output by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;12064](cli/cli#12064)
- `gh agent-task create`: support `--custom-agent`/`-a` flag by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;12068](cli/cli#12068)
- 💡 (gh repo delete) Add warning when `--yes` is ignored without a repository, Closes: [#&#8203;12033](cli/cli#12033) by [@&#8203;Shion1305](https://github.com/Shion1305) in [#&#8203;12039](cli/cli#12039)
- feat: implement gh `pr revert` by [@&#8203;lucasmelin](https://github.com/lucasmelin) in [#&#8203;8826](cli/cli#8826)

##### 🐛 Fixes

- fix(gist): add support for editing & viewing large files  by [@&#8203;luxass](https://github.com/luxass) in [#&#8203;11761](cli/cli#11761)
- Fix gh attestation verify to work when Public Good Instance of Sigstore is unavailable by [@&#8203;Copilot](https://github.com/Copilot) in [#&#8203;11989](cli/cli#11989)

##### 📚 Docs & Chores

- chore: add basic linters by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;12084](cli/cli#12084)
- CI: Update lint govulncheck to use source mode by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;12089](cli/cli#12089)
- chore: add `workflow_dispatch` to govulncheck triggers by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;12085](cli/cli#12085)
- Exclude `third-party` from Golangci-lint formatting paths by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;12058](cli/cli#12058)
- Apply `go fix` to remove deprecated `// +build` tags by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;12056](cli/cli#12056)
- Bump Golangci-lint to `v2.6.0` by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;12049](cli/cli#12049)
- Mention `pr checks` in `run list` docs by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;12050](cli/cli#12050)
- Fix typo in comment for `gh issue develop` branch checkout command by [@&#8203;jonzfisher](https://github.com/jonzfisher) in [#&#8203;12042](cli/cli#12042)
- Use "release" sentinel value for release attestation verification by [@&#8203;Copilot](https://github.com/Copilot) in [#&#8203;11991](cli/cli#11991)
- Improve docstring for release-create by [@&#8203;bdehamer](https://github.com/bdehamer) in [#&#8203;11945](cli/cli#11945)
- Improve `api` command docs around `--input` and `--field` by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;12062](cli/cli#12062)
- Fix `--interval` flags docs in `gh pr checks` by [@&#8203;2003Aditya](https://github.com/2003Aditya) in [#&#8203;12053](cli/cli#12053)

##### :dependabot: Dependencies

- Bump Go to 1.25.3 by [@&#8203;github-actions](https://github.com/github-actions)\[bot] in [#&#8203;11926](cli/cli#11926)
- chore(deps): bump github.com/cli/go-gh/v2 from 2.12.2 to 2.13.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;12095](cli/cli#12095)
- Update Go toolchain version to 1.24.9 by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;12054](cli/cli#12054)
- chore(deps): bump golang.org/x/text from 0.29.0 to 0.30.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;11973](cli/cli#11973)
- chore(deps): bump golang.org/x/crypto from 0.42.0 to 0.43.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;11974](cli/cli#11974)
- chore(deps): bump actions/upload-artifact from 4 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;12031](cli/cli#12031)
- chore(deps): bump actions/download-artifact from 5 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;12032](cli/cli#12032)
- chore(deps): bump github.com/rivo/tview from 0.0.0-20250625164341-a4a78f1e05cb to 0.42.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;12000](cli/cli#12000)
- chore(deps): bump goreleaser/goreleaser-action from 6.3.0 to 6.4.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;11509](cli/cli#11509)
- chore(deps): bump mislav/bump-homebrew-formula-action from 3.4 to 3.6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;11750](cli/cli#11750)

#### New Contributors

- [@&#8203;lucasmelin](https://github.com/lucasmelin) made their first contribution in [#&#8203;8826](cli/cli#8826)
- [@&#8203;jonzfisher](https://github.com/jonzfisher) made their first contribution in [#&#8203;12042](cli/cli#12042)
- [@&#8203;2003Aditya](https://github.com/2003Aditya) made their first contribution in [#&#8203;12053](cli/cli#12053)

**Full Changelog**: <cli/cli@v2.82.1...v2.83.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNjkuMyIsInVwZGF0ZWRJblZlciI6IjQxLjE2OS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
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.

Enable a basic set of linters

4 participants