Skip to content
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

Add headers to all tables #8157

Merged
merged 8 commits into from
Oct 20, 2023
Merged

Add headers to all tables #8157

merged 8 commits into from
Oct 20, 2023

Conversation

heaths
Copy link
Contributor

@heaths heaths commented Oct 10, 2023

Resolves #8090

@heaths heaths requested review from a team as code owners October 10, 2023 07:46
@heaths heaths requested review from williammartin and removed request for a team October 10, 2023 07:46
@cliAutomation cliAutomation added the external pull request originating outside of the CLI core team label Oct 10, 2023
@cliAutomation cliAutomation added this to Needs review 🤔 in The GitHub CLI Oct 10, 2023
@heaths
Copy link
Contributor Author

heaths commented Oct 10, 2023

/cc @samcoe

@williammartin
Copy link
Member

Adding @samcoe as a reviewer since this has a far larger breadth than I am comfortable giving a stamp for. I'll do a review regardless to ensure I'm learning though.

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.

Thanks a lot for taking on this task @heaths. I especially appreciate being able to easily look through all the test updates.

I only have one real concern about this and that's the runtime error. I think it makes sense to try and enforce headers going forward but I think I'd rather lean on a compile time enforcement where possible. I don't have much experience with the table printing, so I hold this opinion lightly.

I created a commit that requires maintainers on construction of the table to provide headers (or explicitly opt out in some cases, as you have allowed for in your PR). It's pretty gross since it had to touch every tableprinter instantiation but you should get the idea pretty quickly by looking for tableprinter.WithHeaders and tableprinter.NoHeader. Because go has nil there's no way to prevent nil being passed but at least you really, really have to be intentional about doing that.

In one case I also moved some code around to see whether enforcement at instantiation time had any effects on pushing conditionals "up the stack". Jury is out. It's not that important.

In some other cases this forced instantiation of the tableprinter to be next to its usage point, since it could no longer be injected without headers. I consider this a positive. It makes it clear that nothing else is happening with the table printer which is easier to hold in the head.

Let me know your thoughts, cheers.

@heaths
Copy link
Contributor Author

heaths commented Oct 10, 2023

That's still optional, though. The idea is to force it unless NoHeaders was passed, which should require additional scrutiny in subsequent PRs. I added that late because in a couple places like gh status headers seemed like a worse UX. As for baking headers into the WithOptions pattern, I think that's fine and can make that change.

If there was an easy way to add linters in a repo, I'd be all for it. The hope here was that it'd fail tests, since tests should be added for new code.

@heaths
Copy link
Contributor Author

heaths commented Oct 10, 2023

Maybe instead, headers could be required and have a new constructor that creates it without headers - without using the WithOptions pattern.

@williammartin
Copy link
Member

williammartin commented Oct 10, 2023

Maybe instead, headers could be required and have a new constructor that creates it without headers - without using the WithOptions pattern.

I think you're actually kind of describing the same goal with this? I'm not using the variadic form of the functional options pattern so it's not possible to opt out unintentionally. tableprinter.New(ios) will produce a compile error. The tradeoff is that in my commit tableprinter.New(ios, nil) would not result in any runtime error.

I would expect tableprinter.New(ios, nil) and tableprinter.New(ios, tableprinter.NoHeaders) to both result in additional scrutiny as you said. Perhaps it makes sense to make nil a runtime error that would be caught in the tests while still preserving the additional compile time safety of the rest?

@williammartin
Copy link
Member

williammartin commented Oct 10, 2023

Initially the signature was tableprinter.New(ios *iostreams.IOStreams , headers []string) but I changed it to the function parameter in order to encourage the readability tableprinter.NoHeaders and to avoid assigning meaning to nil. I wanted nil to be a blaring siren, and I wanted that when people looked around the codebase they would only see examples of WithHeaders and NoHeaders.

The ability to distinguish between nil and tableprinter.NoHeaders is generally also why I did not do split the constructor because tableprinter.NewWithHeaders(ios, nil) is still a case I think it's nice to avoid.

@heaths
Copy link
Contributor Author

heaths commented Oct 10, 2023

I've been looking through some linters in golangci-lint as well as govet for anything that might work e.g., "require non-nil for this parameter based on a comment or something", but nothing. That would be ideal. I agree runtime error isn't ideal, but figuring that newer code is much better about adding tests (as are the reviewers for requiring it), it would hopefully get caught at test time.

I admit I originally planned to remove that assert - and still will if you all want me to, of course - but as I built atop it, it seemed like a good way to catch issues at test time.

I love Go - I actually prefer it over Rust, when it comes to native languages, for productivity (but not for wasm/wasi) - but there are times I miss some of the expressiveness of other languages e.g., Rust, C#, or even C/C++ with SAL annotations for cases like this.

@williammartin
Copy link
Member

I would trade many things for Rust enums

@heaths
Copy link
Contributor Author

heaths commented Oct 10, 2023

I would trade many things for Rust enums

That is one of the things I like most about Rust, for sure! My day job is mostly C# (though I contribute to several other languages, most notably our Go SDKs) and there's been discussions about adding unions for a couple language versions now. In the Azure SDK, I spearheaded an alternative that mostly meets our needs, but still barely holds a candle to Rust enums.

@heaths
Copy link
Contributor Author

heaths commented Oct 10, 2023

Talking with a colleague of mine on the Azure SDK for Go team over lunch, he had an idea that might look better. Ultimately, I'd prefer a sentinel value that is more obvious to reviewers - whether they are intimately familiar with the tableprinter package or not - to mean "I explicitly want no headers" and, if needed, scrutinize the decision in the PR. I could take a struct where a zero value should be obvious eg.,

package main

import "fmt"

func main() {
	print(Headers{[]string{"foo", "bar"}})
	print(Headers{})
}

type Headers struct {
	columns []string
}

func print(headers Headers) {
	if len(headers.columns) == 0 {
		fmt.Println("No headers")
		return
	}
	for _, header := range headers.columns {
		fmt.Printf("%s\t", header)
	}
	fmt.Println()
}

A type declaration of []string could still be nil, of course, and seems much less obvious as a sentinel value. Seeing Header{} seems much more clear. Thoughts?

@williammartin
Copy link
Member

williammartin commented Oct 11, 2023

I've used forbidigo in past to prevent certain patterns (which may or may not work here). If we went down the dual constructor route then we could mark one deprecated with // Deprecated and allow staticcheck to enforce that lint without any further configuration.

I like your proposed approach with Headers{}. It is still possible do do tableprinter.New(ios, Headers{nil}) but that still seems like a nice improvement over tableprinter.New(ios, nil). However...

I have a maybe crazy idea! I know it's usually not idiomatic to return private types from functions because it can constrain the ability to use the type. However, in this case, that's exactly what we're trying to do. Take a gander at this:

type headers struct {
	columns []string
}

var NoHeaders = headers{}

func WithHeaders(columns ...string) headers {
	return headers{columns: columns}
}

func New(ios *iostreams.IOStreams , h headers) ...

Now the only "bad route" is to do tableprinter.New(ios, tableprinter.WithHeaders()). I did play with a signature of func WithHeaders(first string, rest ...string) headers to require at least one column but it was horrible to use for the call sites that construct a slice of headers before passing it to WithHeaders. WithHeaders living alongside NoHeaders makes me pretty confident that we would almost never see tableprinter.WithHeaders() in a PR.

Conclusion

Honestly I think that any of the last few compile (with optional linting help) solutions seem reasonable to me and I'm happy to move forward with any of them and stop dreaming up crazy ideas. I did quite a bit of grunt work in my PR moving all the table.HeaderRow(headers...) calls into constructors so let me know if you'd like me to do some work off that commit for one of the options proposed above.

@heaths
Copy link
Contributor Author

heaths commented Oct 11, 2023

I like that approach better. It's like the WithOptions pattern, but requires one. If necessary, WithOptions could be added at some future date in a more "proper" fashion using a different type.

This isn't without precedent either. tableprinter.AddField already does this with fieldOption: https://github.com/cli/go-gh/blob/97e972997118b792448133f0144a85e00a8eda74/pkg/tableprinter/table.go#L67

That said, there's still the open question of whether I should update github.com/cli/go-gh to accept headers - optionally, so as not to break extensions after they update, but provide a consistent experience / styling - but for now will keep modifying this source.

@heaths
Copy link
Contributor Author

heaths commented Oct 12, 2023

To note, I tried to be consistent with headers if a precedent existed that I knew of or could otherwise find.

@heaths
Copy link
Contributor Author

heaths commented Oct 12, 2023

I made a few options for different header ideas. Just "bold" doesn't really stand out, but here are some other options (the second to last is "black+bd" - I forgot to update the comment):

image

Since most columns are generally white, I prefer the black+b which does slightly stand out from the gray, which is black+h. All of those are also part of the base VT100 sequences and should render on any terminal these days.

I've updated the PR with black+b but happy to change it to something else you prefer, or even something new. For example, I tried black+bi for inverted and it's not too bad, but 1) feels a bit too boisterous and 2) that last column would need spaces to fill out lest it looks inconsistent:

image

@heaths
Copy link
Contributor Author

heaths commented Oct 12, 2023

Underlining them - if we pad the last column (should find a way to do it only for the header or a lot of tests are going to have to be updated!) - actually looks pretty good, too:

image

The only other issue is untitled headers - for columns that don't really need it or would otherwise be shorter than any suitable column - look a bit odd, but not terrible.

To do the padding right, I think it would be best to move the header support to github.com/cli/go-gh. Padding the first row regardless still makes a lot of tests wrong (in ways that future test authors would likely be confused) and otherwise allocates longer strings than necessary.

@heaths
Copy link
Contributor Author

heaths commented Oct 12, 2023

Here is how that could work, whether we add underlining to the headers or not:

  1. Add header support to tableprinter go-gh#139
  2. Use header support in go-gh heaths/cli#32
image

Sure enough, if I check the output, only the header row is padded, if there is a header row at all. If we go this route, I'd also add tests to ensure that whether returning a ttyTablePrinter or tsvTablePrinter.

