-
Notifications
You must be signed in to change notification settings - Fork 8
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
Exclude domain from name length check #9
Exclude domain from name length check #9
Conversation
2b0a7ce
to
6f819a9
Compare
reference.go
Outdated
// NameTotalLengthMax is the maximum total number of characters in a repository name. | ||
NameTotalLengthMax = 255 | ||
// RepositoryNameTotalLengthMax is the maximum total number of characters in a repository name. | ||
RepositoryNameTotalLengthMax = 255 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As this const is exported, we should probably alias the old one, and mark it deprecated;
// NameTotalLengthMax is the maximum total number of characters in a repository name.
//
// Deprecated: use [RepositoryNameTotalLengthMax] instead.
NameTotalLengthMax = RepositoryNameTotalLengthMax
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good points, thank you!
reference.go
Outdated
}, nil | ||
} | ||
|
||
if len(repo.path) > RepositoryNameTotalLengthMax { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps validate match[2]
, so that we can keep the return more atomic (return repository{ ...}
), instead of constructing the repository
and discarding it in case there's a failure.
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #9 +/- ##
=======================================
Coverage 83.71% 83.71%
=======================================
Files 5 5
Lines 393 393
=======================================
Hits 329 329
Misses 54 54
Partials 10 10 ☔ View full report in Codecov by Sentry. |
6917848
to
348248f
Compare
348248f
to
6a6b8f0
Compare
@@ -117,7 +118,7 @@ func TestReferenceParse(t *testing.T) { | |||
tag: "Uppercase", | |||
}, | |||
{ | |||
input: strings.Repeat("a/", 128) + "a:tag", | |||
input: "domain/" + strings.Repeat("a", 256) + ":tag", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This example may be incorrect here, because the first component is only considered to be a domain if it either contains a period (.
), a colon (:
) or it's literally localhost
Lines 8 to 10 in 8507c7f
// domain := host [':' port-number] | |
// host := domain-name | IPv4address | \[ IPv6address \] ; rfc3986 appendix-A | |
// domain-name := domain-component ['.' domain-component]* |
If we intend to have a domain here, it should probably contain a .
, and use one of the designated RFC 6761https://www.rfc-editor.org/rfc/rfc6761.html) domains for this (e.g., example.com
or example.org
, or <something>.test
reference_test.go
Outdated
input: "domain/" + strings.Repeat("a", 255) + ":tag", | ||
domain: "domain", | ||
repository: "domain/" + strings.Repeat("a", 255), | ||
tag: "tag", | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here
err: ErrNameEmpty, | ||
err: ErrReferenceInvalidFormat, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm.. why did this one change? Not sure if that's expected 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's already returning ErrReferenceInvalidFormat
on main, without the new changes. Should I rather make the test pass by changing the behaviour instead?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure I got that, you mean it's currently failing on main? I just give this test a run, and it seems to pass, or is it broken in some other way?
go test -v -run TestWithNameFailure
=== RUN TestWithNameFailure
=== PAUSE TestWithNameFailure
=== CONT TestWithNameFailure
=== RUN TestWithNameFailure/#00
=== PAUSE TestWithNameFailure/#00
=== RUN TestWithNameFailure/:justtag
=== PAUSE TestWithNameFailure/:justtag
=== RUN TestWithNameFailure/@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== PAUSE TestWithNameFailure/@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== RUN TestWithNameFailure/validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== PAUSE TestWithNameFailure/validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== RUN TestWithNameFailure/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a:tag
=== PAUSE TestWithNameFailure/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a:tag
=== RUN TestWithNameFailure/aa/asdf$$^/aa
=== PAUSE TestWithNameFailure/aa/asdf$$^/aa
=== CONT TestWithNameFailure/#00
=== CONT TestWithNameFailure/validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== CONT TestWithNameFailure/:justtag
=== CONT TestWithNameFailure/aa/asdf$$^/aa
=== CONT TestWithNameFailure/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a:tag
=== CONT TestWithNameFailure/@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
--- PASS: TestWithNameFailure (0.00s)
--- PASS: TestWithNameFailure/#00 (0.00s)
--- PASS: TestWithNameFailure/:justtag (0.00s)
--- PASS: TestWithNameFailure/aa/asdf$$^/aa (0.00s)
--- PASS: TestWithNameFailure/validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (0.00s)
--- PASS: TestWithNameFailure/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a:tag (0.00s)
--- PASS: TestWithNameFailure/@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (0.00s)
PASS
ok github.com/distribution/reference 0.689s
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry for the confusion about making the test pass. The test would pass, but it would return ErrReferenceInvalidFormat
instead of ErrNameEmpty
which is the expectation. The test will not fail as we are only asserting on main that there is an error and not asserting which error it is.
If you change the assertion from:
if err == nil {
t.Errorf("no error parsing name. expected: %s", tc.err)
}
to:
if !errors.Is(err, tc.err) {
t.Errorf("unexpected error parsing name. expected: %s, got: %s", tc.err, err)
}
to check the actual error that is returned is equal to the expectation in the test, the test will fail. So the test is passing because we are not asserting correctly what is expected in the test input
@@ -352,7 +359,11 @@ func TestWithNameFailure(t *testing.T) { | |||
err: ErrReferenceInvalidFormat, | |||
}, | |||
{ | |||
input: strings.Repeat("a/", 128) + "a:tag", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wondering if there's still constraints (or if there should be) on maximum length of individual path components ("namespace", "repository-name"). At a quick glance, HTTP itself doesn't seem to define constraints; https://www.rfc-editor.org/rfc/rfc3986#section-3.3. Maybe it's fine to have the "total" alone. (it might be fun though to have a "valid" repository, but not able to use it because there's no space left for the total length 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it might be fun though to have a "valid" repository, but not able to use it because there's no space left for the total length
Can you please provide an example for this? I didn't completely understand it 😞
Let me also cc @dmcgowan @stevvooe @milosgajdos for more eyes (changes in these areas area always "fun") |
Signed-off-by: Ozair <ozair.asim@docker.com>
6a6b8f0
to
aaca75e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM (but might have to defer to others)
If I remember correctly, this code path was originally used to qualify the repository name, which we kept short to support a variety of storage backends. The domain was never included in that calculation. As this package gained more scoped, it seems this was an oversight.
I think excluding the domain name from the length check is safe, but we may want to ensure there are sane limits on the domain name. For example, domain components typically have a 63 character limit but getting that right would require more research.
I agree with this sentiment, but getting this reasonably right might be a mission. My personal preference would be for this to be defined in distribution-spec if we must. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR looks good, I'm happy to merge this but I'd like you to open an issue in https://github.com/opencontainers/distribution-spec and reference this PR @ozairasim
It'd be great to have a cross-reference b/w the spec and this PR. it'd be fantastic if the issue listed, other than the description of the problem, what is the behaviour like in the major Registry providers e.g. ECR, GCR, GitLab, etc so the maintainers can gauge the importance and severity of the issue.
Thanks <3
Thanks a lot for the review everyone! And thank you for the suggestion @milosgajdos to open an issue on the spec, I have created the issue to define some limits on the spec as well. Let me know if I can add something else in the issue! |
Linking spec issue: opencontainers/distribution-spec#530 |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [github.com/cenkalti/backoff/v4](https://togithub.com/cenkalti/backoff) | `v4.2.1` -> `v4.3.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fcenkalti%2fbackoff%2fv4/v4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fcenkalti%2fbackoff%2fv4/v4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fcenkalti%2fbackoff%2fv4/v4.2.1/v4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fcenkalti%2fbackoff%2fv4/v4.2.1/v4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [github.com/charmbracelet/huh/spinner](https://togithub.com/charmbracelet/huh) | `v0.0.0-20240306161957-71f31c155b08` -> `v0.3.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fcharmbracelet%2fhuh%2fspinner/v0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fcharmbracelet%2fhuh%2fspinner/v0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fcharmbracelet%2fhuh%2fspinner/v0.0.0-20240306161957-71f31c155b08/v0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fcharmbracelet%2fhuh%2fspinner/v0.0.0-20240306161957-71f31c155b08/v0.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [github.com/distribution/reference](https://togithub.com/distribution/reference) | `v0.5.0` -> `v0.6.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fdistribution%2freference/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fdistribution%2freference/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fdistribution%2freference/v0.5.0/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fdistribution%2freference/v0.5.0/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [github.com/expr-lang/expr](https://togithub.com/expr-lang/expr) | `v1.16.2` -> `v1.16.3` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fexpr-lang%2fexpr/v1.16.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fexpr-lang%2fexpr/v1.16.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fexpr-lang%2fexpr/v1.16.2/v1.16.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fexpr-lang%2fexpr/v1.16.2/v1.16.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [github.com/go-sql-driver/mysql](https://togithub.com/go-sql-driver/mysql) | `v1.8.0` -> `v1.8.1` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgo-sql-driver%2fmysql/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgo-sql-driver%2fmysql/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgo-sql-driver%2fmysql/v1.8.0/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgo-sql-driver%2fmysql/v1.8.0/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>cenkalti/backoff (github.com/cenkalti/backoff/v4)</summary> ### [`v4.3.0`](https://togithub.com/cenkalti/backoff/compare/v4.2.1...v4.3.0) [Compare Source](https://togithub.com/cenkalti/backoff/compare/v4.2.1...v4.3.0) </details> <details> <summary>charmbracelet/huh (github.com/charmbracelet/huh/spinner)</summary> ### [`v0.3.0`](https://togithub.com/charmbracelet/huh/releases/tag/v0.3.0) [Compare Source](https://togithub.com/charmbracelet/huh/compare/v0.2.3...v0.3.0) ### Scrolling, autocomplete, smaller binaries and more! This is a big release with a tonne of new features. - Scrollable Forms - Scrollable Selects and Multi selects - Autocomplete for inputs - 7x smaller binaries - Multi select filtering - Lotsa' bugfixes and quality-of-life improvements To upgrade to `huh` v0.3.0: ```bash go get -u github.com/charmbracelet/huh@latest ``` For details read on! #### Scrollable forms If a form is in a small terminal it will automatically resize to fit the available space and the active group will scroll to stay in view. Form heights can also be set manually with the new [`WithHeight`](https://pkg.go.dev/github.com/charmbracelet/huh@v0.3.0#Form.WithHeight) method. <img width="800" src="https://vhs.charm.sh/vhs-1krvQFrEFaf3H1h7jbQomc.gif" alt="Made with VHS"> #### Select and Multi select Scrolling Select and Multi select fields can now be restricted to a certain height, allowing their options to be scrollable. This means you can now pack in tonnes of options. To make a `Select` or `MultiSelect` scrollable simply set the height on the field or form through the `Height` method. ```go s := huh.NewSelect() .Title("What’s for dinner?") .Options(/* ... */) .Height(height) ``` <img width="600" src="https://vhs.charm.sh/vhs-7vcNAV9T20oeMFraAFd0B7.gif" alt="Made with VHS"> #### Autocomplete Now `Input`s can offer suggestions making it easier for users to fill out inputs. These suggestions can be accepted autocomplete-style with a configurable key binding (which defaults to <kbd>ctrl+e</kbd>). Simply provide a `[]string` to `Suggestions` to enable this feature. ```go huh.NewInput(). Title("What's for lunch?"). Prompt("? "). Suggestions([]string{ "Artichoke", // ... "Cashew Apple", "Cashews", "Cat Food", "Coconut Milk", "Cucumber", "Curry Paste", "Currywurst", // ... }) ``` <img width="600" src="https://vhs.charm.sh/vhs-49L7gt948FkJxfTzfa2qmE.gif" alt="Made with VHS"> #### More helpful help Forms will automatically adjust their help text to indicate to the user whether the form will continue or submit on actions. This works with hidden groups. In the below example, the user will be asked to list their allergies if they select "Yes" otherwise, the form will submit. <img width="600" src="https://vhs.charm.sh/vhs-7skg7qpQYCMG2Y5Vl751si.gif" alt="Made with VHS"> #### Way smaller binaries Huh now produces way smaller binaries! Thanks to [#​94](https://togithub.com/charmbracelet/huh/issues/94) Huh now has a 7x smaller compiled footprint. Before, using `huh@v0.2.3`: 33M ./burger After, using `huh@v0.3.0`: 4.5M ./burger #### Thanks, Vitor! Special thanks to the intrepid [@​vitor-mariano](https://togithub.com/vitor-mariano), one of the earliest `huh` contributors, who came in hot with features, fixes, improvements and good vibes. Thank you, Vitor! #### Changelog ##### New - scrollable multi-select by [@​meowgorithm](https://togithub.com/meowgorithm) in [https://github.com/charmbracelet/huh/pull/71](https://togithub.com/charmbracelet/huh/pull/71) - scrollable select by [@​meowgorithm](https://togithub.com/meowgorithm) in [https://github.com/charmbracelet/huh/pull/76](https://togithub.com/charmbracelet/huh/pull/76) - feat: enable filtering on MultiSelect by [@​vitor-mariano](https://togithub.com/vitor-mariano) in [https://github.com/charmbracelet/huh/pull/81](https://togithub.com/charmbracelet/huh/pull/81) - skippable Fields by [@​maaslalani](https://togithub.com/maaslalani) in [https://github.com/charmbracelet/huh/pull/116](https://togithub.com/charmbracelet/huh/pull/116) - autocomplete suggestions on inputs by [@​maaslalani](https://togithub.com/maaslalani) in [https://github.com/charmbracelet/huh/pull/93](https://togithub.com/charmbracelet/huh/pull/93) - scroll form Inputs by [@​maaslalani](https://togithub.com/maaslalani) in [https://github.com/charmbracelet/huh/pull/95](https://togithub.com/charmbracelet/huh/pull/95) - next / previous dynamic help by [@​maaslalani](https://togithub.com/maaslalani) in [https://github.com/charmbracelet/huh/pull/104](https://togithub.com/charmbracelet/huh/pull/104) - reduce binary size by [@​maaslalani](https://togithub.com/maaslalani) in [https://github.com/charmbracelet/huh/pull/94](https://togithub.com/charmbracelet/huh/pull/94) ##### Fixed - fix Select and MultiSelect height when unfocused by [@​vitor-mariano](https://togithub.com/vitor-mariano) in [https://github.com/charmbracelet/huh/pull/80](https://togithub.com/charmbracelet/huh/pull/80) - use CharLimit in textinput by [@​maaslalani](https://togithub.com/maaslalani) in [https://github.com/charmbracelet/huh/pull/79](https://togithub.com/charmbracelet/huh/pull/79) - select viewport on filtering by [@​vitor-mariano](https://togithub.com/vitor-mariano) in [https://github.com/charmbracelet/huh/pull/84](https://togithub.com/charmbracelet/huh/pull/84) - set default theme on inputs by [@​maaslalani](https://togithub.com/maaslalani) in [https://github.com/charmbracelet/huh/pull/92](https://togithub.com/charmbracelet/huh/pull/92) - multiselect: set height in WithHeight by [@​ardnew](https://togithub.com/ardnew) in [https://github.com/charmbracelet/huh/pull/118](https://togithub.com/charmbracelet/huh/pull/118) - shift+tab would fail if first group is hidden by [@​caarlos0](https://togithub.com/caarlos0) in [https://github.com/charmbracelet/huh/pull/103](https://togithub.com/charmbracelet/huh/pull/103) - prevField should not select skippable fields by [@​maaslalani](https://togithub.com/maaslalani) in [https://github.com/charmbracelet/huh/pull/121](https://togithub.com/charmbracelet/huh/pull/121) **Full Changelog**: charmbracelet/huh@v0.2.3...v0.3.0 *** <a href="https://charm.sh/"><img alt="The Charm logo" src="https://stuff.charm.sh/charm-badge.jpg" width="400"></a> Thoughts? Questions? We love hearing from you. Feel free to reach out on [Twitter](https://twitter.com/charmcli), [The Fediverse](https://mastodon.technology/@​charm), or on [Discord](https://charm.sh/chat). ### [`v0.2.3`](https://togithub.com/charmbracelet/huh/releases/tag/v0.2.3) [Compare Source](https://togithub.com/charmbracelet/huh/compare/v0.2.2...v0.2.3) #### Better Defaults! Huh? `v0.2.3` fixes some bugs for more consistent behaviour across inputs 🐞 - `Text` inputs now update values on each keystroke rather than on `Blur` for consistency. - `Select` and `MultiSelect` read their default values from the initial values set by the `Value` variable if provided. A *special* thanks to [@​vitor-mariano](https://togithub.com/vitor-mariano) for all his contributions to this release 🤗 ##### Defaults Example You can now have preselected options by declaring them in the `Value` variable: ```go var toppings = []string{"Lettuce", "Tomatoes"} var options = huh.NewOptions("Lettuce", "Tomatoes", "Charm Sauce", "Cheese", "Vegan Cheese") huh.NewMultiSelect[string]().Title("Toppings").Options(options...).Value(&toppings).Run() ``` In the above example, `Lettuce` and `Tomatoes` will be preselected by default. #### What's Changed - `Text` value updates by [@​vitor-mariano](https://togithub.com/vitor-mariano) in [https://github.com/charmbracelet/huh/pull/64](https://togithub.com/charmbracelet/huh/pull/64) - Prefill `Select` and `MultiSelect` inputs with default values by [@​vitor-mariano](https://togithub.com/vitor-mariano) in [https://github.com/charmbracelet/huh/pull/62](https://togithub.com/charmbracelet/huh/pull/62) **Full Changelog**: charmbracelet/huh@v0.2.2...v0.2.3 *** <a href="https://charm.sh/"><img alt="The Charm logo" src="https://stuff.charm.sh/charm-badge.jpg" width="400"></a> Thoughts? Questions? We love hearing from you. Feel free to reach out on [Twitter](https://twitter.com/charmcli), [The Fediverse](https://mastodon.technology/@​charm), or on [Discord](https://charm.sh/chat). ### [`v0.2.2`](https://togithub.com/charmbracelet/huh/releases/tag/v0.2.2) [Compare Source](https://togithub.com/charmbracelet/huh/compare/v0.2.1...v0.2.2) #### Better Wrapping 🎁 `Huh?` v0.2.2 improves wrapping of the `Input` and `Text` fields. It applies width set on the form to the inputs to perform wrapping based on the specified or terminal width. - Fixed in [https://github.com/charmbracelet/huh/pull/60](https://togithub.com/charmbracelet/huh/pull/60) #### New Contributors - [@​ddddddO](https://togithub.com/ddddddO) made their first contribution in [https://github.com/charmbracelet/huh/pull/56](https://togithub.com/charmbracelet/huh/pull/56) - [@​vitor-mariano](https://togithub.com/vitor-mariano) made their first contribution in [https://github.com/charmbracelet/huh/pull/57](https://togithub.com/charmbracelet/huh/pull/57) **Full Changelog**: charmbracelet/huh@v0.2.1...v0.2.2 *** <a href="https://charm.sh/"><img alt="The Charm logo" src="https://stuff.charm.sh/charm-badge.jpg" width="400"></a> Thoughts? Questions? We love hearing from you. Feel free to reach out on [Twitter](https://twitter.com/charmcli), [The Fediverse](https://mastodon.social/@​charmcli), or [Discord](https://charm.sh/chat). ### [`v0.2.1`](https://togithub.com/charmbracelet/huh/releases/tag/v0.2.1) [Compare Source](https://togithub.com/charmbracelet/huh/compare/v0.2.0...v0.2.1) ### New Theme! 😸 `huh?` forms can now use Catppuccin themes. (Thanks to the wonderful [@​sgoudham](https://togithub.com/sgoudham) ✨) Simply add the following to your `huh.Form`s: ```go .WithTheme(huh.ThemeCatppuccin()) ``` <img width="500" src="https://github.com/charmbracelet/huh/assets/42545625/fdea4eb5-fa3b-472c-8aa4-9537e9577ab5" /> *** <a href="https://charm.sh/"><img alt="The Charm logo" src="https://stuff.charm.sh/charm-badge.jpg" width="400"></a> Thoughts? Questions? We love hearing from you. Feel free to reach out on [Twitter](https://twitter.com/charmcli), [The Fediverse](https://mastodon.social/@​charmcli), or [Discord](https://charm.sh/chat). ### [`v0.2.0`](https://togithub.com/charmbracelet/huh/releases/tag/v0.2.0) [Compare Source](https://togithub.com/charmbracelet/huh/compare/v0.1.0...v0.2.0) ### Better Help Styles! `Help` Styles now apply on a `Theme` rather than embedded in `FieldStyles`. (Thanks to the wonderful [@​jolheiser](https://togithub.com/jolheiser) ✨) ```go // Old... theme.Focused.Help.ShortKey = lipgloss.NewStyle() //... // Updated! theme.Help.ShortKey = lipgloss.NewStyle() //... ``` *** <a href="https://charm.sh/"><img alt="The Charm logo" src="https://stuff.charm.sh/charm-badge.jpg" width="400"></a> Thoughts? Questions? We love hearing from you. Feel free to reach out on [Twitter](https://twitter.com/charmcli), [The Fediverse](https://mastodon.social/@​charmcli), or [Discord](https://charm.sh/chat). </details> <details> <summary>distribution/reference (github.com/distribution/reference)</summary> ### [`v0.6.0`](https://togithub.com/distribution/reference/releases/tag/v0.6.0) [Compare Source](https://togithub.com/distribution/reference/compare/v0.5.0...v0.6.0) #### What's Changed - remove deprecated SplitHostname by [@​thaJeztah](https://togithub.com/thaJeztah) in [https://github.com/distribution/reference/pull/5](https://togithub.com/distribution/reference/pull/5) - refactor splitDockerDomain to include more documentation by [@​thaJeztah](https://togithub.com/thaJeztah) in [https://github.com/distribution/reference/pull/7](https://togithub.com/distribution/reference/pull/7) - fix typo in readme by [@​xrstf](https://togithub.com/xrstf) in [https://github.com/distribution/reference/pull/10](https://togithub.com/distribution/reference/pull/10) - Exclude domain from name length check by [@​ozairasim](https://togithub.com/ozairasim) in [https://github.com/distribution/reference/pull/9](https://togithub.com/distribution/reference/pull/9) #### New Contributors - [@​xrstf](https://togithub.com/xrstf) made their first contribution in [https://github.com/distribution/reference/pull/10](https://togithub.com/distribution/reference/pull/10) - [@​ozairasim](https://togithub.com/ozairasim) made their first contribution in [https://github.com/distribution/reference/pull/9](https://togithub.com/distribution/reference/pull/9) **Full Changelog**: distribution/reference@v0.5.0...v0.6.0 </details> <details> <summary>expr-lang/expr (github.com/expr-lang/expr)</summary> ### [`v1.16.3`](https://togithub.com/expr-lang/expr/releases/tag/v1.16.3) [Compare Source](https://togithub.com/expr-lang/expr/compare/v1.16.2...v1.16.3) **Expr** is a Go-centric expression language designed to deliver dynamic configurations with unparalleled accuracy, safety, and speed. ```go program, err := expr.Compile(`let x = 2 + 2; x ^ x`) output, err := expr.Run(program, env) ``` **In this release**: - Improved printing for maps: `{(foo + bar): 42}` **Expr Editor** The [Expr Editor](https://expr-lang.org/editor) is an embeddable code editor written in JavaScript with full support of Expr language. **Expr Pro** [Expr Pro](https://expr-lang.org/expr-pro) is a set of extensions for Expr for advanced use cases. It includes expressions explanation, performance profiling, and more. </details> <details> <summary>go-sql-driver/mysql (github.com/go-sql-driver/mysql)</summary> ### [`v1.8.1`](https://togithub.com/go-sql-driver/mysql/releases/tag/v1.8.1) [Compare Source](https://togithub.com/go-sql-driver/mysql/compare/v1.8.0...v1.8.1) #### What's Changed Bugfixes: - fix race condition when context is canceled in [#​1562](https://togithub.com/go-sql-driver/mysql/pull/1562) and [#​1570](https://togithub.com/go-sql-driver/mysql/pull/1570) **Full Changelog**: go-sql-driver/mysql@v1.8.0...v1.8.1 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am" (UTC), Automerge - "before 4am" (UTC). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, 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/woodpecker-ci/woodpecker). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: qwerty287 <qwerty287@posteo.de>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [github.com/distribution/reference](https://togithub.com/distribution/reference) | `v0.5.0` -> `v0.6.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fdistribution%2freference/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fdistribution%2freference/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fdistribution%2freference/v0.5.0/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fdistribution%2freference/v0.5.0/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes <details> <summary>distribution/reference (github.com/distribution/reference)</summary> ### [`v0.6.0`](https://togithub.com/distribution/reference/releases/tag/v0.6.0) [Compare Source](https://togithub.com/distribution/reference/compare/v0.5.0...v0.6.0) #### What's Changed - remove deprecated SplitHostname by [@​thaJeztah](https://togithub.com/thaJeztah) in [https://github.com/distribution/reference/pull/5](https://togithub.com/distribution/reference/pull/5) - refactor splitDockerDomain to include more documentation by [@​thaJeztah](https://togithub.com/thaJeztah) in [https://github.com/distribution/reference/pull/7](https://togithub.com/distribution/reference/pull/7) - fix typo in readme by [@​xrstf](https://togithub.com/xrstf) in [https://github.com/distribution/reference/pull/10](https://togithub.com/distribution/reference/pull/10) - Exclude domain from name length check by [@​ozairasim](https://togithub.com/ozairasim) in [https://github.com/distribution/reference/pull/9](https://togithub.com/distribution/reference/pull/9) #### New Contributors - [@​xrstf](https://togithub.com/xrstf) made their first contribution in [https://github.com/distribution/reference/pull/10](https://togithub.com/distribution/reference/pull/10) - [@​ozairasim](https://togithub.com/ozairasim) made their first contribution in [https://github.com/distribution/reference/pull/9](https://togithub.com/distribution/reference/pull/9) **Full Changelog**: distribution/reference@v0.5.0...v0.6.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "on tuesday" (UTC), 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://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xOC4xNyIsInVwZGF0ZWRJblZlciI6IjM4LjE4LjE3IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZW5vdmF0ZWJvdCJdfQ==--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com> Co-authored-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
@stevvooe out of curiosity, since you mention storage backends, do you know if the |
@jjmaestro Path-length, as well as other factors, such as maximum lengths in storage backends definitely must be taken into account (IIRC s3 has a 1024 limit, but those have to be accounted for prefixes being used). The original limit was 30 characters, but originated from there being only a single registry ("the docker index"), and registry v1; the limit was raised to 255 characters here (which contains links to various other related discussions); |
Fixes: distribution/distribution#2668 by only including the path (repository name) in the total name length check
As recommended by @thaJeztah in distribution/distribution#2668 (comment), there could be constraints on the total reference length, hence it should be mentioned in the new release