8000 Introduce accessible prompter for screen readers (preview) by BagToad · Pull Request #10710 · cli/cli · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Introduce accessible prompter for screen readers (preview) #10710

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 49 commits into from
Apr 10, 2025

Conversation

BagToad
Copy link
Member
@BagToad BagToad commented Mar 31, 2025

Description

Implement charmbracelet/huh in accessible mode as an accessible prompter.

Acceptance Criteria

When I run gh environment
Then I see the GH_SCREENREADER_FRIENDLY env var documented and marked as experimental

Given I have GH_SCREENREADER_FRIENDLY set to any value other than 0 or false
When I run any gh command requiring prompting
Then the prompting experience provides a basic level of screenreader friendliness

Demo

Details

Demonstrating Confirmation
Are you sure?

Choose [y/N]: y
Chose: Yes

Confirmation: true
Demonstrating Text Input
Favorite meal? (Breakfast)

Input: lunch
Input: lunch
            
Favorite meal: lunch
Demonstrating Single Select
Favorite cuisine?
1. Italian
2. Greek
3. Indian
4. Japanese
5. American

Choose: 5
Chose: American
               
Favorite cuisine: American
Demonstrating Multi Select
Favorite cuisines?
1.   Italian
2.   Greek
3.   Indian
4.   Japanese
5.   American

Select up to 5 options. 0 to continue.
Select: 5
Selected: American

Favorite cuisines?
1.   Italian
2.   Greek
3.   Indian
4.   Japanese
5. ✓ American

Select up to 5 options. 0 to continue.
Select: 3
Selected: Indian

Favorite cuisines?
1.   Italian
2.   Greek
3. ✓ Indian
4.   Japanese
5. ✓ American

Select up to 5 options. 0 to continue.
Select: 1
Selected: Italian

Favorite cuisines?
1. ✓ Italian
2.   Greek
3. ✓ Indian
4.   Japanese
5. ✓ American

Select up to 5 options. 0 to continue.
Select: 0
Selected: Italian, Indian, American
                                   
Favorite cuisine: Italian
Favorite cuisine: Indian
Favorite cuisine: American
Favorite meal: lunch
Demonstrating Password Input (unmasked)
Safe word?

Input: stuff
Input: stuff
            
