Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ead34e1
chore(deps): bump azure/login from 2.3.0 to 3.0.0
dependabot[bot] Mar 17, 2026
c255e77
chore(deps): bump mislav/bump-homebrew-formula-action from 3.6 to 4.1
dependabot[bot] Mar 23, 2026
dd1a368
chore(deps): bump microsoft/setup-msbuild from 2.0.0 to 3.0.0
dependabot[bot] Mar 23, 2026
6666850
fix(acceptance): set git identity in testscript sandbox
BagToad Mar 25, 2026
be4960a
test(acceptance): remove run-download-traversal test
BagToad Mar 25, 2026
5ed8cf0
fix(pr view): fetch nameWithOwner in headRepository GraphQL query
BagToad Mar 25, 2026
971be97
Add nameWithOwner to necessary tests
williammartin Mar 26, 2026
39407e6
Merge pull request #13037 from cli/kw/acceptance-test-git-config
williammartin Mar 26, 2026
3460080
Merge pull request #13005 from cli/dependabot/github_actions/microsof…
williammartin Mar 26, 2026
c61b160
Merge pull request #13004 from cli/dependabot/github_actions/mislav/b…
williammartin Mar 26, 2026
afe0adf
Merge pull request #12951 from cli/dependabot/github_actions/azure/lo…
williammartin Mar 26, 2026
87426ee
Add experimental huh-only prompter gated by GH_EXPERIMENTAL_PROMPTER
BagToad Mar 7, 2026
726714d
Use LayoutStack for huhPrompter MultiSelectWithSearch
BagToad Mar 7, 2026
4661c05
Fix gofmt alignment for prompter-enabled fields in IOStreams
BagToad Mar 7, 2026
f294831
Upgrade to huh/v2 and fix selection persistence in MultiSelectWithSearch
BagToad Mar 19, 2026
86d876f
test(huh prompter): add table-driven tests for all prompt types
BagToad Mar 19, 2026
4d74e05
refactor(huh prompter): pipe-based test harness with full coverage
BagToad Mar 19, 2026
95a59f4
fix(accessible prompter): update test expectations for huh v2
BagToad Mar 19, 2026
38e10d5
fix(huh prompter): use synchronized accessors to eliminate data race
BagToad Mar 19, 2026
f38abbe
feat(huh prompter): add placeholder to search input
BagToad Mar 19, 2026
cfb2224
refactor(huh prompter): custom Field for MultiSelectWithSearch
BagToad Mar 19, 2026
13e47d0
feat(huh prompter): clear search input after submitting query
BagToad Mar 19, 2026
f92fab6
go mod tidy
BagToad Mar 19, 2026
84a3ba8
fix(huh prompter): remove unused fields and imports
BagToad Mar 20, 2026
cb2b505
Ensure huh prompter cleans up
williammartin Mar 26, 2026
b626711
Merge pull request #12859 from cli/kw/experimental-huh-prompter
williammartin Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/deployment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ jobs:
run: git tag "$TAG_NAME"
- name: Authenticate to Azure for code signing
if: inputs.environment == 'production'
uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
uses: azure/login@532459ea530d8321f2fb9bb10d1e0bcf23869a43 # v3.0.0
with:
client-id: ${{ secrets.SPN_GITHUB_CLI_SIGNING_CLIENT_ID }}
tenant-id: ${{ secrets.SPN_GITHUB_CLI_SIGNING_TENANT_ID }}
Expand All @@ -226,7 +226,7 @@ jobs:
run: script/release --local "$TAG_NAME" --platform windows
- name: Set up MSBuild
id: setupmsbuild
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce
uses: microsoft/setup-msbuild@30375c66a4eea26614e0d39710365f22f8b0af57
- name: Build MSI
shell: bash
env:
Expand Down Expand Up @@ -414,7 +414,7 @@ jobs:
git diff --name-status @{upstream}..
fi
- name: Bump homebrew-core formula
uses: mislav/bump-homebrew-formula-action@56a283fa15557e9abaa4bdb63b8212abc68e655c
uses: mislav/bump-homebrew-formula-action@ccf2332299a883f6af50a1d2d41e5df7904dd769
if: inputs.environment == 'production' && !contains(inputs.tag_name, '-')
with:
formula-name: gh
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/homebrew-bump.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Bump homebrew-core formula
uses: mislav/bump-homebrew-formula-action@56a283fa15557e9abaa4bdb63b8212abc68e655c
uses: mislav/bump-homebrew-formula-action@ccf2332299a883f6af50a1d2d41e5df7904dd769
if: inputs.environment == 'production' && !contains(inputs.tag_name, '-')
with:
formula-name: gh
Expand Down
15 changes: 15 additions & 0 deletions acceptance/acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"fmt"
"os"
"path"
"path/filepath"
"strconv"
"strings"
"testing"
Expand All @@ -15,6 +16,7 @@ import (

"github.com/cli/cli/v2/internal/ghcmd"
"github.com/cli/go-internal/testscript"
"github.com/MakeNowJust/heredoc"
)

func ghMain() int {
Expand Down Expand Up @@ -224,6 +226,19 @@ func sharedSetup(tsEnv testScriptEnv) func(ts *testscript.Env) error {

ts.Setenv("RANDOM_STRING", randomString(10))

// The sandbox overrides HOME, so git cannot find the user's global
// config. Write a minimal identity so commits inside the sandbox
// don't fail with "Author identity unknown".
gitCfg := filepath.Join(ts.Cd, ".gitconfig")
gitCfgContent := heredoc.Doc(`
[user]
name = GitHub CLI Acceptance Test Runner
email = cli-acceptance-test-runner@github.com
`)
if err := os.WriteFile(gitCfg, []byte(gitCfgContent), 0o644); err != nil {
return fmt.Errorf("writing sandbox .gitconfig: %w", err)
}

ts.Values[keyT] = ts.T()
return nil
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ stdout https://${GH_HOST}/${ORG}/${REPO}/pull/1

# Check the PR is indeed created
exec gh pr view ${USER}:feature/branch --json headRefName,headRepository,baseRefName,isCrossRepository
stdout {"baseRefName":"main","headRefName":"feature/branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}"},"isCrossRepository":true}
stdout {"baseRefName":"main","headRefName":"feature/branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}","nameWithOwner":"${USER}/${FORK}"},"isCrossRepository":true}
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,4 @@ stdout https://${GH_HOST}/${ORG}/${REPO}/pull/1

# Check the PR is indeed created
exec gh pr view ${USER}:feature-branch --json headRefName,headRepository,baseRefName,isCrossRepository
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}"},"isCrossRepository":true}
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}","nameWithOwner":"${USER}/${FORK}"},"isCrossRepository":true}
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ stdout https://${GH_HOST}/${ORG}/${REPO}/pull/1

# Assert that the PR was created with the correct head repository and refs
exec gh pr view --json headRefName,headRepository,baseRefName,isCrossRepository
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}"},"isCrossRepository":true}
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}","nameWithOwner":"${USER}/${FORK}"},"isCrossRepository":true}
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,4 @@ stdout https://${GH_HOST}/${ORG}/${REPO}/pull/1

# Assert that the PR was created with the correct head repository and refs
exec gh pr view --json headRefName,headRepository,baseRefName,isCrossRepository
stdout {"baseRefName":"main","headRefName":"feature/branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}"},"isCrossRepository":true}
stdout {"baseRefName":"main","headRefName":"feature/branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}","nameWithOwner":"${USER}/${FORK}"},"isCrossRepository":true}
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,4 @@ stdout https://${GH_HOST}/${ORG}/${REPO}/pull/1

# Assert that the PR was created with the correct head repository and refs
exec gh pr view --json headRefName,headRepository,baseRefName,isCrossRepository
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}"},"isCrossRepository":true}
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}","nameWithOwner":"${USER}/${FORK}"},"isCrossRepository":true}
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@ stdout https://${GH_HOST}/${ORG}/${REPO}/pull/1

# Assert that the PR was created with the correct head repository and refs
exec gh pr view --json headRefName,headRepository,baseRefName,isCrossRepository
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}"},"isCrossRepository":true}
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}","nameWithOwner":"${USER}/${FORK}"},"isCrossRepository":true}
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,4 @@ stdout https://${GH_HOST}/${ORG}/${REPO}/pull/1

# Assert that the PR was created with the correct head repository and refs
exec gh pr view --json headRefName,headRepository,baseRefName,isCrossRepository
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}"},"isCrossRepository":true}
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}","nameWithOwner":"${USER}/${FORK}"},"isCrossRepository":true}
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ stdout https://${GH_HOST}/${ORG}/${REPO}/pull/1

# Assert that the PR was created with the correct head repository and refs
exec gh pr view --json headRefName,headRepository,baseRefName,isCrossRepository
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${REPO_ID}","name":"${REPO}"},"isCrossRepository":false}
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${REPO_ID}","name":"${REPO}","nameWithOwner":"${ORG}/${REPO}"},"isCrossRepository":false}
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,4 @@ stdout https://${GH_HOST}/${ORG}/${REPO}/pull/1

# Assert that the PR was created with the correct head repository and refs
exec gh pr view ${USER}:feature-branch --json headRefName,headRepository,baseRefName,isCrossRepository
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}"},"isCrossRepository":true}
stdout {"baseRefName":"main","headRefName":"feature-branch","headRepository":{"id":"${FORK_ID}","name":"${FORK}","nameWithOwner":"${USER}/${FORK}"},"isCrossRepository":true}
71 changes: 0 additions & 71 deletions acceptance/testdata/workflow/run-download-traversal.txtar

This file was deleted.

2 changes: 1 addition & 1 deletion api/query_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ func IssueGraphQL(fields []string) string {
case "headRepositoryOwner":
q = append(q, `headRepositoryOwner{id,login,...on User{name}}`)
case "headRepository":
q = append(q, `headRepository{id,name}`)
q = append(q, `headRepository{id,name,nameWithOwner}`)
case "assignees":
q = append(q, `assignees(first:100){nodes{id,login,name,databaseId},totalCount}`)
case "assignedActors":
Expand Down
26 changes: 15 additions & 11 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ module github.com/cli/cli/v2
go 1.26.1

require (
charm.land/bubbles/v2 v2.0.0
charm.land/bubbletea/v2 v2.0.2
charm.land/huh/v2 v2.0.3
charm.land/lipgloss/v2 v2.0.2
github.com/AlecAivazis/survey/v2 v2.3.7
github.com/MakeNowJust/heredoc v1.0.0
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2
Expand All @@ -11,7 +15,6 @@ require (
github.com/cenkalti/backoff/v4 v4.3.0
github.com/cenkalti/backoff/v5 v5.0.3
github.com/charmbracelet/glamour v0.10.0
github.com/charmbracelet/huh v0.8.0
github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834
github.com/cli/go-gh/v2 v2.13.0
github.com/cli/go-internal v0.0.0-20241025142207-6c48bcd5ce24
Expand Down Expand Up @@ -72,16 +75,20 @@ require (
github.com/blang/semver v3.5.1+incompatible // indirect
github.com/catppuccin/go v0.3.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 // indirect
github.com/charmbracelet/bubbletea v1.3.10 // indirect
github.com/charmbracelet/colorprofile v0.3.1 // indirect
github.com/charmbracelet/x/ansi v0.10.2 // indirect
github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
github.com/charmbracelet/colorprofile v0.4.2 // indirect
github.com/charmbracelet/ultraviolet v0.0.0-20260205113103-524a6607adb8 // indirect
github.com/charmbracelet/x/ansi v0.11.6 // indirect
github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
github.com/charmbracelet/x/exp/ordered v0.1.0 // indirect
github.com/charmbracelet/x/exp/slice v0.0.0-20250630141444-821143405392 // indirect
github.com/charmbracelet/x/exp/strings v0.0.0-20250630141444-821143405392 // indirect
github.com/charmbracelet/x/term v0.2.1 // indirect
github.com/charmbracelet/x/term v0.2.2 // indirect
github.com/charmbracelet/x/termios v0.1.1 // indirect
github.com/charmbracelet/x/windows v0.2.2 // indirect
github.com/cli/browser v1.3.0 // indirect
github.com/cli/shurcooL-graphql v0.0.4 // indirect
github.com/clipperhouse/displaywidth v0.11.0 // indirect
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
github.com/containerd/stargz-snapshotter/estargz v0.18.2 // indirect
github.com/cyberphone/json-canonicalization v0.0.0-20241213102144-19d51d7fe467 // indirect
github.com/danieljoos/wincred v1.2.3 // indirect
Expand All @@ -92,7 +99,6 @@ require (
github.com/docker/distribution v2.8.3+incompatible // indirect
github.com/docker/docker-credential-helpers v0.9.3 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/gdamore/encoding v1.0.1 // indirect
github.com/go-logr/logr v1.4.3 // indirect
Expand Down Expand Up @@ -134,14 +140,12 @@ require (
github.com/jedisct1/go-minisign v0.0.0-20241212093149-d2f9f49435c7 // indirect
github.com/klauspost/compress v1.18.4 // indirect
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
github.com/mattn/go-localereader v0.0.1 // indirect
github.com/mattn/go-runewidth v0.0.17 // indirect
github.com/mattn/go-runewidth v0.0.20 // indirect
github.com/microcosm-cc/bluemonday v1.0.27 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
github.com/muesli/cancelreader v0.2.2 // indirect
github.com/muesli/reflow v0.3.0 // indirect
github.com/muesli/termenv v0.16.0 // indirect
Expand Down
Loading
Loading