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 tests for the existing config #8213

Merged
merged 21 commits into from Oct 19, 2023
Merged

Conversation

williammartin
Copy link
Member

@williammartin williammartin commented Oct 18, 2023

Description

In preparation for changing our configuration schema to support multiple accounts, I want gain confidence in our Config, particularly the pieces that relate to the AuthConfig structure and reach down into the config and keyring. I actually couldn't find any tests that provided coverage for this even as an integration.

There will need to also be some tests added to the go-gh/auth package which is called through here and reaches into the config.

I've left some comments on areas I want to call out.

@williammartin williammartin force-pushed the wm/add-tests-for-existing-config branch from b80aca5 to 465474e Compare October 18, 2023 15:52

// When the user has logged in insecurely
authCfg := newTestAuthConfig()
ghConfig.Read = func() (*ghConfig.Config, error) {
Copy link
Member Author

Choose a reason for hiding this comment

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

A bit sad 😬

Copy link
Contributor

Choose a reason for hiding this comment

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

I dont think this is necessary:

	cfg, err := NewConfig()
	require.NoError(t, err)
	authCfg := cfg.Authentication()

Copy link
Member Author

Choose a reason for hiding this comment

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

I don't think what you're proposing here actually resolves my sadness so just to be clear about why I'm doing this NewConfig calls to ghConfig.Read which uses sync.Once to load config from disk. That means that any test from that point onward that calls ghConfig.Read will not be isolated.

Copy link
Contributor

Choose a reason for hiding this comment

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

Ah I see. I misunderstood the purpose. That makes sense to me.

Copy link
Member Author

Choose a reason for hiding this comment

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

I think what I'll do is actually put it inside the newTestAuthConfig function or another new function and comment it so that the reason can be discovered from any test.

require.ErrorIs(t, err, keyring.ErrNotFound)
}

// Note that I'm not sure this test enforces particularly desirable behaviour
Copy link
Member Author

Choose a reason for hiding this comment

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

Calling this out for attention.

Copy link
Contributor

Choose a reason for hiding this comment

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

The reasoning behind this behavior was that if logout fails what actions can the user actually take? The thought was that there really was none and thus we shouldn't show them an error. Not saying I agree, just some context.

Copy link
Member Author

Choose a reason for hiding this comment

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

Depends on the user I suppose. A user that cares that their token is still hanging around on a shared machine could care.

I don't feel a pressing need to change it but I wanted to leave a note for any maintainer that comes across this in future. In fact, I'll update the comment to capture your added context.

if err == nil {
return val, err
}