Safe word: stuff
Confirmation: true
Demonstrating Auth Token (can't be blank)
Paste your authentication token:

Input: blalbla
Input: blalbla
              
Auth token: blalbla
Demonstrating Deletion Confirmation
Type "delete-me" to confirm deletion

Input: delete-me
Input: delete-me
                
Item deleted
Demonstrating Hostname (must be valid hostname)
Hostname:

Input: github.com
Input: github.com
                 
Hostname: github.com
Demonstrating Markdown Editor with blanks allowed
Edit your text:
1. Open Editor: vim
2. Skip

Choose: 2
Chose: Skip
           
Edited text: 
Demonstrating Markdown Editor with blanks disallowed
Edit your text:
1. Open Editor: vim

Choose: 1
Chose: Open Editor: vim
                       
Edited text: Initial tex
8000
t

Notes

Review

Consider checking out and running #10745 for a quick demo :)

@BagToad BagToad temporarily deployed to cli-automation March 31, 2025 21:06 — with GitHub Actions Inactive
BagToad added 3 commits March 31, 2025 15:52
Accessible prompter now respects blankAllowed and
will not prompt for "skip" if blankAllowed is false.
Allow the accessible markdownEditor prompt to be blank when the blank
comes from the result of an interactive session with an editor, even when
blankAllowed is false.

This behavior aligns the accessible prompter with the behavior of the
current standard prompter.
t.Parallel() cannot be used when env vars are being set.
@shindere
Copy link
shindere commented Apr 2, 2025 via email

@williammartin
Copy link
Member

I was curious about what this PR does but I couln't see a description for it? Did I miss something maybe?

Firstly, this is in a draft state, which is why there is no description. You also haven't missed anything on our public issue tracker, but I'm glad you dropped by! One of our findings using screenreaders (and indicated by another screenreader user that consults with GitHub) was that the prompting experience right can be challenging to use because of the way it redraws the screen.

The goal here is to ship a prompting experience behind the GH_SCREENREADER_FRIENDLY environment variable that we can get feedback, and iterate on. We'll make sure there is a public place for discussion.

Well, if I may say, I find both namings a bit vague in the sense that they say what they would like to achieve rather than what they are effectively and precisely doing.

Thanks for the feedback. For the moment I think that this is fine, the goal is that this prompting experience is more friendly for screenreaders. The preciseness will be in the concrete implementation as opposed to the behavioural specification of the tests.

@shindere
Copy link
shindere commented Apr 2, 2025 via email

@williammartin
Copy link
Member

Even more so as there is nothing here like WCAG to guide design.

Haha yes, we're familiar with the challenge of no WCAG, as we, GitHub, and Microsoft have had to learn what it means to have different forms of accessibility in the terminal. I'm sure we still have a lot to learn.

Indeed, it feels to me here as if it is believed that there is one way to make something screenreader friendly. But I fear the reality is more complex: depending on whether you use speech synthesis or a braille display, also depending on the environment you work with (where environment means OS, framework and screenreader), your needs in terms
of accessibility and even your definition of what accessibility is may vary.

This is really fantastic insight thank you. I suppose in this case we are referring to a speech synthesis friendly prompting experience.

For example, a single select would read like:

Favorite cuisine?
1. Italian
2. Greek
3. Indian
4. Japanese
5. American

Choose: 2
Chose: Greek

A multi-select would read like:

Favorite cuisines?
1.   Italian
2.   Greek
3.   Indian
4.   Japanese
5.   American

Select up to 5 options. 0 to continue.
Select: 1
Selected: Italian

Favorite cuisines?
1. ✓ Italian
2.   Greek
3.   Indian
4.   Japanese
5.   American

Select up to 5 options. 0 to continue.
Select: 3
Selected: Indian

Favorite cuisines?
1. ✓ Italian
2.   Greek
3. ✓ Indian
4.   Japanese
5.   American

Select up to 5 options. 0 to continue.
Select: 0
Selected: Italian, Indian

An input would read like:

Favorite meal?

Input: pizza
Input: pizza

And so on. I'm sure there's a lot of room for improvement in the exact styles and text, but hopefully you understand the goal we're going for here in comparison to our current prompting experience (you can run gh auth login with no arguments for an example of a command with multiple prompts).

Do you think this would be best referred to as a Speech Synthesis Friendly Prompter?

Braille displays are definitely something we are less familiar with supporting. In that regard:

As a sidenote I'd definitely consider consulting.

I'll pass this information on to the accessibility team.

@shindere
Copy link
shindere commented Apr 2, 2025 via email

@williammartin
Copy link
Member

All very useful feedback thank you. We'll need to figure out a way to distil this conversation into some document, rather than just living on a PR.

Also: I completely understand that you'd like to experiment things, get feedback etc. without disturbing existing workflows and I find this both very kind and mindful so what I will say now only applies to an ideal, ultimate state of things.

At the end of the day, we're open to wherever our users lead us, even more so on this topic where we don't have the lived experience. As you say, in an ideal world, the out of the box experience is shared and accessible by default, and we have been doing work on various fronts towards that. Your surprise over the starting question mark is something we could look at addressing.

I guess what I would personally like for this prompter, as much as a geek than as a blind user, is configurability.

Makes sense to me. One of the challenges we have at the moment is that the current prompting library is deprecated. If you could wave a magic wand and have configurability for the prompts, what options would you like? Would it be useful if I produced a program that demonstrated each different type of prompt?

Food for thought on the configurability side, is where the boundary between "different prompting experience" and "configurable prompting experience is". I definitely appreciate your shared concerns though, will need to reflect on this. Currently this new prompting experience is going to live behind an experimental configuration so that we can make sure to get this right. If it turns out that "right" is getting rid of it, that's good to know.

Apart from that I find it works pretty well, especially the cursor is where the relevant information is, which, IMO, is nice.

That's nice to know. Just to be clear, were you using the braille reader, or speech synthesis?

One issue we discovered was that the selects in screen synthesis would often announce "blank" when moving between options.

@shindere
Copy link
shindere commented Apr 2, 2025 via email

@BagToad BagToad force-pushed the kw/first-pass-accessible-prompter branch from a1fd70b to 94bbd26 Compare April 2, 2025 18:56
@BagToad BagToad force-pushed the kw/first-pass-accessible-prompter branch 3 times, most recently from 262ce37 to a07c4aa Compare April 3, 2025 14:23
@BagToad BagToad force-pushed the kw/first-pass-accessible-prompter branch from a07c4aa to 8827803 Compare April 3, 2025 14:25
@BagToad BagToad requested a review from andyfeller April 9, 2025 14:26
@shindere
Copy link
shindere commented Apr 9, 2025 via email

@BagToad BagToad changed the title Introduce accessible prompter for speech synthesis screen readers (preview) Introduce accessible prompter for screen readers (preview) Apr 9, 2025
@BagToad BagToad force-pushed the kw/first-pass-accessible-prompter branch from efb6989 to 39fccf6 Compare April 9, 2025 21:39
@BagToad BagToad force-pushed the kw/first-pass-accessible-prompter branch from d7de8fb to 4615069 Compare April 9, 2025 21:51
Copy link
Member
@williammartin williammartin left a comment

Choose a reason for hiding this comment

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

Approving on the proviso that my comments are addressed as discussed on call.

@andyfeller
Copy link
Member

Thoughts

  1. gh prompts seem to use parenthesis in a couple different ways, unsure if confusing to others

    • (required) for required fields
    • (<VALUE>) for default values
  2. huh displays empty default value, could probably avoid showing this

    Description ()
     
    Input:
  3. huh has some inconsistent spacing around prompt and input

    • selects and multi-selects have no spacing after prompt

      What would you like to do?
      1. Create a new repository on GitHub from scratch
      3. Create a new repository on GitHub from a template repository
      4. Push an existing local repository to GitHub
      
      Choose: 
    • inputs have spacing after prompt

      Path to local repository (.)
      
      Input:
  4. huh validation error message might not be instructive enough for screen readers

    gh issue delete 151
    ! Deleted issues cannot be recovered.
    Type "151" to confirm deletion
     
    Input: 150
    You entered: "150"
    Input: 152
    You entered: "152"
    Input: 
    You entered: ""
    Input: ^C 

    versus current experience:

    gh issue delete 151
    ! Deleted issues cannot be recovered.
    X Sorry, your reply was invalid: You entered 150
    ? Type 151 to confirm deletion: 
  5. Markdown editor prompt shows an extra colon in the editor option, where is this coming from?

    Body
    1. Open Editor: 
    3. Skip

Demo

Prompter.AuthToken

  • Accessible experience

    gh-auth-login-accessible
    $ gh auth login
    Where do you use GitHub?
    1. GitHub.com
    4. Other
    
    Choose: 1
    Chose: GitHub.com
                     
    What is your preferred protocol for Git operations on this host?
    1. HTTPS
    4. SSH
    
    Choose: 1
    Chose: HTTPS
                
    How would you like to authenticate GitHub CLI?
    1. Login with a web browser
    2. Paste an authentication token
    
    Choose: 2
    Chose: Paste an authentication token
                                        
    Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
    The minimum required scopes are 'repo', 'read:org', 'workflow'.
    Paste your authentication token:
    
    Input: ghp_OBSCURED
    Input: ghp_OBSCURED
                                                   
    - gh config set -h github.com git_protocol https
    ✓ Configured git protocol
    ✓ Logged in as andyfeller
    ! You were already logged in to this account
  • Default experience

    gh-auth-login-default
    $ gh auth login
    ? Where do you use GitHub? GitHub.com
    ? What is your preferred protocol for Git operations on this host? HTTPS
    ? How would you like to authenticate GitHub CLI? Paste an authentication token
    Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
    The minimum required scopes are 'repo', 'read:org', 'workflow'.
    ? Paste your authentication token: ****************************************
    - gh config set -h github.com git_protocol https
    ✓ Configured git protocol
    ✓ Logged in as andyfeller
    ! You were already logged in to this account

Prompter.Confirm

  • Accessible experience

    gh-repo-create-accessible-2
    Add a remote?
    
    Choose [Y/n]: 
    Chose: Yes
  • Default experience

    gh-repo-create-default
    ? Add a remote? (Y/n) 

Prompter.ConfirmDeletion

  • Accessible experience

    gh-repo-delete-accessible
    $ gh repo delete
    Type "tinyfists/gh-demo-accessible" to confirm deletion
    
    Input: tinyfists/gh-demo-accessible
    Input: tinyfists/gh-demo-accessible
                                       
    ✓ Deleted repository tinyfists/gh-demo-accessible
  • Default experience

    gh-repo-delete-default
    $ gh repo delete    
    ? Type tinyfists/gh-demo-default to confirm deletion: tinyfists/gh-demo-default
    ✓ Deleted repository tinyfists/gh-demo-default

Prompter.InputHostname

  • Accessible experience

    gh-auth-login-host-accessible
    gh auth login
    Where do you use GitHub?
    1. GitHub.com
    2. Other
     
    Choose: 2
    Chose: Other
                 
    Hostname:
     
    Input: github.com
    Input: github.com
  • Default experience

    gh-auth-login-host-default
    gh auth login
    ? Where do you use GitHub? Other
    ? Hostname: github.com
    ? What is your preferred protocol for Git operations on this host?  [Use arrows to move, type to filter]
    > HTTPS
      SSH

Prompter.MarkdownEditor

  • Accessible experience

    gh-issue-create-accessible-1
    $ gh issue create
    
    Creating issue in tinyfists/issue-driven-github-admin
    
    Title (required) ()
    
    Input: Demonstration of accessible issue create
    Input: Demonstration of accessible issue create
                                                   
    Body
    1. Open Editor: 
    2. Skip
    
    Choose: 1
    Chose: Open Editor: 
                        
    What's next?
    1. Submit
    2. Continue in browser
    5. Add metadata
    6. Cancel
  • Default experience

    gh-issue-create-default-1
    $ gh issue create
    
    Creating issue in tinyfists/issue-driven-github-admin
    
    ? Title (required) Demo default issue create
    ? Body [(e) to launch vim, enter to skip] 

Prompter.MultiSelect

  • Accessible experience

    gh-issue-create-accessible-multiselect
    What would you like to add?
    1.   Assignees
    2.   Labels
    3.   Projects
    4.   Milestone
    
    Select up to 4 options. 0 to continue.
    Select: 1
    Selected: Assignees
    
    What would you like to add?
    1. ✓ Assignees
    2.   Labels
    3.   Projects
    4.   Milestone
    
    Select up to 4 options. 0 to continue.
    Select: 2
    Selected: Labels
    
    What would you like to add?
    1. ✓ Assignees
    2. ✓ Labels
    3.   Projects
    4.   Milestone
    
    Select up to 4 options. 0 to continue.
    Select: 0
    Selected: Assignees, Labels
  • Default experience

    gh-issue-create-default-multiselect
    $ gh issue create
    
    Creating issue in tinyfists/issue-driven-github-admin
    
    ? Title (required) Demo default issue create
    ? Body <Received>
    ? What's next? Add metadata
    ? What would you like to add?  [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
      [x]  Assignees
    > [x]  Labels
      [ ]  Projects
      [ ]  Milestone

Prompter.Select

  • Accessible experience

    gh-issue-create-accessible-1
    What's next?
    1. Submit
    2. Continue in browser
    3. Add metadata
    4. Cancel
    
    Choose: 3
    Chose: Add metadata
  • Default experience

    gh-issue-create-default-1
    ? What's next?  [Use arrows to move, type to filter]
    > Submit
      Continue in browser
      Add metadata
      Cancel
    ? What's next? Add metadata
    ? What would you like to add?  [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
    > [ ]  Assignees
      [ ]  Labels
      [ ]  Projects
      [ ]  Milestone

Comment on lines 238 to 240
options := []huh.Option[string]{
huh.NewOption(fmt.Sprintf("Open Editor: %s", p.editorCmd), openOption),
}
Copy link
Member
@andyfeller andyfeller Apr 10, 2025

Choose a reason for hiding this comment

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

I don't know if p.editorCmd always has a value, which results in the Open Editor having no editor listed:

$ echo $EDITOR
vim

$ gh config get editor

$ gh issue create

Creating issue in tinyfists/issue-driven-github-admin

Title (required) ()

Input: This is just a title
Input: This is just a title
                           
Body
1. Open Editor: 
2. Skip

Choose: 

versus the current experience:

$ gh issue create

Creating issue in tinyfists/issue-driven-github-admin

? Title (required) Demo default issue create
? Body [(e) to launch vim, enter to skip] 

How does this work today?

Currently, gh has relied upon go-survey to prompt the user whether to open the editor using the editor we have from either 1) configuration or 2) env var:

func edit(editorCommand, fn, initialValue string, stdin io.Reader, stdout io.Writer, stderr io.Writer, cursor showable, lookPath func(string) ([]string, []string, error)) (string, error) {
// prepare the temp file
pattern := fn
if pattern == "" {
pattern = "survey*.txt"
}
f, err := os.CreateTemp("", pattern)
if err != nil {
return "", err
}
defer os.Remove(f.Name())
// write utf8 BOM header if necessary for the current platform and/or locale
if needsBom() {
if _, err := f.Write(bom); err != nil {
return "", err
}
}
// write initial value
if _, err := f.WriteString(initialValue); err != nil {
return "", err
}
// close the fd to prevent the editor unable to save file
if err := f.Close(); err != nil {
return "", err
}
if editorCommand == "" {
editorCommand = defaultEditor
}

func init() {
if g := os.Getenv("GIT_EDITOR"); g != "" {
defaultEditor = g
} else if v := os.Getenv("VISUAL"); v != "" {
defaultEditor = v
} else if e := os.Getenv("EDITOR"); e != "" {
defaultEditor = e
} else if runtime.GOOS == "windows" {
defaultEditor = "notepad"
}
}

In the code above, gh is having to ask the user if they want to open the editor, however the logic for figuring out the editor is buried in the surveyext package after this code stanza.

What do we do to address this?

  1. Change the user experience by removing the editor name from the prompt
  2. Duplicate the logic for using the defaultEditor if the editor command is empty
  3. Refactor the logic for the default editor so other places can use it

Copy link
Member Author

Choose a reason for hiding this comment

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

Fixed in b8cd094

Copy link
Member
@andyfeller andyfeller left a comment

Choose a reason for hiding this comment

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

An astounding heavy lift to get this prompting experience! ✨

I think there are things we should follow up after this PR including additional UX testing in Linux and Windows, working with our friends at Charm, refactoring some logic to be testable, etc. I don't think there is anything to block this PR but we do have more work beyond this.

BagToad and others added 2 commits April 10, 2025 16:28
Apparently, `gh` might not actually have an editor at the time we're prompting
the user if they want to use it for markdown editing.  In the survey package,
there is a function that will handle fallback to the default editor based on
environment variables and parse it in the case the editor contains flags and
arguments for cases like Visual Studio Code.

Additionally, there are no tests for the EditorName function and the fact it
is loaded via `init` makes this difficult to test.

Co-authored-by: Kynan Ware <47394200+BagToad@users.noreply.github.com>
@BagToad BagToad force-pushed the kw/first-pass-accessible-prompter branch from fe78c17 to b8cd094 Compare April 10, 2025 22:29
This test was trying to block on `expect`’ing a string at the same
time the prompt was completed.

This doesn't need to happen for this test. It should just check for
the output from the Input prompt invocation.
@BagToad BagToad enabled auto-merge April 10, 2025 23:20
@BagToad BagToad merged commit dec71dd into trunk Apr 10, 2025
7 checks passed
@BagToad BagToad deleted the kw/first-pass-accessible-prompter branch April 10, 2025 23:28
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request May 10, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [cli/cli](https://github.com/cli/cli) | minor | `v2.69.0` -> `v2.72.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.72.0`](https://github.com/cli/cli/releases/tag/v2.72.0): GitHub CLI 2.72.0

[Compare Source](cli/cli@v2.71.2...v2.72.0)

#### :accessibility: Accessibility public preview

This release marks the public preview of several accessibility improvements to the GitHub CLI that have been under development over the past year in partnership with our friends at [Charm](https://github.com/charmbracelet) including:

-   customizable and contrasting colors
-   non-interactive user input prompting
-   text-based spinners

These new experiences are captured in a new `gh a11y` help topic command, which goes into greater detail into the motivation behind each of them as well as opt-in configuration settings / environment variables.

We would like you to share your feedback and join us on this journey through one of [GitHub Accessibility feedback channels](https://accessibility.github.com/feedback)! 🙌

#### What's Changed

##### ✨ Features

-   Introduce `gh accessibility` help topic highlighting GitHub CLI accessibility experiences by [@&#8203;andyfeller](https://github.com/andyfeller) in cli/cli#10890
-   \[gh pr view] Support `closingIssuesReferences` JSON field by [@&#8203;iamazeem](https://github.com/iamazeem) in cli/cli#10544

##### 🐛 Fixes

-   Fix expected error output of `TestRepo/repo-set-default` by [@&#8203;aconsuegra](https://github.com/aconsuegra) in cli/cli#10884
-   Ensure accessible password and auth token prompters disable echo mode by [@&#8203;andyfeller](https://github.com/andyfeller) in cli/cli#10885
-   Fix: Accessible multiselect prompt respects default selections by [@&#8203;BagToad](https://github.com/BagToad) in cli/cli#10901

#### New Contributors

-   [@&#8203;aconsuegra](https://github.com/aconsuegra) made their first contribution in cli/cli#10884

**Full Changelog**: cli/cli@v2.71.2...v2.72.0

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

[Compare Source](cli/cli@v2.71.1...v2.71.2)

#### What's Changed

-   Fix pr create when push.default tracking and no merge ref by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#10863

**Full Changelog**: cli/cli@v2.71.1...v2.71.2

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

[Compare Source](cli/cli@v2.71.0...v2.71.1)

#### What's Changed

-   Fix pr create when branch name contains slashes by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#10859

**Full Changelog**: cli/cli@v2.71.0...v2.71.1

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

[Compare Source](cli/cli@v2.70.0...v2.71.0)

#### What's Changed

##### ✨ Features

-   `gh pr create`: Support Git's `@{push}` revision syntax for determining head ref by [@&#8203;BagToad](https://github.com/BagToad) in cli/cli#10513
-   Introduce option to opt-out of spinners by [@&#8203;BagToad](https://github.com/BagToad) in cli/cli#10773
-   Update configuration support for accessible colors by [@&#8203;andyfeller](https://github.com/andyfeller) in cli/cli#10820
-   `gh config`: add config settings for accessible prompter and disabling spinner by [@&#8203;BagToad](https://github.com/BagToad) in cli/cli#10846

##### 🐛 Fixes

-   Fix multi pages search for gh search by [@&#8203;leudz](https://github.com/leudz) in cli/cli#10767
-   Fix: `project` commands use shared progress indicator by [@&#8203;BagToad](https://github.com/BagToad) in cli/cli#10817
-   Issue commands should parse args early by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#10811
-   Feature detect v1 projects on `issue view` by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#10813
-   Feature detect v1 projects on non web-mode `issue create` by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#10815
-   Feature detect v1 projects on web mode issue create by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#10818
-   Feature detect v1 projects on issue edit by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#10819

##### 📚 Docs & Chores

-   Refactor Sigstore verifier logic by [@&#8203;malancas](https://github.com/malancas) in cli/cli#10750

##### :dependabot: Dependencies

-   chore(deps): bump github.com/sigstore/sigstore-go from 0.7.1 to 0.7.2 by [@&#8203;dependabot](https://github.com/dependabot) in cli/cli#10787
-   Bump google.golang.org/grpc from 1.71.0 to 1.71.1 by [@&#8203;dependabot](https://github.com/dependabot) in cli/cli#10758

#### New Contributors

-   [@&#8203;leudz](https://github.com/leudz) made their first contribution in cli/cli#10767

**Full Changelog**: cli/cli@v2.70.0...v2.71.0

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

[Compare Source](cli/cli@v2.69.0...v2.70.0)

#### Accessibility

This release contains dark shipped changes that are part of a larger GitHub CLI accessibility preview still under development.  More information about these will be announced later this month including various channels to work with GitHub and GitHub CLI maintainers on shaping these experiences.

##### Ensure table headers are thematically contrasting

[#&#8203;8292](cli/cli#8292) is a long time issue where table headers were difficult to see in terminals with light background.  Ahead of the aforementioned preview, `v2.70.0` has shipped changes that improve the out-of-the-box experience based on terminal background detection.

The following screenshots demonstrate the Mac Terminal using the Basic profile, which responds to user's appearance preferences:

<img width="1512" alt="Screenshot of gh repo list in light background terminal" src="https://github.com/user-attachments/assets/87413dde-eec8-43eb-9c16-dc84f8249ddf" />

<img width="1512" alt="Screenshot of gh repo list in dark background terminal" src="https://github.com/user-attachments/assets/7430b42c-7267-402b-b565-a296beb4d5ea" />

For more information including demos from various official distributions, see [#&#8203;10649](cli/cli#10649).

#### What's Changed

##### ✨ Features

-   Update go-gh and document available sprig funcs by [@&#8203;BagToad](https://github.com/BagToad) in cli/cli#10680
-   Introducing experimental support for rendering markdown with customizable, accessible colors by [@&#8203;andyfeller](https://github.com/andyfeller) [@&#8203;jtmcg](https://github.com/jtmcg) in cli/cli#10680
-   Ensure table datetime columns have thematic, customizable muted text by [@&#8203;andyfeller](https://github.com/andyfeller) in cli/cli#10709
-   Ensure table headers are thematically contrasting by [@&#8203;andyfeller](https://github.com/andyfeller) in cli/cli#10649
-   Introduce configuration setting for displaying issue and pull request labels in rich truecolor by [@&#8203;andyfeller](https://github.com/andyfeller) in cli/cli#10720
-   Ensure muted text is thematic and customizable by [@&#8203;andyfeller](https://github.com/andyfeller) in cli/cli#10737
-   
9727
\[gh repo create] Show host name in repo creation prompts by [@&#8203;iamazeem](https://github.com/iamazeem) in cli/cli#10516
-   Introduce accessible prompter for screen readers (preview) by [@&#8203;BagToad](https://github.com/BagToad) in cli/cli#10710

##### 🐛 Fixes

-   `run list`: do not fail on organization/enterprise ruleset imposed workflows by [@&#8203;BagToad](https://github.com/BagToad) in cli/cli#10660
-   Implement safeguard for `gh alias delete` test, prevent wiping out GitHub CLI configuration by [@&#8203;andyfeller](https://github.com/andyfeller) in cli/cli#10683
-   Pin third party actions to commit sha by [@&#8203;BagToad](https://github.com/BagToad) in cli/cli#10731
-   Fallback to job run logs when step logs are missing by [@&#8203;babakks](https://github.com/babakks) in cli/cli#10740
-   \[gh ext] Fix `GitKind` extension directory path by [@&#8203;iamazeem](https://github.com/iamazeem) in cli/cli#10609
-   Fix job log resolution to skip legacy logs in favour of normal/new ones by [@&#8203;babakks](https://github.com/babakks) in cli/cli#10769

##### 📚 Docs & Chores

-   `./script/sign` cleanup by [@&#8203;iamazeem](https://github.com/iamazeem) in cli/cli#10599
-   Fix typos in CONTRIBUTING.md by [@&#8203;rylwin](https://github.com/rylwin) in cli/cli#10657
-   Improve `gh at verify --help`, document json output by [@&#8203;phillmv](https://github.com/phillmv) in cli/cli#10685
-   Acceptance test issue/pr create/edit with project by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#10707
-   Escape dots in regexp pattern in `README.md` by [@&#8203;babakks](https://github.com/babakks) in cli/cli#10742
-   Simplify cosign verification example by not using a regex. by [@&#8203;kommendorkapten](https://github.com/kommendorkapten) in cli/cli#10759
-   Document UNKNOWN STEP in run view by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#10770

##### :dependabot: Dependencies

-   Update github.com/sigstore/sigstore-go to 0.7.1 and fix breaking function change by [@&#8203;malancas](https://github.com/malancas) in cli/cli#10749

#### New Contributors

-   [@&#8203;rylwin](https://github.com/rylwin) made their first contribution in cli/cli#10657

**Full Changelog**: cli/cli@v2.69.0...v2.70.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:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNTkuMCIsInVwZGF0ZWRJblZlciI6IjM5LjI2NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
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.

4 participants
0