-
-
Notifications
You must be signed in to change notification settings - Fork 280
0.3.9 no longer merges public fields in embedded structs #139
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
Comments
imdario/mergo, despite its official documentation, does not merge public fields inside private fields as of v.0.3.9: darccio/mergo#139 Fixing that seems non-trivial. Instead, make the restTLSClientConfig a public field of restConfig. The restConfig type itself remains private, so this does not make anything actually public outside the subpackage. This way, the calls to mergo work as expected with both 0.3.8 and 0.3.9. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
I'm checking this. Although, in your example you are using MergeWithOverwrite. |
imdario/mergo, despite its official documentation, does not merge public fields inside private fields as of v.0.3.9: darccio/mergo#139 Fixing that seems non-trivial. Instead, make the restTLSClientConfig a public field of restConfig. The restConfig type itself remains private, so this does not make anything actually public outside the subpackage. This way, the calls to mergo work as expected with both 0.3.8 and 0.3.9. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
FWIW I’ve taken an uninformed attempt at fixing this, but it would be more involved than I can do right now. Enabling merging to happen for any struct field that is a struct and (recursively) contains a public field does not work because that involves assigning to newly-allocated private fields (the embedded struct), which Go rejects. Reverting more of the struct merge code, to use the previous approach of overwriting the existing destination structure’s fields instead of making a copy of the destination as a whole does not work either, because Reverting even more, the whole new concept that In retrospect, it might be possible to bypass the Go policy of preventing edits to unexported fields, but I haven’t looked into that either. |
Fortunately, the use in containers/image can be modified not to use an unexported embedded struct, so this is not really urgent — for that use at least. |
I misunderstood your case. Your
I'm not sure now what is the proper approach here. I feel that there was a hidden bug. I didn't have in mind this scenario of an exported value in an embedded field. |
Ah, that’s a very reasonable reading of the documentation as well. OTOH pre-#105 Pragmatically, c/image is going to change the type definition to use an exported field name: Just because the library tests fail and prevents upgrading the library dependency to 0.3.9 does not mean that any user of the library will know about that, and AFAIK Go modules don’t allow a library to “ban” uses of specific version dependencies when that library is embedded into larger projects, so the library must work against 0.3.9 as released. So, as far as c/image goes, I’m fine with any resolution to this report. |
I found it. This modification appeared because of issue #38. Before it just did deepMerge. My usual policy with PRs is that if previous tests run unmodified, I merge the PR after testing it. I think in both cases I overlooked these modifications. Issue #38 doesn't make sense, as what he wanted was to overwrite a field that contained a *time.Time. Instead, he chose to access the embedded fields inside this struct and overwrite them 😅 His PR broke the described behaviour in the docs. So, to me the library works as intended originally. There is a test for that issue, so the behaviour that the issue 38's contributor expected is covered by the current code. |
I just caught this change because it breaks sprig which is used by Helm. As a user of the library I would call this a breaking behavior change because the behavior was previously one way and is now different. This normally requires incrementing the major version in SemVer. @imdario Is your intention to walk back the functionality change? Or, is this something we need to discuss on Helm/sprig about communicating this or maintaining a fork? |
Note, mergo made a change in 0.3.9 and no longer merges private (properties starting with lowercase letter). Moving to issue prior to that release. Issue is tracked in darccio/mergo#139
Note, there is an issue with a dependency of sprig changing behavior. A test has been added with a description to catch if a behavior breaking change of mergo is used. See darccio/mergo#139 for the mergo issue and sprig for further details on handling this in the future. Closes helm#7533 Signed-off-by: Matt Farina <matt@mattfarina.com>
@mattfarina The intended behaviour is the current one on 0.3.9. You shouldn't rely on being able to merge unexported fields in any case. I understand this feels like a breaking change and I'm willing to release a new major version, but it wasn't an intended breaking change. It was a consequence of reversing a hidden behaviour that was introduced against the definition of the library. Edit: please avoid maintaining forks if possible 😄 |
@imdario three things...
|
@mattfarina I need to give to this some thought. Not sure now how public fields of embedded structs should be handled. I worry this going to keep coming back, although Go reflect returns embedded fields as unexported. So, the library in 0.3.9 is coherent with Go reflect design, but at the same time, it seems to be not useful for the users. |
* fix(install): use ca file for install (helm#7140) Fixes a few bugs related to tls config when installing charts: 1. When installing via relative path, tls config for the selected repository was not being set. 2. The `--ca-file` flag was not being passed when constructing the downloader. 3. Setting tls config was not checking for zero value in repo config, causing flag to get overwritten with empty string. There's still a few oddities here. I would expect that the flag passed in on the command line would override the repo config, but that's not currently the case. Also, we always set the cert, key and ca files as a trio, when they should be set individually depending on combination of flags / repo config. Signed-off-by: James McElwain <jmcelwain@gmail.com> * Repair failing unit tests - failure caused by os.Stat return values for directory size on Linux. Signed-off-by: Pavel Macík <pavel.macik@gmail.com> * Add corresponding unit test to the function in parser.go Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com> * Add hpa boilerplate Signed-off-by: Naseem <naseem@transit.app> * Add unit test for Reverse() in pkg/releaseutil.go Signed-off-by: Dao Cong Tien <tiendc@vn.fujitsu.com> * Use /usr/bin/env for bash After this change, make works on nixos. Signed-off-by: Daniel Poelzleithner <git@poelzi.org> * fix(helm): sort hooks by kind for equal weight Use the same install order for hooks as for normal resources (non-hooks) for hooks with equal weight. This makes resource handling more consistent and helps, when there are hook consisting of several resources like e.g. a service account and a job using this service account. The sort functions are changed from an in place search to an out of place sort to avoid inout parameters. Closes helm#7416. Signed-off-by: Daniel Strobusch <1847260+dastrobu@users.noreply.github.com> * fixed dependencies processing in case of helm install or upgrade for disabled/enabled sub charts Signed-off-by: Florian Hopfensperger <f.hopfensperger@gmail.com> * fix(helm): Don't wait for service to be ready when external IP are set Resolves helm#7513 As the externalIPs are not managed by k8s (according to the doc: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#servicespec-v1-core) helm should not wait for services which set al least one externalIPs. Signed-off-by: Federico Bevione <f.bevione@cognitio.it> * ref(kind_sorter): use an in-place sort for sortManifestsByKind, reduce code duplication Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com> * fix(helm): Reworded logs for clarity Signed-off-by: Federico Bevione <f.bevione@cognitio.it> * fixed missing bullet Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * Fix 'helm template' to also print invalid yaml Signed-off-by: Reinhard Naegele <unguiculus@gmail.com> * fix(helm): improved logs Signed-off-by: Federico Bevione <f.bevione@cognitio.it> * fix(kube): use non global Scheme to convert But instead use a newly initialized Scheme with only Kubernetes native resources added. This ensures the 3-way-merge patch strategy is not accidentally chosen for custom resources due to them being added to the global Scheme by e.g. versioned clients while using Helm as a package, and not a self-contained binary. Signed-off-by: Hidde Beydals <hello@hidde.co> * fix(kube): generate k8s native scheme only once Signed-off-by: Hidde Beydals <hello@hidde.co> * Place rendering invalid YAML under --debug flag Signed-off-by: Reinhard Naegele <unguiculus@gmail.com> * Pass kube user token via cli, introduce HELM_KUBETOKEN envvar Signed-off-by: Vibhav Bobade <vibhav.bobde@gmail.com> * Making fetch-dist get the sha256sum files Fetching these files is part of the release process. When the new file type was added this step was missed. It will cause the sign make target to fail. Signed-off-by: Matt Farina <matt@mattfarina.com> * ref(go.mod): k8s api 0.17.3 Signed-off-by: Rui Chen <chenrui333@gmail.com> * IsReachable() needs to give detailed error message. Signed-off-by: ylvmw <yngliu@vmware.com> * pkg/gates: add unit test for String Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * cmd/helm/search_repo: print info to stderr Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * fix golint failure in pkg/action Signed-off-by: Song Shukun <song.shukun@fujitsu.com> * pkg/helmpath: fix unit test for Windows Signed-off-by: Song Shukun <song.shukun@fujitsu.com> * Adds script to help craft release notes Signed-off-by: Paul Czarkowski <username.taken@gmail.com> * add license headers to release-notes.sh script Signed-off-by: Paul Czarkowski <username.taken@gmail.com> * Pass the apiserver address/port via cli, introduce HELM_KUBEAPISERVER envvar Signed-off-by: Vibhav Bobade <vibhav.bobde@gmail.com> * Fix output of list action when it is failed Signed-off-by: Song Shukun <song.shukun@fujitsu.com> * feat(install): introduce --create-namespace Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com> * feat(comp): Move kube-context completion to Go Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca> * Adopt resources into release with correct instance and managed-by labels Signed-off-by: Jacob LeGrone <git@jacob.work> * Alternative: annotation-only solution Signed-off-by: Jacob LeGrone <git@jacob.work> * feat(comp): Static completion for plugins Allow plugins to optionally specify their sub-cmds and flags through a simple yaml file. When generating the completion script with the command 'helm completion <bash|zsh>' (and only then), helm will look for that yaml file in the plugin's directory. If the file exists, helm will create cobra commands and flags so that the completion script will handle them. Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca> * feat(comp): Dynamic completion for plugins For each plugin, helm registers a ValidArgsFunction which the completion script will call when it needs dynamic completion. This ValidArgsFunction will setup the plugin environment and then call the executable `plugin.complete`, if it is provided by the plugin. The output of the call to `plugin.complete` will be used as completion choices. The last line of the output can optionally be used by the plugin to specify a completion directive. Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca> * feat(tests): Allow to provision memory driver The memory driver is used for go tests. It can also be used from the command-line by setting the environment variable HELM_DRIVER=memory. In the latter case however, there was no way to pre-provision some releases. This commit introduces the HELM_MEMORY_DRIVER_DATA variable which can be used to provide a colon-separated list of yaml files specifying releases to provision automatically. For example: HELM_DRIVER=memory \ HELM_MEMORY_DRIVER_DATA=./testdata/releases.yaml \ helm list --all-namespaces Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca> * fix(helm): add --skipCRDs flag to 'helm upgrade' When 'helm upgrade --install' is run, this will allow to skip installing CRDs Closes helm#7452 Signed-off-by: akash-gautam <gautam.akash04@gmail.com> * pkg/storage/records: add unit test for Get Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * pkg/storage/records: add unit test for Index Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * pkg/storage/records: add unit test for Exists Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * Printing name of chart that do not have requested import value. Signed-off-by: Tomas Kohout <tomas.kohout@leveris.com> * fix(cmd/helm): upgrade go-shellwords Removes workaround introduced in helm#7323 Signed-off-by: Adam Reese <adam@reese.io> * Fix dep build to be compatiable with Helm 2 when requirements use repo alias Signed-off-by: Song Shukun <song.shukun@fujitsu.com> * Fix golangci-lint errors. Signed-off-by: Pavel Macík <pavel.macik@gmail.com> * Return "unknown command" error for unknown subcommands Signed-off-by: Xiangxuan Liu <xiangxuan.liu@rightcapital.com> * Add test for unknown subcommand Signed-off-by: Xiangxuan Liu <xiangxuan.liu@rightcapital.com> * Update README.md Typo fix: Space missed in Markdown header. Signed-off-by: Evgeniy Yablokov <ey@odoscope.com> * fix(helm): stdin values for helm upgrade --install Signed-off-by: Matt Morrissette <yinzara@gmail.com> * Fixes verification output on pull command When using the --verify flag on the pull command the output was an internal Go object rather than useful detail. This is a bug. The output new displays who signed the chart along with the hash. Fixes helm#7624 Signed-off-by: Matt Farina <matt@mattfarina.com> * Add verification output to the verify command This complements the verification output fixed in helm#7706. On verify there should be some detail about the verification rather than no information. Signed-off-by: Matt Farina <matt@mattfarina.com> * fix(ADOPTERS): alphabetize org list (helm#7645) Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com> * add unit test for SecretDelete Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * add unit test for ConfigMapDelete Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * fix(helm): respect resource policy on ungrade Don't delete a resource on upgrade if it is annotated with helm.io/resource-policy=keep. This can cause data loss for users if the annotation is ignored(e.g. for a PVC) Close helm#7677 Signed-off-by: Dong Gang <dong.gang@daocloud.io> * add unit test for RecordsReplace Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * fix(helm): polish goimport Signed-off-by: Dong Gang <dong.gang@daocloud.io> * test(helm): fix client update error Signed-off-by: Dong Gang <dong.gang@daocloud.io> * Save Chart.lock to helm package tar Signed-off-by: Song Shukun <song.shukun@fujitsu.com> * ref(environment): use string checking instead It is more idiomatic to compare the string against the empty string than to check the string's length. Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com> * Add --insecure-skip-tls-verify for repositories (helm#7254) * added --insecure-skip-tls-verify for chart repos Signed-off-by: Matthias Riegler <me@xvzf.tech> * fixed not passing the insecureSkipTLSverify option Signed-off-by: Matthias Riegler <me@xvzf.tech> * fixed testcase Signed-off-by: Matthias Riegler <me@xvzf.tech> * pass proxy when using insecureSkipVerify Signed-off-by: Matthias Riegler <me@xvzf.tech> * Add testcases for insecureSkipVerifyTLS Signed-off-by: Matthias Riegler <me@xvzf.tech> * added missing err check Signed-off-by: Matthias Riegler <me@xvzf.tech> * panic after json marshal fails Signed-off-by: Matthias Riegler <me@xvzf.tech> * fix: add new static linter and fix issues it found (helm#7655) * fix: add new static linter and fix issues it found Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * fixed two additional linter errors. Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * Make the charts cache safe in presence of several Helm instances If several instances of Helm are run at the same moment and try to download the same chart, some of them might see an empty or incomplete file in cache. Prevent that by saving the dowloaded file atomically. Closes helm#7600 Signed-off-by: Mikhail Gusarov <misha@ridge.co> * chore(go.mod): run `go mod tidy` Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com> * Use Create method if no resources need to be adopted Signed-off-by: Jacob LeGrone <git@jacob.work> * Port --devel flag from v2 to v3 Helm v2 PR helm#5141 Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com> * Fix stray modules Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com> * Add unit test Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com> * Solve the issue helm#7749 where proper formating was not being done if --short(-q) option was used with other formating options like json, yaml Signed-off-by: Anshul Verma <ansverma@localhost.localdomain> * Solve the issue helm#7749 where proper formating was not being done if --short(-q) option was used with other formating options like json, yaml Signed-off-by: Anshul Verma <ansverma@localhost.localdomain> * Solve the issue helm#7749 where proper formating was not being done if --short(-q) option was used with other formating options like json, yaml Signed-off-by: Anshul Verma <ansverma@localhost.localdomain> * fix(install): correct append tls config. Signed-off-by: James McElwain <jmcelwain@gmail.com> * Fixing issue where archives created on windows have broken paths When archives are created on windows the path spearator in the archive file is \\. This causes issues when the file is unpacked. For example, on Linux the files are unpacked in a flat structure and \ is part of the file name. This causes comp issues. In Helm v2 the path was set as / when the archive was written. This works on both Windows and POSIX systems. The fix being implemented is to use the ToSlash function to ensure / is used as the separator. Fixes helm#7748 Signed-off-by: Matt Farina <matt@mattfarina.com> * Solve the issue helm#7749 where proper formating was not being done if --short(-q) option was used with other formating options like json, yaml Signed-off-by: Anshul Verma <ansverma@localhost.localdomain> * Add more detail to error messages and support a non-force mode in metadata visitor Signed-off-by: Jacob LeGrone <git@jacob.work> * Add tests Signed-off-by: Jacob LeGrone <git@jacob.work> * Correcting links for release notes Signed-off-by: Bridget Kromhout <bridget@kromhout.org> * fix(cli): Make upgrade check if cluster reachable The 'helm upgrade' command was not checking if the cluster was reachable. Also, 'helm upgrade --install' first checks if the release exists already. If that check fails there is no point in continuing the upgrade. This optimization avoids a second timeout of 30 seconds when trying to do the upgrade. Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca> * Fix a bug in storage/driver/secrets.go Delete() (helm#7348) * Fix a bug in storage/driver/secrets.go * Fix a bug in Delete() in storage/driver/cfgmaps.go (helm#7367) * Add unit test for lint/values.go Signed-off-by: Kim Bao Long <longkb@vn.fujitsu.com> * Improve error message to check in unit test Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com> * helm create command's templates more consistent - Removed most right whitespace chomps except those directly following a template definition where it make sense to not lead with a blank line. The system applied is now to almost always left whitespace chomp but also whitespace chomp right if its the first thing in a file or template definition. - Updated indentation to be systematic throughout all the boilerplace files. Signed-off-by: Erik Sundell <erik.i.sundell@gmail.com> * Snapcraft installation instructions added Helm is available as a snap - https://snapcraft.io/helm; added this to the installation options Signed-off-by: Ihor Dvoretskyi <ihor@linux.com> * pass subchart notes option to install client Signed-off-by: Jon Leonard <jgleonard@gmail.com> * add testing for upgrade --install with subchart notes Signed-off-by: Jon Leonard <jgleonard@gmail.com> * Delete unneeded chart output Signed-off-by: Jon Leonard <jgleonard@gmail.com> * Add fromYamlArray and fromJsonArray template helpers (helm#7712) Signed-off-by: Tuan Nguyen <nmtuan.dev@gmail.com> * fix: update unit test for go 1.14 error string change (helm#7835) * fix: update unit test for go 1.14 error string change Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * changed strategy based on conversation with Adam Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * update test chart to helm3 format Signed-off-by: Jon Leonard <jgleonard@gmail.com> * remove unneeded values files from testchart Signed-off-by: Jon Leonard <jgleonard@gmail.com> * Add unit test for pkg/chart/chart.go Signed-off-by: Hu Shuai <hus.fnst@cn.fujitsu.com> * Improve --show-only flag (helm#7816) * Improve --show-only flag * Ensure consistent manifest ordering * fix(helm): Data race in kube/client Delete func. (helm#7820) helm uninstall has a data race in its Delete function. This resolves it using a mutex. Signed-off-by: Liam Nattrass <liam.d.nattrass+git@gmail.com> * Avoid downloading same chart multiple times Signed-off-by: Andrey Voronkov <voronkovaa@gmail.com> * feat: add pod annotations With the rise of sidecar injectors, pod annotations configuration is becoming more and more important. Signed-off-by: Naseem <naseem@transit.app> * feat: allow image tag override While using the chart version as image tag is the sanest default, it is not uncommon to want to override this if using a custom image, or using helm to manage an in-house app running different tags across different environments. Signed-off-by: Naseem <naseem@transit.app> * Adding notes on semver to create Chart.yaml The version field in the Chart.yaml has a comment describing it but it did not note the version needs to follow SemVer. There have been numerous questions, over time, about this format. Add note here so it's exposed in more places. Signed-off-by: Matt Farina <matt@mattfarina.com> * fix: fixed bug in Dependency.List() (helm#7852) * fix: fixed bug in Dependency.List() A bug in Dependency.List() caused all compressed charts to flag their dependencies as "missing". Closes helm#4431 Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * removed some files from test fixtures Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * Implement support for multiple args for repo remove (helm#7791) * Implement support for multiple args for repo remove Signed-off-by: Andreas Lindhé <andreas@lindhe.io> * Adding template docs to the version command Signed-off-by: Matt Farina <matt@mattfarina.com> * ref(*): kubernetes v1.18 (helm#7831) Upgrade Kubernetes libraries to v0.18.0 Add new lazy load KubernetesClientSet to avoid missing kubeconfig error In kubernetes v1.18 kubeconfig validation was added. Minikube and Kind both remove kubeconfig when stopping clusters. This causes and error when running any helm commands because we initialize the client before executing the command. Signed-off-by: Adam Reese <adam@reese.io> * chore(comp): Remove unnecessary code After the introduction of lazy loading of the Kubernetes client as part of PR helm#7831, there is no longer a need to protect against an incomplete --kube-context value when doing completion. Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca> * fixed capitalization in a few help messages. (helm#7898) Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * fix(storage): preserve last deployed revision (helm#7806) Signed-off-by: Eric Bailey <eric@ericb.me> * feat(cmd/helm): Update Cobra to 1.0.0 release Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca> * updated help text for install --atomic, which was completely inaccurate (helm#7912) Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * add unit test for IsRoot Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * add unit test for ChartPath Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * add unit test for ChartFullPath Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * add unit test for metadata Validate Signed-off-by: Zhou Hao <zhouhao@cn.fujitsu.com> * docs: Update inline docs on action/upgrade.go (helm#7834) * docs: Update inline docs on action/upgrade.go Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * clarify atomic and cleanup-on-fail Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * updated the post-render documentation on action.Upgrade Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * Add unit test for Secrets/ConfigMaps (helm#7765) * test(pkg/storage/secrets): make MockSecretsInterface.List follow ListOptions Signed-off-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com> * test(pkg/storage/secrets): add unit test for Secrets.Query Signed-off-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com> * test(pkg/storage/cfgmaps): make MockConfigMapsInterface.List follow ListOptions Signed-off-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com> * test(pkg/storage/cfgmaps): add unit test for ConfigMaps.Query Signed-off-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com> * fix(tests): fix broken unit tests in storage (helm#7928) * fix(pkg/kube): continue deleting objects when one fails * Continue deleting objects when one fails to minimize the risk of an upgrade ending in an unrecoverable state * Exclude failed deleted object from the returned result set Signed-off-by: Adam Reese <adam@reese.io> * Add an improved user error message for removed k8s apis The error message returned from Kubernetes when APIs are removed is not very informative. This PR adds additional information to the user. It covers the current release manifest APIs. Partial helm#7219 Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com> * test: forward-port regression test from Helm 2 (helm#7927) Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * add softonic to adopters (helm#7918) Signed-off-by: Riccardo Piccoli <riccardo.piccoli@softonic.com> Co-authored-by: Riccardo Piccoli <riccardo.piccoli@softonic.com> * Make get script eaiser for helm versions to live side by side (helm3 etc) (helm#7752) * Make get script eaiser for helm versions to live side by side (helm3 etc) Signed-off-by: Scott Rigby <scott@r6by.com> * Change PROJECT_NAME to BINARY_NAME for purpose clarity Signed-off-by: Scott Rigby <scott@r6by.com> * fix: rebuild chart after dependency update on install (helm#7897) * fix: rebuild chart after dependency update on install Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * add correct debug settings Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * add unit test for function FindPlugins Signed-off-by: ZouYu <zouy.fnst@cn.fujitsu.com> * Updating sprig and semver to newer versions Note, there is an issue with a dependency of sprig changing behavior. A test has been added with a description to catch if a behavior breaking change of mergo is used. See darccio/mergo#139 for the mergo issue and sprig for further details on handling this in the future. Closes helm#7533 Signed-off-by: Matt Farina <matt@mattfarina.com> * Fix nested null value overrides (helm#7743) * Fix nested null value overrides Signed-off-by: Mingxiang Xue <mingxiangxue@gmail.com> * Fix subchart value deletion Signed-off-by: Mingxiang Xue <mingxiangxue@gmail.com> * fix: Fixed a regression that was introduced with changed nil handling (helm#7938) Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * Migrate SQL storage driver to Helm 3 (helm#7635) * Migrate SQL storage driver to Helm 3 Signed-off-by: Elliot Maincourt <e.maincourt@gmail.com> * Update pkg/storage/driver/sql.go Co-Authored-By: Sebastian Pöhn <sebastian.poehn@gmail.com> Signed-off-by: Elliot Maincourt <e.maincourt@gmail.com> * Add authentication to releases_v3 Signed-off-by: Elliot Maincourt <e.maincourt@gmail.com> * Fix migration Signed-off-by: Elliot Maincourt <e.maincourt@gmail.com> * Template the init migration Signed-off-by: Elliot Maincourt <e.maincourt@gmail.com> * Prevent potential SQL injection Signed-off-by: Elliot Maincourt <e.maincourt@gmail.com> * Use an SQL querybuilder Signed-off-by: Elliot Maincourt <e.maincourt@gmail.com> * Remove references to HELM_DRIVER_SQL_DIALECT Signed-off-by: Elliot Maincourt <e.maincourt@gmail.com> Co-authored-by: Sebastian Pöhn <sebastian.poehn@gmail.com> Co-authored-by: Matt Butcher <matt.butcher@microsoft.com> * fix: removed inaccurate comment (helm#7937) Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * Updating get stripts to skip pre-releases A recent change to the get scripts causes them to pickup pre-releases in addition to stable releases. This update causes only stable releases to be fetched by the get scripts. Fixed helm#7941 Signed-off-by: Matt Farina <matt@mattfarina.com> * fix(helm): allow a previously failed release to be upgraded (helm#7653) Signed-off-by: Matt Morrissette <yinzara@gmail.com> * fs_test: use os.Getuid() instead user.Current() to determine if a test is executed with root privileges. This change lower the expectations on test env setup, i.e. tests could be executed in a container under a random UID, without require an user in /etc/passwd Signed-off-by: Predrag Knezevic <pknezevi@redhat.com> * Parse reference templates in predictable order (helm#7702) * Parse reference templates in predictable order Fix issue helm#7701 Signed-off-by: Andre Sencioles <asenci@gmail.com> * Add test case for issue helm#7701 regression Signed-off-by: Andre Sencioles <asenci@gmail.com> * gofmt Signed-off-by: Andre Sencioles <asenci@gmail.com> * fix linting error with lookup function (helm#7969) Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * fix(pkg/plugin): copy plugins directly to the data directory (helm#7962) Copy plugins from the cache rather than create a symlink. fixes: helm#7206 Signed-off-by: Adam Reese <adam@reese.io> * Helm upgrades with --reuse-values and nil user values -- with tests (helm#7959) * return the new values if modifications dont yet exist Signed-off-by: David Pait <DP19@users.noreply.github.com> * fix tests Signed-off-by: David Pait <DP19@users.noreply.github.com> * removed outter if statement as its not needed now Signed-off-by: David Pait <DP19@users.noreply.github.com> * fix(*): remove bom in utf files when loading chart files (helm#6081) Removes the BOM prefix if present, in read files before processing the data. Affects the following pkg: - pkg/chart/loader: directory and archive loader - internal/ignore: when loading .helmignore file Signed-off-by: Thomas FREYSS <thomas.freyss@gmail.com> * fix(cmd/env): make helm env command respect cli flags (helm#7978) Running `helm env` should respect cli flag overrides. Signed-off-by: Adam Reese <adam@reese.io> * fix(pkg/cli): ensure correct configuration from kubeconfig file Bind Helm flags to Kubernetes configuration loader to get a merged config with kubeconfig. Fixes: helm#7539 Signed-off-by: Adam Reese <adam@reese.io> * Modify Circle config to use Go 1.14 (helm#7980) Signed-off-by: Josh Dolitsky <393494+jdolitsky@users.noreply.github.com> * Fixing docs from version to appVersion (helm#7975) In the created chart from `helm create` is notes a tag overrides version. It actually overrides appVersion. Updating the docs to reflect reality. Signed-off-by: Matt Farina <matt@mattfarina.com> * test: add test for bom test data integrity Signed-off-by: Thomas FREYSS <thomas.freyss@gmail.com> * fix: write index.yaml file atomically (helm#7954) * fix: write index.yaml file atomically This refactors the already-existing `AtomicWriteFile` utility to a central location and uses it to write index files atomically. This is done to avoid having half-written index files break client requests. Drive-bys: - Add test for AtomicWriteFile. - Add test IndexFile.WriteFile. Signed-off-by: rabadin <rvbadin@gmail.com> * Review fix: use RenameWithFallback instead of os.Rename Signed-off-by: rabadin <rvbadin@gmail.com> Co-authored-by: rabadin <rvbadin@gmail.com> * Add unit test for pkg/chart/chart.go Signed-off-by: Hu Shuai <hus.fnst@cn.fujitsu.com> * Adding PR template from dev-v2 branch Signed-off-by: Bridget Kromhout <bridget@kromhout.org> * Updating CONTRIBUTING to match current practice Signed-off-by: Bridget Kromhout <bridget@kromhout.org> * Fix : Prints empty list in json/yaml is no repositories are present (helm#7949) * Prints empty repolist in json/yaml if there are no repos and output format is given as json/yaml rather that printing the error msg "no repositories to show" Signed-off-by: Anshul Verma <anshulvermapatel@gmail.com> * Prints empty repolist in json/yaml if there are no repos and output format is given as json/yaml rather that printing the error msg "no repositories to show" Signed-off-by: Anshul Verma <anshulvermapatel@gmail.com> * feat: lint the names of templated resources (helm#8011) Signed-off-by: Matt Butcher <matt.butcher@microsoft.com> * Add support for using OCI references as the dependency repository Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * fix accidental bug in chart saving and fix linting Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * add tests and URL fallback handling Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * extract oci to its own constant Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * refactor to a GetWithDetails method Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * fix GetWithDetails tests Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * fix tests Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * rename ChartContent to Content and use naked return Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * move URL and filename handling into the downloader Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * fix imports Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> * use old filepath.join behavior to avoid calling it twice Signed-off-by: Leo Sjöberg <leo.sjoberg@gmail.com> Co-authored-by: James McElwain <jmcelwain@gmail.com> Co-authored-by: Pavel Macík <pavel.macik@gmail.com> Co-authored-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com> Co-authored-by: Naseem <naseemkullah@gmail.com> Co-authored-by: Dao Cong Tien <tiendc@vn.fujitsu.com> Co-authored-by: Daniel Poelzleithner <git@poelzi.org> Co-authored-by: Daniel Strobusch <1847260+dastrobu@users.noreply.github.com> Co-authored-by: Florian Hopfensperger <f.hopfensperger@gmail.com> Co-authored-by: Federico Bevione <f.bevione@cognitio.it> Co-authored-by: Matthew Fisher <matt.fisher@microsoft.com> Co-authored-by: Matt Butcher <matt.butcher@microsoft.com> Co-authored-by: Reinhard Naegele <unguiculus@gmail.com> Co-authored-by: Hidde Beydals <hello@hidde.co> Co-authored-by: Vibhav Bobade <vibhav.bobde@gmail.com> Co-authored-by: Matt Farina <matt@mattfarina.com> Co-authored-by: Rui Chen <chenrui333@gmail.com> Co-authored-by: ylvmw <yngliu@vmware.com> Co-authored-by: Zhou Hao <zhouhao@cn.fujitsu.com> Co-authored-by: Martin Hickey <martin.hickey@ie.ibm.com> Co-authored-by: Song Shukun <song.shukun@fujitsu.com> Co-authored-by: Taylor Thomas <taylor.thomas@microsoft.com> Co-authored-by: Adam Reese <adamreese@users.noreply.github.com> Co-authored-by: Paul Czarkowski <username.taken@gmail.com> Co-authored-by: Marc Khouzam <marc.khouzam@montreal.ca> Co-authored-by: Jacob LeGrone <git@jacob.work> Co-authored-by: akash-gautam <gautam.akash04@gmail.com> Co-authored-by: Tomáš Kohout <tomas.kohout@leveris.com> Co-authored-by: Adam Reese <adam@reese.io> Co-authored-by: Xiangxuan Liu <xiangxuan.liu@rightcapital.com> Co-authored-by: Evgenii Iablokov <eyablokov@me.com> Co-authored-by: Matt Morrissette <yinzara@gmail.com> Co-authored-by: Dong Gang <dong.gang@daocloud.io> Co-authored-by: Matthias Riegler <me@xvzf.tech> Co-authored-by: Mikhail Gusarov <misha@ridge.co> Co-authored-by: Anshul Verma <ansverma@localhost.localdomain> Co-authored-by: Bridget Kromhout <bridget@kromhout.org> Co-authored-by: tiendc <tiendc@gmail.com> Co-authored-by: Kim Bao Long <longkb@vn.fujitsu.com> Co-authored-by: Erik Sundell <erik.i.sundell@gmail.com> Co-authored-by: Ihor Dvoretskyi <ihor@linux.com> Co-authored-by: Jon Leonard <jgleonard@gmail.com> Co-authored-by: Tuan <me@nmtuan.space> Co-authored-by: Hu Shuai <hus.fnst@cn.fujitsu.com> Co-authored-by: Mario Valderrama <15158349+avorima@users.noreply.github.com> Co-authored-by: lnattrass <liam.d.nattrass@gmail.com> Co-authored-by: Andrey Voronkov <voronkovaa@gmail.com> Co-authored-by: Naseem <naseem@transit.app> Co-authored-by: Andreas Lindhé <lindhe@users.noreply.github.com> Co-authored-by: Eric Bailey <yurrriq@users.noreply.github.com> Co-authored-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com> Co-authored-by: Riccardo Piccoli <riccardo.piccoli@gmail.com> Co-authored-by: Riccardo Piccoli <riccardo.piccoli@softonic.com> Co-authored-by: Scott Rigby <scott@r6by.com> Co-authored-by: ZouYu <zouy.fnst@cn.fujitsu.com> Co-authored-by: uzxmx <mingxiangxue@gmail.com> Co-authored-by: Elliot Maincourt <e.maincourt@gmail.com> Co-authored-by: Sebastian Pöhn <sebastian.poehn@gmail.com> Co-authored-by: Predrag Knezevic <pknezevi@redhat.com> Co-authored-by: Andre Sencioles <asenci@gmail.com> Co-authored-by: David Pait <DP19@users.noreply.github.com> Co-authored-by: Thomas FREYSS <thomas.freyss@gmail.com> Co-authored-by: Josh Dolitsky <393494+jdolitsky@users.noreply.github.com> Co-authored-by: Raphaël <rabadin@cisco.com> Co-authored-by: rabadin <rvbadin@gmail.com> Co-authored-by: Anshul Verma <anshulvermapatel@gmail.com> Co-authored-by: Leo Sjöberg <leo.sjoberg@gmail.com>
@mattfarina I'm testing your linked test, reducing to the core behavior of spring's func TestIssue139(t *testing.T) {
srcs := []map[string]interface{}{
{
"h": 10,
"i": "i",
"j": "j",
},
{
"a": 1,
"b": 2,
"d": map[string]interface{}{
"e": "four",
},
"g": []int{6, 7},
"i": "aye",
"j": "jay",
"k": map[string]interface{}{
"l": false,
},
},
}
dst := map[string]interface{}{
"a": "one",
"c": 3,
"d": map[string]interface{}{
"f": 5,
},
"g": []int{8, 9},
"i": "eye",
"k": map[string]interface{}{
"l": true,
},
}
for _, src := range srcs {
if err := Merge(&dst, src); err != nil {
t.Fatal(err)
}
}
expected := map[string]interface{}{
"a": "one", // key overridden
"b": 2, // merged from src1
"c": 3, // merged from dst
"d": map[string]interface{}{ // deep merge
"e": "four",
"f": 5,
},
"g": []int{8, 9}, // overridden - arrays are not merged
"h": 10, // merged from src2
"i": "eye", // overridden twice
"j": "jay", // overridden and merged
"k": map[string]interface{}{
"l": true, // overridden
},
}
assert.Equal(t, expected, dst)
} I'm a bit confused because your expectations aren't fulfilled in earlier versions. These are the results by version:
I'm running these tests with the following commands: dario@thinkpad:~/go/src/github.com/imdario/mergo$ git checkout $VERSION
dario@thinkpad:~/go/src/github.com/imdario/mergo$ go test -timeout 30s github.com/imdario/mergo -run "^(TestIssue139)$" -count=1 -v I think your issue isn't related to this one but with #143. |
Resolved by reverting PR #105 |
Note, there is an issue with a dependency of sprig changing behavior. A test has been added with a description to catch if a behavior breaking change of mergo is used. See darccio/mergo#139 for the mergo issue and sprig for further details on handling this in the future. Closes helm#7533 Signed-off-by: Matt Farina <matt@mattfarina.com> Signed-off-by: Matheus Hunsche <matheus.hunsche@ifood.com.br>
Replace mergo version used by controller-runtime which is broken [0], until we can move to controller-runtime 0.7.0 which no longer uses this version. Fixes fluxcd#152 [0]: darccio/mergo#139
Replace mergo version used by controller-runtime which is broken [0], until we can move to controller-runtime 0.7.0 which no longer uses this version. Fixes fluxcd#152 [0]: darccio/mergo#139 Signed-off-by: Sean Eagan <seaneagan1@gmail.com>
The documentation of
Merge
includes:Yet in 0.3.9:
and that used to be the case with 0.3.8, returning
0.3.9 ignores the embedded struct entirely, returning
Using a public name for the
inner
struct does cause the fields to be merged recursively.AFAICS this was intentional or at least noticed, #105 (review) points to a test that broke and had to be changed, but there was no further rationale. But that doesn’t really say why this had to change.
The text was updated successfully, but these errors were encountered: