Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@kommendorkapten
Copy link
Contributor

This PR introduces a functionality to configure the host using --hostname flag instead of using GH_HOST environment variable.

It also updates the attestation commands (verify, download, inspect and trusted-root) to support tenancy mode.

@kommendorkapten kommendorkapten requested review from a team as code owners August 30, 2024 14:21
@cliAutomation cliAutomation added the external pull request originating outside of the CLI core team label Aug 30, 2024
@cliAutomation
Copy link
Collaborator

Hi! Thanks for the pull request. Please ensure that this change is linked to an issue by mentioning an issue number in the description of the pull request. If this pull request would close the issue, please put the word 'Fixes' before the issue number somewhere in the pull request body. If this is a tiny change like fixing a typo, feel free to ignore this message.

require.NoError(t, err)
}

func ValidateSignerWorkflow(t *testing.T) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

These tests wasn't run before, so I fixed that.

@kommendorkapten kommendorkapten changed the title Policy tenancy Added tenancy aware attestation commands Aug 30, 2024
for _, target := range tufOpt.targets {
t, err := tufClient.GetTarget(target)
if err != nil {
return err
Copy link
Contributor

Choose a reason for hiding this comment

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

If we can't reach the target here, should the client facing error message include some content about checking the URL itself? Maybe the returned error already includes something like this.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The error will contain context concerning the target, but we can do better. Let me add more context to the error message.

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.

Haven't dug into all of the pkg/cmd/attestation changes but wanted to touch on some of the foundational changes here.

Comment on lines 38 to 51
func TenantName(h string) (string, bool) {
normalizedHostName := NormalizeHostname(h)
return cutSuffix(normalizedHostName, "."+tenancyHost)
t, f := cutSuffix(normalizedHostName, "."+tenancyHost)

if !f {
return t, f
}

// make sure tenant name is valid
re := regexp.MustCompile(`^[a-z0-9\-]+$`)
if !re.MatchString(t) {
return "", false
}
return t, true
Copy link
Member

Choose a reason for hiding this comment

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

@kommendorkapten : Could you elaborate on how gh would behave when invalid tenant hosts were specified? Any console output you could share?

Depending on ☝️, we might need to revisit this because this is a larger issue than just core gh as cli/go-gh has similar capability. πŸ€”

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That is a good question. Currently some commands are failing before this test happens, as they are instantiating the API client first, which tries to parse (and possibly connect) the URL. But as this function can be called from everywhere we should be on par in cli/go-gh, I can prepare a PR once we have a rough agreement on how the cli should behave.

As the tenant is derived from the hostname, this PR simply prompts invalid hostname $host. Having all commands exhibit a similar behaviour should be good.

One thing though, TenantName returns bool (found), but with a corresponding check of IsTenancy, an error case can be detected.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@andyfeller any thoughts?

Copy link
Member

@andyfeller andyfeller Sep 10, 2024

Choose a reason for hiding this comment

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

I'm trying to think of a middle ground as this feels suboptimal. πŸ€” Let me see if I can unwind what's going on here to see what alternatives might be available.

Is there somewhere else we can handle invalid tenancy names?

The only place I see ghrepo.TenantName being called is within ghrepo.FormatRemoteUrl, which is used throughout the code base:

func FormatRemoteURL(repo Interface, protocol string) string {
if protocol == "ssh" {
if tenant, found := ghinstance.TenantName(repo.RepoHost()); found {
return fmt.Sprintf("%s@%s:%s/%s.git", tenant, repo.RepoHost(), repo.RepoOwner(), repo.RepoName())
}
return fmt.Sprintf("git@%s:%s/%s.git", repo.RepoHost(), repo.RepoOwner(), repo.RepoName())
}
return fmt.Sprintf("%s%s/%s.git", ghinstance.HostPrefix(repo.RepoHost()), repo.RepoOwner(), repo.RepoName())
}

If we accepted this code as is, it feels like we'd disguise the problem of an invalid tenancy name as an error with a seemingly legitimate URL.

Above, you state there are some scenarios that are failing, however I don't have a clear idea of concrete examples.

Currently some commands are failing before this test happens, as they are instantiating the API client first, which tries to parse (and possibly connect) the URL.

Putting that aside, I also see elsewhere in the code we have HostnameValidator which is also used throughout code:

func HostnameValidator(hostname string) error {
if len(strings.TrimSpace(hostname)) < 1 {
return errors.New("a value is required")
}
if strings.ContainsRune(hostname, '/') || strings.ContainsRune(hostname, ':') {
return errors.New("invalid hostname")
}
return nil
}

Thoughts

  1. Should HostnameValidator actually be what's enhanced to determine if a tenancy host has a valid name?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, I'm also thinking how we can make this validation happen as early as possible.
A common flow is to call go-gh/v2/pkg/auth.DefaultHost() This function does not perform any validation, only reads the name from the config or the GH_HOST environment variable.

Should HostnameValidator actually be what's enhanced to determine if a tenancy host has a valid name?

YES, I support that. I would love for having a single consistent method that could be used to verify that a host is valid. And a tenant name is simply a valid domain label ([a-zA-Z0-9\-]+) that is part of a hostname. So verifying that hostname is valid (i.e parse with net/url/Parse) ought to be enough.

My recommendation would anyway be to remove the added check in this PR, create a new issue on going over host verification in the cli, and create a separate PR for that, as I think that would be easier to reason about. Sounds goo @andyfeller?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

created #9598 for tracking.

Copy link
Contributor

@steiza steiza left a comment

Choose a reason for hiding this comment

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

Nice work! There was a lot to update here.

This is done by inspecting the current hostname to determine if
tenancy is enabled.

The attestation commands also accepts a --hostname parameter, that
is used to pick the current host, similar to how the GH_HOST variable
can be used.

Signed-off-by: Fredrik Skogman <[email protected]>
@kommendorkapten kommendorkapten merged commit aa931c5 into cli:trunk Sep 11, 2024
izumin5210 referenced this pull request in izumin5210/dotfiles Sep 21, 2024
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [cli/cli](https://redirect.github.com/cli/cli) | minor | `v2.56.0` ->
`v2.57.0` |

---

### Release Notes

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

###
[`v2.57.0`](https://redirect.github.com/cli/cli/releases/tag/v2.57.0):
GitHub CLI 2.57.0

[Compare
Source](https://redirect.github.com/cli/cli/compare/v2.56.0...v2.57.0)

#### What's Changed

- Move non-integration tests to different test file by
[@&#8203;codysoyland](https://redirect.github.com/codysoyland) in
[https://github.com/cli/cli/pull/9577](https://redirect.github.com/cli/cli/pull/9577)
- Added tenancy aware attestation commands by
[@&#8203;kommendorkapten](https://redirect.github.com/kommendorkapten)
in
[https://github.com/cli/cli/pull/9542](https://redirect.github.com/cli/cli/pull/9542)
- Added `--active` flag to the `gh auth status` command by
[@&#8203;velumuruganr](https://redirect.github.com/velumuruganr) in
[https://github.com/cli/cli/pull/9520](https://redirect.github.com/cli/cli/pull/9520)
- build(deps): bump github.com/sigstore/sigstore-go from 0.6.1 to 0.6.2
by [@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/cli/cli/pull/9601](https://redirect.github.com/cli/cli/pull/9601)
- `gh attestation verify` test for custom OIDC issuers by
[@&#8203;bdehamer](https://redirect.github.com/bdehamer) in
[https://github.com/cli/cli/pull/9595](https://redirect.github.com/cli/cli/pull/9595)
- Suggest installing Rosetta when extension installation fails due to
missing `darwin-arm64` binary, but a `darwin-amd64` binary is available
by [@&#8203;timrogers](https://redirect.github.com/timrogers) in
[https://github.com/cli/cli/pull/9599](https://redirect.github.com/cli/cli/pull/9599)
- Update `gh attestation verify` bundle parsing and validation errors by
[@&#8203;malancas](https://redirect.github.com/malancas) in
[https://github.com/cli/cli/pull/9564](https://redirect.github.com/cli/cli/pull/9564)
- Suppress `attestation verify` output when no TTY present by
[@&#8203;bdehamer](https://redirect.github.com/bdehamer) in
[https://github.com/cli/cli/pull/9612](https://redirect.github.com/cli/cli/pull/9612)
- Use api subdomains for tenant hosts by
[@&#8203;williammartin](https://redirect.github.com/williammartin) in
[https://github.com/cli/cli/pull/9618](https://redirect.github.com/cli/cli/pull/9618)

#### New Contributors

- [@&#8203;kommendorkapten](https://redirect.github.com/kommendorkapten)
made their first contribution in
[https://github.com/cli/cli/pull/9542](https://redirect.github.com/cli/cli/pull/9542)
- [@&#8203;velumuruganr](https://redirect.github.com/velumuruganr) made
their first contribution in
[https://github.com/cli/cli/pull/9520](https://redirect.github.com/cli/cli/pull/9520)
- [@&#8203;bdehamer](https://redirect.github.com/bdehamer) made their
first contribution in
[https://github.com/cli/cli/pull/9595](https://redirect.github.com/cli/cli/pull/9595)
- [@&#8203;timrogers](https://redirect.github.com/timrogers) made their
first contribution in
[https://github.com/cli/cli/pull/9599](https://redirect.github.com/cli/cli/pull/9599)

**Full Changelog**: cli/cli@v2.56.0...v2.57.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 PR becomes conflicted, or you tick the
rebase/retry checkbox.

πŸ”• **Ignore**: Close this PR and you won't be reminded about this update
again.

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/izumin5210/dotfiles).

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

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: izumin5210-update-aqua-checksum[bot] <169593670+izumin5210-update-aqua-checksum[bot]@users.noreply.github.com>
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Sep 23, 2024
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [cli/cli](https://github.com/cli/cli) | minor | `v2.55.0` -> `v2.57.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.57.0`](https://github.com/cli/cli/releases/tag/v2.57.0): GitHub CLI 2.57.0

[Compare Source](cli/cli@v2.56.0...v2.57.0)

#### What's Changed

-   Move non-integration tests to different test file by [@&#8203;codysoyland](https://github.com/codysoyland) in cli/cli#9577
-   Added tenancy aware attestation commands by [@&#8203;kommendorkapten](https://github.com/kommendorkapten) in cli/cli#9542
-   Added `--active` flag to the `gh auth status` command by [@&#8203;velumuruganr](https://github.com/velumuruganr) in cli/cli#9520
-   build(deps): bump github.com/sigstore/sigstore-go from 0.6.1 to 0.6.2 by [@&#8203;dependabot](https://github.com/dependabot) in cli/cli#9601
-   `gh attestation verify` test for custom OIDC issuers by [@&#8203;bdehamer](https://github.com/bdehamer) in cli/cli#9595
-   Suggest installing Rosetta when extension installation fails due to missing `darwin-arm64` binary, but a `darwin-amd64` binary is available by [@&#8203;timrogers](https://github.com/timrogers) in cli/cli#9599
-   Update `gh attestation verify` bundle parsing and validation errors by [@&#8203;malancas](https://github.com/malancas) in cli/cli#9564
-   Suppress `attestation verify` output when no TTY present by [@&#8203;bdehamer](https://github.com/bdehamer) in cli/cli#9612
-   Use api subdomains for tenant hosts by [@&#8203;williammartin](https://github.com/williammartin) in cli/cli#9618

#### New Contributors

-   [@&#8203;kommendorkapten](https://github.com/kommendorkapten) made their first contribution in cli/cli#9542
-   [@&#8203;velumuruganr](https://github.com/velumuruganr) made their first contribution in cli/cli#9520
-   [@&#8203;bdehamer](https://github.com/bdehamer) made their first contribution in cli/cli#9595
-   [@&#8203;timrogers](https://github.com/timrogers) made their first contribution in cli/cli#9599

**Full Changelog**: cli/cli@v2.56.0...v2.57.0

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

[Compare Source](cli/cli@v2.55.0...v2.56.0)

#### Important note about renewed GPG key

The Debian and RedHat releases have been signed with a new GPG key. If you are experiencing issues updating your `.deb` or `.rpm` packages, please read  [cli/cli#9569](cli/cli#9569).

#### What's Changed

-   Always print URL scheme to stdout by [@&#8203;heaths](https://github.com/heaths) in cli/cli#9471
-   Quote repo names consistently in `gh repo sync` stdout by [@&#8203;muzimuzhi](https://github.com/muzimuzhi) in cli/cli#9491
-   Fetch bundle from OCI registry for verify  by [@&#8203;ejahnGithub](https://github.com/ejahnGithub) in cli/cli#9421
-   Remove `Internal` from `gh repo create` prompt when owner is not an org by [@&#8203;jtmcg](https://github.com/jtmcg) in cli/cli#9465
-   Drop surplus trailing space char in flag names in web by [@&#8203;muzimuzhi](https://github.com/muzimuzhi) in cli/cli#9495
-   fix the trimming of log filenames for `gh run view` by [@&#8203;benebsiny](https://github.com/benebsiny) in cli/cli#9482
-   "offline" verification using the bundle of attestations without any additional handling of the file by [@&#8203;aryanbhosale](https://github.com/aryanbhosale) in cli/cli#9523
-   build(deps): bump actions/attest-build-provenance from 1.4.1 to 1.4.2 by [@&#8203;dependabot](https://github.com/dependabot) in cli/cli#9518
-   Fix doc typo for `repo sync` by [@&#8203;muzimuzhi](https://github.com/muzimuzhi) in cli/cli#9509
-   Correct the help message for -F by [@&#8203;Goooler](https://github.com/Goooler) in cli/cli#9525
-   chore: fix some function names by [@&#8203;crystalstall](https://github.com/crystalstall) in cli/cli#9555
-   verify 2nd artifact without swapping order by [@&#8203;aryanbhosale](https://github.com/aryanbhosale) in cli/cli#9532
-   `gh attestation verify` handles empty JSONL files by [@&#8203;malancas](https://github.com/malancas) in cli/cli#9541
-   Enhance Linux installation docs to redirect users to GPG renewal issue, better troubleshooting support by [@&#8203;andyfeller](https://github.com/andyfeller) in cli/cli#9573
-   Upgrade sigstore-go to v0.6.1 by [@&#8203;codysoyland](https://github.com/codysoyland) in cli/cli#9566
-   Check for nil values to prevent nil dereference panic by [@&#8203;codysoyland](https://github.com/codysoyland) in cli/cli#9578
-   build(deps): bump actions/attest-build-provenance from 1.4.2 to 1.4.3 by [@&#8203;dependabot](https://github.com/dependabot) in cli/cli#9575

#### New Contributors

-   [@&#8203;aryanbhosale](https://github.com/aryanbhosale) made their first contribution in cli/cli#9523
-   [@&#8203;Goooler](https://github.com/Goooler) made their first contribution in cli/cli#9525
-   [@&#8203;crystalstall](https://github.com/crystalstall) made their first contribution in cli/cli#9555

**Full Changelog**: cli/cli@v2.55.0...v2.56.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:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
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

None yet

Development

Successfully merging this pull request may close these issues.

7 participants