Skip to content

Route release creation through api.Client - #14062

Merged
williammartin merged 2 commits into
trunkfrom
williammartin-wp-08-release-create
Aug 4, 2026
Merged

Route release creation through api.Client#14062
williammartin merged 2 commits into
trunkfrom
williammartin-wp-08-release-create

Conversation

@williammartin

@williammartin williammartin commented Aug 4, 2026

Copy link
Copy Markdown
Member

Description

Part of #13991

This PR migrates gh release create to use the api.Client for API interactions. There should be no user visible change.

Five call sites move across: getTags, generateReleaseNotes, createRelease, publishRelease and deleteRelease. publishedReleaseExists deliberately stays on the raw http.Client, because it issues a HEAD request and so has no response body to decode, while api.Client.REST unmarshals every 2xx other than 204 and 205 as JSON. It keeps safeurl.JoinPathWithHostPrefix, since it still builds the full URL itself, and carries a TODO(api-client-rollout) comment recording that reason.

generateReleaseNotes treats a 404 as "this host does not implement the endpoint" rather than as an error. Because api.Client.REST turns a 404 into an api.HTTPError, that is now expressed with errors.As instead of a status check.

createRelease does the same for its missing-workflow-scope case. It now reads the scopes header and the hostname off the api.HTTPError rather than off an *http.Response, so tokenHasWorkflowScope takes an http.Header instead of a *http.Response, and the hostname comes from httpErr.RequestURL. That field is populated from the request that produced the error, so it stays correct on GHES.

publishRelease and deleteRelease act on the release APIURL returned by the server, which is an absolute URL. api.Client.REST passes absolute URLs through untouched, so those two requests are unchanged on the wire. Both functions gain a host parameter, supplied by baseRepo.RepoHost().

pkg/cmd/release/create/http.go had no test file, so this PR adds one covering the error paths of all five migrated functions. The success paths of publishRelease and deleteRelease were already exercised by the draft-while-uploading cases in create_test.go.

Acceptance Test

  williammartin-supreme-barnacle git:(williammartin-supreme-barnacle) cd /Users/williammartin/workspace/work/copilot-worktrees/cli/williammartin-miniature-engine

GH_ACCEPTANCE_HOST=github.com \
GH_ACCEPTANCE_ORG=gh-acceptance-testing \
GH_ACCEPTANCE_TOKEN="$(gh auth token --hostname github.com)" \
go test -tags=acceptance -count=1 -v -run '^TestReleases$' ./acceptance
=== RUN   TestReleases
=== RUN   TestReleases/release-create
=== PAUSE TestReleases/release-create
=== RUN   TestReleases/release-list
=== PAUSE TestReleases/release-list
=== RUN   TestReleases/release-upload-download
=== PAUSE TestReleases/release-upload-download
=== RUN   TestReleases/release-view
=== PAUSE TestReleases/release-view
=== CONT  TestReleases/release-create
=== CONT  TestReleases/release-upload-download
=== CONT  TestReleases/release-list
=== CONT  TestReleases/release-view
=== NAME  TestReleases/release-create
    testscript.go:584: WORK=$WORK
        PATH=/var/folders/z7/869nt6ns29d77xln9h9bm8680000gn/T/testscript-main2967020520/bin:/Users/williammartin/go/pkg/mod/golang.org/[email protected]/bin:/Users/williammartin/.local/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin:/Users/williammartin/.local/bin
        GOTRACEBACK=system
        HOME=$WORK
        TMPDIR=$WORK/.tmp
        devnull=/dev/null
        /=/
        :=:
        $=$
        exe=
        SCRIPT_NAME=release_create
        GH_CONFIG_DIR=$WORK
        GH_HOST=github.com
        ORG=gh-acceptance-testing
        GH_TOKEN=gho_************************************
        RANDOM_STRING=NLfizmpwCD
        GH_TELEMETRY=false
        
        # Create a repository with a file so it has a default branch (2.657s)
        > exec gh repo create $ORG/$SCRIPT_NAME-$RANDOM_STRING --add-readme --private
        [stdout]
        https://github.com/gh-acceptance-testing/release_create-NLfizmpwCD
        # Defer repo cleanup (0.000s)
        > defer gh repo delete --yes $ORG/$SCRIPT_NAME-$RANDOM_STRING
        # Clone the repo (1.550s)
        > exec gh repo clone $ORG/$SCRIPT_NAME-$RANDOM_STRING
        [stderr]
        Cloning into 'release_create-NLfizmpwCD'...
        # Create a release in the repo (0.855s)
        > cd $SCRIPT_NAME-$RANDOM_STRING
        $WORK/release_create-NLfizmpwCD
        > exec gh release create v1.2.3 --notes 'awesome release' --latest
        [stdout]
        https://github.com/gh-acceptance-testing/release_create-NLfizmpwCD/releases/tag/v1.2.3
        PASS
        
=== NAME  TestReleases/release-list
    testscript.go:584: WORK=$WORK
        PATH=/var/folders/z7/869nt6ns29d77xln9h9bm8680000gn/T/testscript-main2967020520/bin:/Users/williammartin/go/pkg/mod/golang.org/[email protected]/bin:/Users/williammartin/.local/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin:/Users/williammartin/.local/bin
        GOTRACEBACK=system
        HOME=$WORK
        TMPDIR=$WORK/.tmp
        devnull=/dev/null
        /=/
        :=:
        $=$
        exe=
        SCRIPT_NAME=release_list
        GH_CONFIG_DIR=$WORK
        GH_HOST=github.com
        ORG=gh-acceptance-testing
        GH_TOKEN=gho_************************************
        RANDOM_STRING=CAoShJAykT
        GH_TELEMETRY=false
        
        # Create a repository with a file so it has a default branch (2.862s)
        > exec gh repo create $ORG/$SCRIPT_NAME-$RANDOM_STRING --add-readme --private
        [stdout]
        https://github.com/gh-acceptance-testing/release_list-CAoShJAykT
        # Defer repo cleanup (0.000s)
        > defer gh repo delete --yes $ORG/$SCRIPT_NAME-$RANDOM_STRING
        # Clone the repo (1.355s)
        > exec gh repo clone $ORG/$SCRIPT_NAME-$RANDOM_STRING
        [stderr]
        Cloning into 'release_list-CAoShJAykT'...
        # Create a release in the repo (0.844s)
        > cd $SCRIPT_NAME-$RANDOM_STRING
        $WORK/release_list-CAoShJAykT
        > exec gh release create v1.2.3 --notes 'awesome release' --latest
        [stdout]
        https://github.com/gh-acceptance-testing/release_list-CAoShJAykT/releases/tag/v1.2.3
        # List the releases (0.808s)
        > exec gh release list
        [stdout]
        v1.2.3  Latest  v1.2.3  2026-08-04T11:53:54Z
        > stdout 'v1.2.3'
        PASS
        
=== NAME  TestReleases/release-view
    testscript.go:584: WORK=$WORK
        PATH=/var/folders/z7/869nt6ns29d77xln9h9bm8680000gn/T/testscript-main2967020520/bin:/Users/williammartin/go/pkg/mod/golang.org/[email protected]/bin:/Users/williammartin/.local/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin:/Users/williammartin/.local/bin
        GOTRACEBACK=system
        HOME=$WORK
        TMPDIR=$WORK/.tmp
        devnull=/dev/null
        /=/
        :=:
        $=$
        exe=
        SCRIPT_NAME=release_view
        GH_CONFIG_DIR=$WORK
        GH_HOST=github.com
        ORG=gh-acceptance-testing
        GH_TOKEN=gho_************************************
        RANDOM_STRING=xuHwqkhcxc
        GH_TELEMETRY=false
        
        # Create a repository with a file so it has a default branch (3.407s)
        > exec gh repo create $ORG/$SCRIPT_NAME-$RANDOM_STRING --add-readme --private
        [stdout]
        https://github.com/gh-acceptance-testing/release_view-xuHwqkhcxc
        # Defer repo cleanup (0.000s)
        > defer gh repo delete --yes $ORG/$SCRIPT_NAME-$RANDOM_STRING
        # Clone the repo (1.323s)
        > exec gh repo clone $ORG/$SCRIPT_NAME-$RANDOM_STRING
        [stderr]
        Cloning into 'release_view-xuHwqkhcxc'...
        # Create a release in the repo (0.864s)
        > cd $SCRIPT_NAME-$RANDOM_STRING
        $WORK/release_view-xuHwqkhcxc
        > exec gh release create v1.2.3 --notes 'awesome release' --latest
        [stdout]
        https://github.com/gh-acceptance-testing/release_view-xuHwqkhcxc/releases/tag/v1.2.3
        # View the release (0.370s)
        > exec gh release view v1.2.3
        [stdout]
        title:
        tag:    v1.2.3
        draft:  false
        prerelease:     false
        immutable:      false
        author: williammartin
        created:        2026-08-04T11:53:52Z
        published:      2026-08-04T11:53:55Z
        url:    https://github.com/gh-acceptance-testing/release_view-xuHwqkhcxc/releases/tag/v1.2.3
        --
        awesome release
        > stdout 'v1.2.3'
        PASS
        
=== NAME  TestReleases/release-upload-download
    testscript.go:584: WORK=$WORK
        PATH=/var/folders/z7/869nt6ns29d77xln9h9bm8680000gn/T/testscript-main2967020520/bin:/Users/williammartin/go/pkg/mod/golang.org/[email protected]/bin:/Users/williammartin/.local/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin:/Users/williammartin/.local/bin
        GOTRACEBACK=system
        HOME=$WORK
        TMPDIR=$WORK/.tmp
        devnull=/dev/null
        /=/
        :=:
        $=$
        exe=
        SCRIPT_NAME=release_upload_download
        GH_CONFIG_DIR=$WORK
        GH_HOST=github.com
        ORG=gh-acceptance-testing
        GH_TOKEN=gho_************************************
        RANDOM_STRING=dZeeFMqCZT
        GH_TELEMETRY=false
        
        # Create a repository with a file so it has a default branch (3.082s)
        > exec gh repo create $ORG/$SCRIPT_NAME-$RANDOM_STRING --add-readme --private
        [stdout]
        https://github.com/gh-acceptance-testing/release_upload_download-dZeeFMqCZT
        # Defer repo cleanup (0.000s)
        > defer gh repo delete --yes $ORG/$SCRIPT_NAME-$RANDOM_STRING
        # Clone the repo (1.323s)
        > exec gh repo clone $ORG/$SCRIPT_NAME-$RANDOM_STRING
        [stderr]
        Cloning into 'release_upload_download-dZeeFMqCZT'...
        # Create a release in the repo (1.087s)
        > cd $SCRIPT_NAME-$RANDOM_STRING
        $WORK/release_upload_download-dZeeFMqCZT
        > exec gh release create v1.2.3 --notes 'awesome release' --latest
        [stdout]
        https://github.com/gh-acceptance-testing/release_upload_download-dZeeFMqCZT/releases/tag/v1.2.3
        # Upload an asset to the release (1.105s)
        > exec gh release upload v1.2.3 ../asset.txt
        # Download the asset from the release (0.732s)
        > exec gh release download v1.2.3
        > exists asset.txt
        # Download the asset in archive form (0.905s)
        > exec gh release download v1.2.3 --archive=zip
        > exists $SCRIPT_NAME-$RANDOM_STRING-1.2.3.zip
        PASS
        
--- PASS: TestReleases (0.00s)
    --- PASS: TestReleases/release-create (5.64s)
    --- PASS: TestReleases/release-list (6.44s)
    --- PASS: TestReleases/release-view (6.45s)
    --- PASS: TestReleases/release-upload-download (8.76s)
PASS
ok      github.com/cli/cli/v2/acceptance        9.392s

Notes

This is a stacked PR. It targets #14059.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 migrates the gh release create command’s REST API interactions from manual http.Client request/response handling to api.Client.REST, aligning with the broader effort to consolidate API usage behind the shared client abstraction.

Changes:

  • Switched getTags, generateReleaseNotes, createRelease, publishRelease, and deleteRelease to use api.NewClientFromHTTP(httpClient).REST(...) with safe, relative REST paths.
  • Kept publishedReleaseExists on raw http.Client due to HEAD response semantics (no body) vs api.Client.REST JSON decoding expectations.
  • Added a new http_test.go file to cover the error paths of the migrated functions, and updated call sites to pass host where needed.
Show a summary per file
File Description
pkg/cmd/release/create/http.go Migrates release-create REST calls to api.Client.REST, adjusts URL building and error handling accordingly.
pkg/cmd/release/create/http_test.go Adds focused tests for HTTP error paths and special-case handling after the migration.
pkg/cmd/release/create/create.go Updates internal call sites to match the new publishRelease/deleteRelease signatures (host parameter).

Review details

Tip

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

  • Files reviewed: 3/3 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment thread pkg/cmd/release/create/http.go
@williammartin
williammartin marked this pull request as ready for review August 4, 2026 13:37
@williammartin
williammartin requested a review from a team as a code owner August 4, 2026 13:37
@williammartin
williammartin requested review from tidy-dev and removed request for a team August 4, 2026 13:37
Base automatically changed from williammartin-route-extension-http to trunk August 4, 2026 16:55
williammartin and others added 2 commits August 4, 2026 19:46
Co-authored-by: Copilot App <[email protected]>
Copilot-Session: 9f481d3c-b31f-4124-8261-4cd24e02c050
Co-authored-by: Copilot App <[email protected]>
Copilot-Session: 9f481d3c-b31f-4124-8261-4cd24e02c050
@williammartin
williammartin force-pushed the williammartin-wp-08-release-create branch from dce2d68 to f7e81cb Compare August 4, 2026 17:47
@williammartin
williammartin enabled auto-merge (squash) August 4, 2026 17:51
@williammartin
williammartin merged commit c6f4067 into trunk Aug 4, 2026
11 checks passed
@williammartin
williammartin deleted the williammartin-wp-08-release-create branch August 4, 2026 17:55
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Aug 21, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [cli/cli](https://github.com/cli/cli) | minor | `v2.97.0` → `v2.98.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.98.0`](https://github.com/cli/cli/releases/tag/v2.98.0): GitHub CLI 2.98.0

[Compare Source](cli/cli@v2.97.0...v2.98.0)

#### Security

A security vulnerability has been identified, and fixed, that binds the local forwarded port to all available network interfaces by default.

Users of `gh codespace ports forward` are advised to update `gh` to version `v2.98.0` as soon as possible.

For more information see: <GHSA-vfhh-p7hm-pxfh>

#### Support worktrees in `pr checkout`

Users can now checkout a pull request into a git worktree by using the new `--worktree PATH` flag in `gh pr checkout`:

```shell
gh pr checkout 12 --worktree ../wt-feature
```

#### Add semantic search to `search issues`

The `gh search issues` command now supports semantic search for issues. Users can select the search type by passing the `--search-type` flag:

```shell
gh search issues --search-type semantic ...

gh search issues --search-type hybrid ...
```

For more information about semantic search see: ["Improved Search for github issues is now generally available"](https://github.blog/changelog/2026-04-02-improved-search-for-github-issues-is-now-generally-available/).

#### What's Changed

##### ✨ Features

- Add --worktree flag to gh pr checkout by [@&#8203;tidy-dev](https://github.com/tidy-dev) in [#&#8203;13946](cli/cli#13946)
- Set GH\_EXTENSION=1 when gh invokes an extension by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14072](cli/cli#14072)
- Add --search-type flag for semantic and hybrid issue search by [@&#8203;michaeljacholke](https://github.com/michaeljacholke) in [#&#8203;14006](cli/cli#14006)

##### 🐛 Fixes

- Fix `RESTWithNext` error type, repairing `gh status` and attestation retries by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13988](cli/cli#13988)
- Trim spaces when parsing X-Oauth-Scopes in `gh release create` by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14065](cli/cli#14065)
- Fix project item-add output for non-TTY by [@&#8203;zwick](https://github.com/zwick) in [#&#8203;14056](cli/cli#14056)

##### 📚 Docs & Chores

- Slim down dependabot triage comments by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14019](cli/cli#14019)
- Require explicit MR review ownership by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14028](cli/cli#14028)
- Collapse spam triage into the agentic issue-triage workflow by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14027](cli/cli#14027)
- Run Dependabot triage every hour by [@&#8203;sergiou87](https://github.com/sergiou87) in [#&#8203;14030](cli/cli#14030)
- Route deploy key requests through api.Client by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13989](cli/cli#13989)
- Route ssh key requests through api.Client by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13994](cli/cli#13994)
- Route gpg key requests through api.Client by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13997](cli/cli#13997)
- Route autolink requests through api.Client by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14013](cli/cli#14013)
- Route extension requests through api.Client by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14059](cli/cli#14059)
- Route release creation through api.Client by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14062](cli/cli#14062)
- Tell agents to use the MR template in AGENTS.md by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14074](cli/cli#14074)
- Make Dependabot triage cheaper and more decisive by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14079](cli/cli#14079)
- Route release deletions through api.Client by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14077](cli/cli#14077)
- Give Dependabot triage a real reachability check by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14087](cli/cli#14087)
- Restore automatic spam issue closure by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14088](cli/cli#14088)
- Add a scheduled tech debt burndown skill by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14095](cli/cli#14095)
- Use reflect.Pointer instead of deprecated reflect.Ptr by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14098](cli/cli#14098)
- Clarify what belongs in the MR template's testing section by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14103](cli/cli#14103)
- Rename cli-code-reviewer skill to code-review by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;14116](cli/cli#14116)
- Add aw-actions group to dependabot configuration by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;14123](cli/cli#14123)
- Isolate tests from local machine's auth and git configuration by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;14128](cli/cli#14128)
- Don't ask for feature detection cleanup comments when not needed by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;14139](cli/cli#14139)
- Accept pre-release tags in deployment validation by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;14193](cli/cli#14193)
- ci: add temporary step to verify Linux repo signing keys by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;14202](cli/cli#14202)
- Revert "ci: add temporary step to verify Linux repo signing keys" by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;14203](cli/cli#14203)
- Fix issue triage action compatibility \[skip changelog] by [@&#8203;tidy-dev](https://github.com/tidy-dev) in [#&#8203;14207](cli/cli#14207)

##### :dependabot: Dependencies

- chore(deps): bump github.com/sigstore/sigstore-go from 1.2.2 to 1.3.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14047](cli/cli#14047)
- chore(deps): bump the codeql-actions group across 1 directory with 3 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14049](cli/cli#14049)
- chore(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14048](cli/cli#14048)
- chore(deps): bump github.com/google/go-containerregistry from 0.21.7 to 0.21.8 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14066](cli/cli#14066)
- chore(deps): bump actions/attest from 4.2.1 to 4.2.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14100](cli/cli#14100)
- chore(deps): bump azure/login from 3.0.0 to 3.0.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14101](cli/cli#14101)
- chore(deps): bump the codeql-actions group across 1 directory with 3 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14091](cli/cli#14091)
- chore(deps): bump github/gh-aw-actions/setup-cli from 0.83.4 to 0.85.4 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14068](cli/cli#14068)
- chore(deps): bump github.com/google/go-containerregistry from 0.21.8 to 0.21.9 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14119](cli/cli#14119)
- chore(deps): bump github.com/klauspost/compress from 1.19.1 to 1.19.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14120](cli/cli#14120)
- chore(deps): bump the aw-actions group with 2 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14147](cli/cli#14147)
- chore: sign APT repository with both keys by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;13271](cli/cli#13271)
- chore(deps): bump github.com/yuin/goldmark from 1.8.4 to 1.8.5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14029](cli/cli#14029)
- chore(deps): bump actions/attest from 4.2.0 to 4.2.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14050](cli/cli#14050)
- Bump golangci-lint in CI to v2.12.2 by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;14102](cli/cli#14102)
- chore(deps): bump the aw-actions group with 2 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14124](cli/cli#14124)
- chore(deps): bump google.golang.org/protobuf from 1.36.11 to 1.36.12 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14140](cli/cli#14140)
- Upgrade gh-aw workflows to v0.85.4 by [@&#8203;tidy-dev](https://github.com/tidy-dev) in [#&#8203;14141](cli/cli#14141)
- Bump Go to 1.26.6 by [@&#8203;github-actions](https://github.com/github-actions)\[bot] in [#&#8203;14143](cli/cli#14143)
- chore: bump go to 1.26.7 by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;14205](cli/cli#14205)
- chore(deps): bump github.com/stretchr/testify from 1.11.1 to 1.12.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14204](cli/cli#14204)
- chore(deps): bump the codeql-actions group across 1 directory with 3 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14169](cli/cli#14169)
- chore(deps): bump golang.org/x/crypto from 0.54.0 to 0.55.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14164](cli/cli#14164)
- chore(deps): bump charm.land/lipgloss/v2 from 2.0.5 to 2.0.6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;14166](cli/cli#14166)
- Bump gh-aw-actions to v0.87.1 and recompile agentic workflows by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;14210](cli/cli#14210)

#### New Contributors

- [@&#8203;sergiou87](https://github.com/sergiou87) made their first contribution in [#&#8203;14030](cli/cli#14030)
- [@&#8203;michaeljacholke](https://github.com/michaeljacholke) made their first contribution in [#&#8203;14006](cli/cli#14006)

**Full Changelog**: <cli/cli@v2.97.0...v2.98.0>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- 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 [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
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.

3 participants