/cc @samcoe

EDIT: The thumbnail is hiding the underlines. Click to open the image for a clearer view.

@williammartin
Copy link
Member

There's a lot to think about here. I personally don't have a lot of opinion on the colour or bolding of the headers as long as we have some way for it to work with varied background colours.

With regards the underlines, I'm interested to know what screenreaders make of it (I'll have to try it later). With regards to underlines looking strange on columns that have no headers: maybe they should for accessibility reasons anyway? I understand that table output isn't the best for screenreader but I'm sure it's better to have some description of what could be found below rather than nothing.

@heaths
Copy link
Contributor Author

heaths commented Oct 13, 2023

Using the indexed (16) colors should be good in all cases. Those colors can be remapped, unlike 256 or truecolors, AFAIK. And people will often do that. I remember when Windows added that feature many years back. Comments were like, "about time" and "linux already had that", etc.

Any suggestions for what's next? This touches a lot of files, and I'd love to not have to keep rebasing this PR.

Copy link
Contributor

@samcoe samcoe left a comment

Choose a reason for hiding this comment

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

@heaths Thanks for laying out the various options. My vote is to stick with black+b. I think the underline looks nice but has too many open questions around accessibility and we would need to do a thorough testing before I would be comfortable merging something like that.

I left a couple of comments, I think this is real close.


//nolint:staticcheck // SA1019: utils.NewTablePrinter is deprecated: use internal/tableprinter
tp := utils.NewTablePrinter(opts.IO)
tp := tableprinter.New(opts.IO, tableprinter.WithHeaders("ID", "DESCRIPTION", "FILES", "", "UPDATED"))
Copy link
Contributor

Choose a reason for hiding this comment

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

What is the reason for not adding "VISIBILITY" header here?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I could - and did originally - but "VISIBILITY" is 10 characters while "public" and "private" are only 6 and 7 characters, respectively. Then column becomes longer. I considered truncation, but arbitrary truncation may not be ideal e.g. would you want to see just "VISIBIL" or, worse, "VISIBI…"? I left the project subcommand headers as-is, but figured in a few places that may no header for obvious values was better than longer-than-necessary columns truncating e.g., description fields more compared to previously.

Alternatively, maybe a new tableprinter function to use a long or predefined short name (default to truncation like is done now) e.g., "VISIBILITY|VIS" such that "VISIBILITY" is shown if it'll fit; otherwise, "VIS" would show.

Or, if you don't care about columns being wider than they were before, I can easily find the places where columns don't have headers and add them in.

pkg/cmd/issue/shared/display.go Outdated Show resolved Hide resolved
pkg/cmd/pr/list/list.go Outdated Show resolved Hide resolved
pkg/cmd/status/status.go Outdated Show resolved Hide resolved
.golangci.yml Outdated Show resolved Hide resolved
@heaths
Copy link
Contributor Author

heaths commented Oct 18, 2023

With the dependent changes in cli/go-gh#139, I think the underlining really sets it apart (before and after pic):

image

That said, it's a style not characters so I would think accessibility wouldn't be a problem. When I tried it on Windows Narrator, the underlines nor spaces were announced. If narrators announced colors, any modern terminal would probably be hard to understand with color CLIs, TUIs, etc.

If you still don't want them, should we even take the changes in cli/go-gh#139? Customized control over padding can be useful for other things like centering columns.

PS: A made a couple comments on the other issue because I didn't see notification that you actually did review this. Not sure why. Maybe I dismissed an unread notification by accident. Sorry if any comments came off as impatient as a result.

@heaths
Copy link
Contributor Author

heaths commented Oct 18, 2023

BTW, I rebased locally on upstream/trunk and getting a ton of linter errors with golangci-lint e.g.,

pkg/cmd/codespace/common.go:188:19: c.DisplayName undefined (type codespace has no field or method DisplayName, but does have displayName) (typecheck)
        displayName := c.DisplayName
                         ^
pkg/cmd/codespace/common.go:191:19: c.Name undefined (type codespace has no field or method Name) (typecheck)
                displayName = c.Name

heaths and others added 7 commits October 19, 2023 17:11
Require headerOption when constructing tableprinter.TablePrinter. Panic if headers are nil or empty - expected to be caught in tests.
Applies consistent table header with underline spanning entire column
width.
@samcoe
Copy link
Contributor

samcoe commented Oct 19, 2023

@heaths Good news, the team decided to move forward with the underlined headers that you presented. We definitely agree that they look great, and hope you understand our hesitancy with the change. We did more investigation today and felt that the underline experience was no different than without them from an accessibility perspective.

I went ahead and rebased the PR against latest trunk. Additionally, I pulled in the latest go-gh and made some style changes that I thought made sense.

I think there is one last thing I want to get into this and that is protection from truncating the first column and columns displaying URLs. This is something that was automatically handled by our previous tableprinter and I think something that should be added to the one in go-gh. I am going to open a PR in go-gh to add that functionality and then pull that in to this PR once it is shipped.

After this another thing I would like to see cleaned up is the use of non-standard time fields which we use in a couple places throughout the codebase, I think that potentially some of those might be breaking changes so I left them out of this PR.

We appreciate the maximum effort here! I will take this over the finish line. Please let me know if you have any thoughts/questions.

EDIT:
After looking at the URL and first column protection it looks like we have abandoned this when migrating to the new tableprinter. Not sure if that was on purpose or overlooked. I will discuss with the team, but I don't think I am going to hold up this PR for that functionality now. We can always introduce it later before the next release if we feel it is important.

@heaths
Copy link
Contributor Author

heaths commented Oct 19, 2023

After looking at the URL and first column protection it looks like we have abandoned this when migrating to the new tableprinter. Not sure if that was on purpose or overlooked. I will discuss with the team, but I don't think I am going to hold up this PR for that functionality now. We can always introduce it later before the next release if we feel it is important.

@samcoe You want me to make those changes? I did update the PR to add the URL check back into places where URLs seemed possible (for most fields, it's not e.g., fixed status enums, branch names, repo names, etc.) but doing so automatically might be better, sure. Handling the first column also isn't that hard.

After this another thing I would like to see cleaned up is the use of non-standard time fields which we use in a couple places throughout the codebase, I think that potentially some of those might be breaking changes so I left them out of this PR.

Are you talking about the TimeAgoAbbr styles? I had considered adding an AddTimeAgoAbbrField like the existing AddTimeAgoField (or whatever it's called; I forget off hand) or even pass a bool or func in to change the default behavior, or would you rather make them all consistent. Seems they aren't that different and given its only TTY output it's unlikely breaking - at least, in any way people should ideally be using the CLI in automation.

blue = ansi.ColorFunc("blue")
green = ansi.ColorFunc("green")
gray = ansi.ColorFunc("black+h")
grayUnderline = ansi.ColorFunc("white+du")
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Nit: @samcoe would you want to call this lightGrayUnderline? It's slightly lighter than gray (depending on terminal color mappings). That's why I decided to originally call the style TableHeader (not complaining you changed it, mind you): it's the obvious style for a table header and doesn't get too specific about the colors.

A few styles are called / include "gray" here and are all slightly different colors.

To note, I choose "white+du" over "black+hu" or "black+bu" because it was slightly different than gray that's used for various columns e.g. dates. Not hugely noticeable - at least not with Windows Terminal's default color mappings - and maybe unnecessary now that we have the underlines.

Copy link
Contributor

Choose a reason for hiding this comment

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

That's a good point, will make that change before merging.

@samcoe
Copy link
Contributor

samcoe commented Oct 19, 2023

@heaths Sorry that was not clear, I am not asking for or expecting that follow up from you. I just wanted to lay out my vision for future work.

Yeah I am talking about replacing all cases of:

tp.AddField(text.FuzzyAgoAbbr(time.Now(), sometime), tableprinter.WithColor(cs.Gray))

with

tp.AddTimeField(time.Now(), sometime, cs.Gray)

The TTY output change is not breaking, but in the places where text.FuzzyAgoAbbr is being used the non-TTY output has been manually set to some time format. That format may or may not be time.RFC3339 which is used by tp.AddTimeField. So the non-TTY time format might change in some places which may or may not be a big deal.

@samcoe samcoe merged commit 7738b61 into cli:trunk Oct 20, 2023
6 checks passed
@heaths heaths deleted the issue8090 branch October 20, 2023 23:47
renovate bot added a commit to scottames/dots that referenced this pull request Nov 3, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [aquaproj/aqua-registry](https://togithub.com/aquaproj/aqua-registry)
| minor | `v4.75.0` -> `v4.79.0` |
|
[bitnami-labs/sealed-secrets](https://togithub.com/bitnami-labs/sealed-secrets)
| patch | `v0.24.2` -> `v0.24.3` |
| [cli/cli](https://togithub.com/cli/cli) | minor | `v2.37.0` ->
`v2.38.0` |
| [golangci/golangci-lint](https://togithub.com/golangci/golangci-lint)
| patch | `v1.55.1` -> `v1.55.2` |
| [kevincobain2000/gobrew](https://togithub.com/kevincobain2000/gobrew)
| patch | `1.9.3` -> `v1.9.6` |
| [nektos/act](https://togithub.com/nektos/act) | patch | `v0.2.52` ->
`v0.2.53` |
| [twpayne/chezmoi](https://togithub.com/twpayne/chezmoi) | patch |
`v2.40.3` -> `v2.40.4` |

---

### Release Notes

<details>
<summary>aquaproj/aqua-registry (aquaproj/aqua-registry)</summary>

###
[`v4.79.0`](https://togithub.com/aquaproj/aqua-registry/releases/tag/v4.79.0)

[Compare
Source](https://togithub.com/aquaproj/aqua-registry/compare/v4.78.0...v4.79.0)


[Issues](https://togithub.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.79.0)
| [Pull
Requests](https://togithub.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.79.0)
| aquaproj/aqua-registry@v4.78.0...v4.79.0

#### 🎉 New Packages


[#&#8203;16956](https://togithub.com/aquaproj/aqua-registry/issues/16956)
[#&#8203;16958](https://togithub.com/aquaproj/aqua-registry/issues/16958)
[crates.io/tailspin](https://crates.io/crates/tailspin): A log file
highlighter

[#&#8203;16920](https://togithub.com/aquaproj/aqua-registry/issues/16920)
[int128/cronjob-runner](https://togithub.com/int128/cronjob-runner): A
command to run one-shot job from CronJob template and tail container
logs in Kubernetes

#### Fixes


[#&#8203;16961](https://togithub.com/aquaproj/aqua-registry/issues/16961)
Boeing/config-file-validator: Follow up changes of validator v1.5.0

[#&#8203;16964](https://togithub.com/aquaproj/aqua-registry/issues/16964)
kptdev/kpt: Rename GoogleContainerTools/kpt and exclude versions with
the prefix `porch/`

https://github.com/GoogleContainerTools/kpt is redirected to
https://github.com/kptdev/kpt


[#&#8203;16965](https://togithub.com/aquaproj/aqua-registry/issues/16965)
bitnami-labs/sealed-secrets: Exclude versions with the prefix `helm-`

###
[`v4.78.0`](https://togithub.com/aquaproj/aqua-registry/releases/tag/v4.78.0)

[Compare
Source](https://togithub.com/aquaproj/aqua-registry/compare/v4.77.0...v4.78.0)


[Issues](https://togithub.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.78.0)
| [Pull
Requests](https://togithub.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.78.0)
| aquaproj/aqua-registry@v4.77.0...v4.78.0

#### 🎉 New Packages


[#&#8203;16835](https://togithub.com/aquaproj/aqua-registry/issues/16835)
[manabusakai/tdtidy](https://togithub.com/manabusakai/tdtidy): A command
line tool for managing ECS task definitions. `tdtidy` can deregister and
delete old task definitions
[@&#8203;ponkio-o](https://togithub.com/ponkio-o)

#### Fixes


[#&#8203;16916](https://togithub.com/aquaproj/aqua-registry/issues/16916)
deepmap/oapi-codegen: Support oapi-codegen v2

[#&#8203;16913](https://togithub.com/aquaproj/aqua-registry/issues/16913)
hktalent/scan4all: Follow up changes of scan4all 2.8.6

Asset names were changed.


GhostTroops/scan4all@40d6c24

###
[`v4.77.0`](https://togithub.com/aquaproj/aqua-registry/releases/tag/v4.77.0)

[Compare
Source](https://togithub.com/aquaproj/aqua-registry/compare/v4.76.0...v4.77.0)


[Issues](https://togithub.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.77.0)
| [Pull
Requests](https://togithub.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.77.0)
| aquaproj/aqua-registry@v4.76.0...v4.77.0

#### 🎉 Reached 1,300 packages 🎉

Thank you, all contributors!

#### 🎉 New Packages


[#&#8203;16765](https://togithub.com/aquaproj/aqua-registry/issues/16765)
[traefik/yaegi](https://togithub.com/traefik/yaegi): Yaegi is Another
Elegant Go Interpreter

[#&#8203;16755](https://togithub.com/aquaproj/aqua-registry/issues/16755)
[#&#8203;16756](https://togithub.com/aquaproj/aqua-registry/issues/16756)
[xeol-io/xeol](https://togithub.com/xeol-io/xeol): A scanner for
end-of-life (EOL) software in container images, filesystems, and SBOMs

###
[`v4.76.0`](https://togithub.com/aquaproj/aqua-registry/releases/tag/v4.76.0)

[Compare
Source](https://togithub.com/aquaproj/aqua-registry/compare/v4.75.0...v4.76.0)


[Issues](https://togithub.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.76.0)
| [Pull
Requests](https://togithub.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.76.0)
| aquaproj/aqua-registry@v4.75.0...v4.76.0

#### 🎉 New Packages


[#&#8203;16680](https://togithub.com/aquaproj/aqua-registry/issues/16680)
[astral-sh/ruff](https://togithub.com/astral-sh/ruff): An extremely fast
Python linter and code formatter, written in Rust

#### Fixes


[#&#8203;16749](https://togithub.com/aquaproj/aqua-registry/issues/16749)
mozilla/sccache: Follow up changes of sccache v0.6.0

arch64-unknown-linux-musl got disabled.

-
[mozilla/sccache#1917
-   https://github.com/mozilla/sccache/releases/tag/v0.6.0


[#&#8203;16750](https://togithub.com/aquaproj/aqua-registry/issues/16750)
kastenhq/external-tools/k10tools: Fix settings

[#&#8203;16751](https://togithub.com/aquaproj/aqua-registry/issues/16751)
kastenhq/external-tools/k10multicluster: Fix settings

[#&#8203;16752](https://togithub.com/aquaproj/aqua-registry/issues/16752)
google/osv-scanner: Follow up an issue of osv-scanner v1.4.2

-
[google/osv-scanner#611

</details>

<details>
<summary>bitnami-labs/sealed-secrets
(bitnami-labs/sealed-secrets)</summary>

###
[`v0.24.3`](https://togithub.com/bitnami-labs/sealed-secrets/blob/HEAD/RELEASE-NOTES.md#v0243)

[Compare
Source](https://togithub.com/bitnami-labs/sealed-secrets/compare/v0.24.2...v0.24.3)

##### Changelog

- fix a bug that kept a sealed secret's generation and
observedgeneration out of sync
([#&#8203;1360](https://togithub.com/bitnami-labs/sealed-secrets/pull/1360))
- fix: add pdb
([#&#8203;1340](https://togithub.com/bitnami-labs/sealed-secrets/pull/1340))
- Bump k8s.io/code-generator from 0.28.2 to 0.28.3
([#&#8203;1358](https://togithub.com/bitnami-labs/sealed-secrets/pull/1340))
- Bump github.com/onsi/gomega from 1.28.1 to 1.29.0
([#&#8203;1357](https://togithub.com/bitnami-labs/sealed-secrets/pull/1357))
- Bump github.com/mattn/go-isatty from 0.0.19 to 0.0.20
([#&#8203;1353](https://togithub.com/bitnami-labs/sealed-secrets/pull/1353))
- Bump github.com/onsi/gomega from 1.28.0 to 1.28.1
([#&#8203;1351](https://togithub.com/bitnami-labs/sealed-secrets/pull/1351))
- Bump k8s.io/client-go from 0.28.2 to 0.28.3
([#&#8203;1350](https://togithub.com/bitnami-labs/sealed-secrets/pull/1350))
- Bump k8s.io/api from 0.28.2 to 0.28.3
([#&#8203;1349](https://togithub.com/bitnami-labs/sealed-secrets/pull/1349))
- Bump github.com/google/go-cmp from 0.5.9 to 0.6.0
([#&#8203;1348](https://togithub.com/bitnami-labs/sealed-secrets/pull/1348))

</details>

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

### [`v2.38.0`](https://togithub.com/cli/cli/releases/tag/v2.38.0):
GitHub CLI 2.38.0

[Compare Source](https://togithub.com/cli/cli/compare/v2.37.0...v2.38.0)

#### Highlights

- `extension install` no longer errors unhelpfully if the extension is
already installed by [@&#8203;Delta456](https://togithub.com/Delta456)
in
[cli/cli#8211
- All tables now have headers by
[@&#8203;heaths](https://togithub.com/heaths) in
[cli/cli#8157
- `project` commands have a clearer error message when no owner can be
resolved by [@&#8203;ffalor](https://togithub.com/ffalor) in
[cli/cli#8235
- `workflow run` now presents a select for `choice` workflow input types
by [@&#8203;adarshjhaa100](https://togithub.com/adarshjhaa100) in
[cli/cli#8180
- `codespace create` no longer polls for additional codespace
permissions unnecessarily by
[@&#8203;dmgardiner25](https://togithub.com/dmgardiner25) in
[cli/cli#8267
- `go install` now works with the removal of our crypto fork by
[@&#8203;samcoe](https://togithub.com/samcoe) in
[cli/cli#8204

#### Everything Else

- Additional testing for config by
[@&#8203;williammartin](https://togithub.com/williammartin) in
[cli/cli#8213
- Bumped cpuguy83/go-md2man from 2.0.1 to 2.0.3 by
[@&#8203;mikelolasagasti](https://togithub.com/mikelolasagasti) in
[cli/cli#8209
- Bumped mattn/go-isatty from 0.0.19 to 0.0.20 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[cli/cli#8205
- Bumped google.golang.org/grpc from 1.53.0 to 1.56.3 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[cli/cli#8251
- Bumped creack/pty from 1.1.18 to 1.1.20 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[cli/cli#8265
- Provide default config to bumped `go-gh` by
[@&#8203;samcoe](https://togithub.com/samcoe) in
[cli/cli#8244

#### New Contributors

- [@&#8203;mikelolasagasti](https://togithub.com/mikelolasagasti) made
their first contribution in
[cli/cli#8209
- [@&#8203;Delta456](https://togithub.com/Delta456) made their first
contribution in
[cli/cli#8211
- [@&#8203;adarshjhaa100](https://togithub.com/adarshjhaa100) made their
first contribution in
[cli/cli#8180

**Full Changelog**: cli/cli@v2.37.0...v2.38.0

</details>

<details>
<summary>golangci/golangci-lint (golangci/golangci-lint)</summary>

###
[`v1.55.2`](https://togithub.com/golangci/golangci-lint/compare/v1.55.1...v1.55.2)

[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.55.1...v1.55.2)

</details>

<details>
<summary>kevincobain2000/gobrew (kevincobain2000/gobrew)</summary>

###
[`v1.9.6`](https://togithub.com/kevincobain2000/gobrew/releases/tag/v1.9.6)

[Compare
Source](https://togithub.com/kevincobain2000/gobrew/compare/v1.9.5...v1.9.6)

#### Changelog

-
[`99135bd`](https://togithub.com/kevincobain2000/gobrew/commit/99135bd)
Merge pull request
[#&#8203;150](https://togithub.com/kevincobain2000/gobrew/issues/150)
from kevincobain2000/feature/gobrew-mod-major
-
[`1dbbb5f`](https://togithub.com/kevincobain2000/gobrew/commit/1dbbb5f)
README updated
-
[`5f566b0`](https://togithub.com/kevincobain2000/gobrew/commit/5f566b0)
only support go.mod major versions

###
[`v1.9.5`](https://togithub.com/kevincobain2000/gobrew/releases/tag/v1.9.5):
- Interactive

[Compare
Source](https://togithub.com/kevincobain2000/gobrew/compare/v1.9.4...v1.9.5)

#### Changelog

-
[`b612228`](https://togithub.com/kevincobain2000/gobrew/commit/b612228)
Merge pull request
[#&#8203;148](https://togithub.com/kevincobain2000/gobrew/issues/148)
from kevincobain2000/feature/gobrew-bug
-
[`c6d7844`](https://togithub.com/kevincobain2000/gobrew/commit/c6d7844)
oops
-
[`3f80b5a`](https://togithub.com/kevincobain2000/gobrew/commit/3f80b5a)
oops bug

###
[`v1.9.4`](https://togithub.com/kevincobain2000/gobrew/releases/tag/v1.9.4):
- Interactive

[Compare
Source](https://togithub.com/kevincobain2000/gobrew/compare/1.9.3...v1.9.4)

#### Changelog

![Screenshot 2023-11-01 at 17 59
11](https://togithub.com/kevincobain2000/gobrew/assets/629055/5ec75b5b-6fab-45da-82d4-5ad0203b2ac5)

-
[`ddb42bf`](https://togithub.com/kevincobain2000/gobrew/commit/ddb42bf)
(CHANGE LOG) updated readme
-
[`94cd26a`](https://togithub.com/kevincobain2000/gobrew/commit/94cd26a)
(ci) fix test
-
[`4003742`](https://togithub.com/kevincobain2000/gobrew/commit/4003742)
(ut) skip one failing test for now
-
[`82dc507`](https://togithub.com/kevincobain2000/gobrew/commit/82dc507)
(vup) go.mod to 1.21
-
[`7d911bf`](https://togithub.com/kevincobain2000/gobrew/commit/7d911bf)
Fixes
[#&#8203;145](https://togithub.com/kevincobain2000/gobrew/issues/145) by
adding interactivity
-
[`4aabed8`](https://togithub.com/kevincobain2000/gobrew/commit/4aabed8)
Merge pull request
[#&#8203;143](https://togithub.com/kevincobain2000/gobrew/issues/143)
from lincolnthalles/powershell-install-script
-
[`defdbff`](https://togithub.com/kevincobain2000/gobrew/commit/defdbff)
Merge pull request
[#&#8203;144](https://togithub.com/kevincobain2000/gobrew/issues/144)
from kevincobain2000/feature/ci-and-others
-
[`1859f1e`](https://togithub.com/kevincobain2000/gobrew/commit/1859f1e)
Merge pull request
[#&#8203;147](https://togithub.com/kevincobain2000/gobrew/issues/147)
from kevincobain2000/feature/gobrew
-
[`d900ad5`](https://togithub.com/kevincobain2000/gobrew/commit/d900ad5)
README updated
-
[`4c850a8`](https://togithub.com/kevincobain2000/gobrew/commit/4c850a8)
Revert "(ci) fix test"
-
[`c18716e`](https://togithub.com/kevincobain2000/gobrew/commit/c18716e)
Support when no current version
-
[`b48f97f`](https://togithub.com/kevincobain2000/gobrew/commit/b48f97f)
Update README.md
-
[`dcd8063`](https://togithub.com/kevincobain2000/gobrew/commit/dcd8063)
chore: add powershell install script
-
[`310b5a3`](https://togithub.com/kevincobain2000/gobrew/commit/310b5a3)
chore: fix powershell script
-
[`01e22fa`](https://togithub.com/kevincobain2000/gobrew/commit/01e22fa)
chore: fix powershell script
-
[`c6b0877`](https://togithub.com/kevincobain2000/gobrew/commit/c6b0877)
chore: update powershell script
-
[`2ae12de`](https://togithub.com/kevincobain2000/gobrew/commit/2ae12de)
chore: update powershell script
-
[`38a053e`](https://togithub.com/kevincobain2000/gobrew/commit/38a053e)
getting version from go.mod may throw error when there is no go.mod
file. check for file existance first, otherwise set to None
-
[`d39e076`](https://togithub.com/kevincobain2000/gobrew/commit/d39e076)
redundant comment gone
-
[`ed6fb34`](https://togithub.com/kevincobain2000/gobrew/commit/ed6fb34)
screenshot
-
[`f691f10`](https://togithub.com/kevincobain2000/gobrew/commit/f691f10)
tests++ for interactive

</details>

<details>
<summary>nektos/act (nektos/act)</summary>

### [`v0.2.53`](https://togithub.com/nektos/act/releases/tag/v0.2.53)

[Compare
Source](https://togithub.com/nektos/act/compare/v0.2.52...v0.2.53)

#### Changelog

##### Bug fixes

- [`7c7d80e`](https://togithub.com/nektos/act/commit/7c7d80e) fix: use
actions/runner hashfiles in container
([#&#8203;1940](https://togithub.com/nektos/act/issues/1940))

##### Other

- [`1bb2ee7`](https://togithub.com/nektos/act/commit/1bb2ee7) chore:
bump VERSION to 0.2.53
- [`84a4025`](https://togithub.com/nektos/act/commit/84a4025)
build(deps): bump github.com/docker/docker
([#&#8203;2067](https://togithub.com/nektos/act/issues/2067))
- [`fb4f29f`](https://togithub.com/nektos/act/commit/fb4f29f)
build(deps): bump github.com/creack/pty from 1.1.18 to 1.1.20
([#&#8203;2068](https://togithub.com/nektos/act/issues/2068))
- [`3e5c629`](https://togithub.com/nektos/act/commit/3e5c629)
build(deps): bump megalinter/megalinter from 7.4.0 to 7.5.0
([#&#8203;2070](https://togithub.com/nektos/act/issues/2070))
- [`83bfbcd`](https://togithub.com/nektos/act/commit/83bfbcd)
build(deps): bump go.etcd.io/bbolt from 1.3.7 to 1.3.8
([#&#8203;2065](https://togithub.com/nektos/act/issues/2065))
- [`3d65b0f`](https://togithub.com/nektos/act/commit/3d65b0f)
build(deps): bump github.com/docker/cli
([#&#8203;2069](https://togithub.com/nektos/act/issues/2069))
- [`854e3e9`](https://togithub.com/nektos/act/commit/854e3e9)
build(deps): bump github.com/go-git/go-git/v5 from 5.9.0 to 5.10.0
([#&#8203;2066](https://togithub.com/nektos/act/issues/2066))
- [`db71c41`](https://togithub.com/nektos/act/commit/db71c41)
build(deps): bump github.com/mattn/go-isatty from 0.0.19 to 0.0.20
([#&#8203;2059](https://togithub.com/nektos/act/issues/2059))
- [`db6e477`](https://togithub.com/nektos/act/commit/db6e477)
build(deps): bump github.com/moby/buildkit from 0.12.2 to 0.12.3
([#&#8203;2060](https://togithub.com/nektos/act/issues/2060))
- [`ceeb6c1`](https://togithub.com/nektos/act/commit/ceeb6c1) Add
support for service containers
([#&#8203;1949](https://togithub.com/nektos/act/issues/1949))
- [`ace4cd4`](https://togithub.com/nektos/act/commit/ace4cd4) Fix float
formatting ([#&#8203;2018](https://togithub.com/nektos/act/issues/2018))
- [`99067a9`](https://togithub.com/nektos/act/commit/99067a9)
build(deps): bump golang.org/x/net from 0.15.0 to 0.17.0
([#&#8203;2045](https://togithub.com/nektos/act/issues/2045))
- [`e7e158c`](https://togithub.com/nektos/act/commit/e7e158c)
build(deps): bump github.com/docker/distribution
([#&#8203;2037](https://togithub.com/nektos/act/issues/2037))
- [`3c730d7`](https://togithub.com/nektos/act/commit/3c730d7)
build(deps): bump golang.org/x/term from 0.12.0 to 0.13.0
([#&#8203;2036](https://togithub.com/nektos/act/issues/2036))
- [`976df8b`](https://togithub.com/nektos/act/commit/976df8b) fix
action_ref (composite action)
([#&#8203;2020](https://togithub.com/nektos/act/issues/2020))
- [`2f479ba`](https://togithub.com/nektos/act/commit/2f479ba) Fix image
survey for large images
([#&#8203;2022](https://togithub.com/nektos/act/issues/2022))
- [`5718555`](https://togithub.com/nektos/act/commit/5718555) \[
Variables ] - Add missing documentation for repository variables
([#&#8203;2032](https://togithub.com/nektos/act/issues/2032))

</details>

<details>
<summary>twpayne/chezmoi (twpayne/chezmoi)</summary>

###
[`v2.40.4`](https://togithub.com/twpayne/chezmoi/releases/tag/v2.40.4)

[Compare
Source](https://togithub.com/twpayne/chezmoi/compare/v2.40.3...v2.40.4)

#### Changelog

##### Fixes

- [`797e3cf`](https://togithub.com/twpayne/chezmoi/commit/797e3cf0f)
fix: Make stdinIsATTY return false if --no-tty is passed

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 4pm on thursday" in timezone
America/Los_Angeles, Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/scottames/dots).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMS41IiwidXBkYXRlZEluVmVyIjoiMzcuMzEuNSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
external pull request originating outside of the CLI core team
Projects
No open projects
The GitHub CLI
  
Needs review 🤔
Development

Successfully merging this pull request may close these issues.

Add (colored?) table headers to all TTY tables
4 participants