if defaultExists(key) {
Copy link
Member Author

Choose a reason for hiding this comment

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

I dunno, feel free to tell me to move it back but it felt pretty analogous to a map.

Copy link
Contributor

Choose a reason for hiding this comment

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

I like the change.

@@ -178,13 +160,19 @@ func (c *AuthConfig) User(hostname string) (string, error) {

// GitProtocol will retrieve the git protocol for the logged in user at the given hostname.
// If none is set it will return the default value.
// TODO: although this returns an error, it actually has no path to error.
Copy link
Member Author

Choose a reason for hiding this comment

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

Calling this out for attention.

Copy link
Contributor

Choose a reason for hiding this comment

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

Let's change the function signature then, it is only used in two places. Interestingly enough this function should replace the majority of places GetOrDefault is used. Would love to clean that up as I find GetOrDefault to be a bit of an eyesore.

@@ -245,6 +235,8 @@ func (c *AuthConfig) Login(hostname, username, token, gitProtocol string, secure
// Logout will remove user, git protocol, and auth token for the given hostname.
// It will remove the auth token from the encrypted storage if it exists there.
func (c *AuthConfig) Logout(hostname string) error {
// TODO: I can't find anywhere that expects to call this function without a hostname
Copy link
Member Author

Choose a reason for hiding this comment

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

Calling this out for attention.

Copy link
Contributor

Choose a reason for hiding this comment

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

I think this was in place for legacy reasons, probably okay to remove now.

@@ -233,6 +221,8 @@ func (c *AuthConfig) Login(hostname, username, token, gitProtocol string, secure
c.cfg.Set([]string{hosts, hostname, oauthToken}, token)
insecureStorageUsed = true
}
// TODO: I can't find anywhere that calls this function without a username, so that would seem like
Copy link
Member Author

Choose a reason for hiding this comment

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

Calling this out for attention.

Copy link
Contributor

Choose a reason for hiding this comment

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

I think this was in place for legacy reasons, probably okay to remove now.

@@ -0,0 +1,302 @@
package config
Copy link
Member Author

Choose a reason for hiding this comment

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

Note that I have not written tests for KnownHosts (because it has no extra behaviour on top of go-gh/auth right now so it was low priority) nor the AliasConfig because it is low risk for the multi account changes.

Copy link
Member Author

Choose a reason for hiding this comment

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

I have written tests for Hosts and DefaultHost now but I will leave AliasConfig out of this PR and do it in a follow up since this is already getting pretty hefty.

}

func TestHasEnvTokenWithNoEnvTokenButAConfigVar(t *testing.T) {
t.Skip("this test is explicitly breaking some implementation assumptions")
Copy link
Member Author

Choose a reason for hiding this comment

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

Calling this out for attention.

@@ -153,6 +135,14 @@ func (c *AuthConfig) HasEnvToken() bool {
return true
}
}
// TODO: This is _extremely_ knowledgable about the implementation of TokenFromEnvOrConfig
Copy link
Member Author

Choose a reason for hiding this comment

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

Calling this out for attention.

Copy link
Contributor

Choose a reason for hiding this comment

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

Agreed. We should create a function HasEnvToken in go-gh that abstracts away this knowledge.

Copy link
Member Author

Choose a reason for hiding this comment

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

I'm going to punt that from this PR since it's a bigger change and this is already pretty hefty.

Comment on lines 291 to 292
requireKeyWithValue(t, authCfg.cfg, []string{hosts, "github.com", "user"}, "test-user")
requireKeyWithValue(t, authCfg.cfg, []string{hosts, "github.com", "git_protocol"}, "ssh")
Copy link
Member Author

Choose a reason for hiding this comment

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

I should test these using GitProtocol and User instead. That would be a better black box test.

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.

@williammartin This is excellent, thanks for being diligent about improving our test coverage! I left inline code comments, let me know if you have any questions about them.


// When the user has logged in insecurely
authCfg := newTestAuthConfig()
ghConfig.Read = func() (*ghConfig.Config, error) {
Copy link
Contributor

Choose a reason for hiding this comment

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

I dont think this is necessary:

	cfg, err := NewConfig()
	require.NoError(t, err)
	authCfg := cfg.Authentication()


// When the user is authenticated via env var
authCfg := newTestAuthConfig()
ghConfig.Read = func() (*ghConfig.Config, error) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Same comment as above.

require.ErrorIs(t, err, keyring.ErrNotFound)
}

// Note that I'm not sure this test enforces particularly desirable behaviour
Copy link
Contributor

Choose a reason for hiding this comment

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

The reasoning behind this behavior was that if logout fails what actions can the user actually take? The thought was that there really was none and thus we shouldn't show them an error. Not saying I agree, just some context.

if err == nil {
return val, err
}

if defaultExists(key) {
Copy link
Contributor

Choose a reason for hiding this comment

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

I like the change.

}

val, err = c.cfg.Get([]string{key})
val, err := c.Get(hostname, key)
Copy link
Contributor

Choose a reason for hiding this comment

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

Nice 👍

@@ -153,6 +135,14 @@ func (c *AuthConfig) HasEnvToken() bool {
return true
}
}
// TODO: This is _extremely_ knowledgable about the implementation of TokenFromEnvOrConfig
Copy link
Contributor

Choose a reason for hiding this comment

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

Agreed. We should create a function HasEnvToken in go-gh that abstracts away this knowledge.

// can guarantee that tokens will only be returned from a set env var.
// Discussed here, but maybe worth revisiting: https://github.com/cli/cli/pull/7169#discussion_r1136979033
//
// By providing example.com. it's also _only_ looking for GH_ENTERPRISE_TOKEN or GITHUB_ENTERPRISE_TOKEN
Copy link
Contributor

Choose a reason for hiding this comment

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

It checks GH_TOKEN and GITHUB_TOKEN as well.

Copy link
Member Author

Choose a reason for hiding this comment

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

Ohhh sorry, I missed that the isEnterprise branch of tokenForHost would fall through. Thanks for correcting me!

@@ -178,13 +160,19 @@ func (c *AuthConfig) User(hostname string) (string, error) {

// GitProtocol will retrieve the git protocol for the logged in user at the given hostname.
// If none is set it will return the default value.
// TODO: although this returns an error, it actually has no path to error.
Copy link
Contributor

Choose a reason for hiding this comment

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

Let's change the function signature then, it is only used in two places. Interestingly enough this function should replace the majority of places GetOrDefault is used. Would love to clean that up as I find GetOrDefault to be a bit of an eyesore.

@@ -233,6 +221,8 @@ func (c *AuthConfig) Login(hostname, username, token, gitProtocol string, secure
c.cfg.Set([]string{hosts, hostname, oauthToken}, token)
insecureStorageUsed = true
}
// TODO: I can't find anywhere that calls this function without a username, so that would seem like
Copy link
Contributor

Choose a reason for hiding this comment

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

I think this was in place for legacy reasons, probably okay to remove now.

@@ -245,6 +235,8 @@ func (c *AuthConfig) Login(hostname, username, token, gitProtocol string, secure
// Logout will remove user, git protocol, and auth token for the given hostname.
// It will remove the auth token from the encrypted storage if it exists there.
func (c *AuthConfig) Logout(hostname string) error {
// TODO: I can't find anywhere that expects to call this function without a hostname
Copy link
Contributor

Choose a reason for hiding this comment

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

I think this was in place for legacy reasons, probably okay to remove now.

@williammartin williammartin marked this pull request as ready for review October 19, 2023 10:58
@williammartin williammartin requested a review from a team as a code owner October 19, 2023 10:58
@cliAutomation cliAutomation added this to Needs review 🤔 in The GitHub CLI Oct 19, 2023
@williammartin
Copy link
Member Author

I believe I've addressed all comments @samcoe and have explicitly excluded:

  • Testing AliasConfig
  • Moving HasEnvToken into gh-auth

In both cases, I felt like this PR was already pretty hefty and they were both larger distractions from the multi account confidence that I wanted to get out of this.

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.

Wonderful! Thanks for making the requested changes. This looks ready to ship. Glad we are one step closer to removing GetOrDefault.


// Then the token is successfully fetched
// and the source is set to oauth_token but this isn't great
// but I can't find the issue # that references this.
Copy link
Contributor

Choose a reason for hiding this comment

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

I think cli/go-gh#94 is what you are looking for.

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes! I just could not find it anywhere

@williammartin williammartin merged commit 26f3601 into trunk Oct 19, 2023
10 checks passed
@williammartin williammartin deleted the wm/add-tests-for-existing-config branch October 19, 2023 13:59
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
None yet
Projects
No open projects
The GitHub CLI
  
Needs review 🤔
Development

Successfully merging this pull request may close these issues.

None yet

2 participants