Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nelm for openSUSE:Factory checked in at 2026-02-05 17:59:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nelm (Old) and /work/SRC/openSUSE:Factory/.nelm.new.1670 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nelm" Thu Feb 5 17:59:07 2026 rev:22 rq:1331102 version:1.19.1 Changes: -------- --- /work/SRC/openSUSE:Factory/nelm/nelm.changes 2025-12-17 18:40:40.997400405 +0100 +++ /work/SRC/openSUSE:Factory/.nelm.new.1670/nelm.changes 2026-02-05 18:02:12.048139083 +0100 @@ -1,0 +2,28 @@ +Thu Feb 05 06:07:07 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 1.19.1: + * Bug Fixes + - docker hub creds might leak in pod events (#510) (8f8d7b4) + - logs stop showing after 4 hours (#508) (9d31303) + +------------------------------------------------------------------- +Thu Feb 05 06:03:35 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 1.19.0: + * Features + - werf.io/log-regex-skip and + werf.io/log-regex-skip-for-<container> annotations (#506) + (ced6487) + * Bug Fixes + - panic if apiserver connection lost (#507) (d9db36b) + +------------------------------------------------------------------- +Thu Feb 05 05:57:12 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 1.18.1: + * Bug Fixes + - hooks cleaned up too early (#503) (f9986dd) + - inherit deckhouse-controller managed fields (0116483) + - revert: inherit deckhouse-controller managed fields (c3dd378) + +------------------------------------------------------------------- Old: ---- nelm-1.18.0.obscpio New: ---- nelm-1.19.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nelm.spec ++++++ --- /var/tmp/diff_new_pack.fry6qI/_old 2026-02-05 18:02:13.492199657 +0100 +++ /var/tmp/diff_new_pack.fry6qI/_new 2026-02-05 18:02:13.496199825 +0100 @@ -1,7 +1,7 @@ # # spec file for package nelm # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: nelm -Version: 1.18.0 +Version: 1.19.1 Release: 0 Summary: Helm 3 alternative License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.fry6qI/_old 2026-02-05 18:02:13.588203685 +0100 +++ /var/tmp/diff_new_pack.fry6qI/_new 2026-02-05 18:02:13.592203853 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/werf/nelm</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.18.0</param> + <param name="revision">v1.19.1</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.fry6qI/_old 2026-02-05 18:02:13.632205531 +0100 +++ /var/tmp/diff_new_pack.fry6qI/_new 2026-02-05 18:02:13.644206034 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/werf/nelm</param> - <param name="changesrevision">5ba43b55e461563256a785c019aa3bdae247f7a7</param></service></servicedata> + <param name="changesrevision">0b2816ba60ef9b7492a05aeec97aa71670cba19b</param></service></servicedata> (No newline at EOF) ++++++ nelm-1.18.0.obscpio -> nelm-1.19.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/CHANGELOG.md new/nelm-1.19.1/CHANGELOG.md --- old/nelm-1.18.0/CHANGELOG.md 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/CHANGELOG.md 2025-12-10 13:58:40.000000000 +0100 @@ -1,5 +1,34 @@ # Changelog +## [1.19.1](https://github.com/werf/nelm/compare/v1.19.0...v1.19.1) (2025-12-10) + + +### Bug Fixes + +* docker hub creds might leak in pod events ([#510](https://github.com/werf/nelm/issues/510)) ([8f8d7b4](https://github.com/werf/nelm/commit/8f8d7b4991e780e6aba1687f694495f2a8bed001)) +* logs stop showing after 4 hours ([#508](https://github.com/werf/nelm/issues/508)) ([9d31303](https://github.com/werf/nelm/commit/9d313034adba7c3fd6c6358d04212ed8293d9e2c)) + +## [1.19.0](https://github.com/werf/nelm/compare/v1.18.1...v1.19.0) (2025-12-10) + + +### Features + +* `werf.io/log-regex-skip` and `werf.io/log-regex-skip-for-<container>` annotations ([#506](https://github.com/werf/nelm/issues/506)) ([ced6487](https://github.com/werf/nelm/commit/ced6487db92603b8cdbca9154bd64779b56c32a2)) + + +### Bug Fixes + +* panic if apiserver connection lost ([#507](https://github.com/werf/nelm/issues/507)) ([d9db36b](https://github.com/werf/nelm/commit/d9db36b837e41d34548e475bb6f866093faec163)) + +## [1.18.1](https://github.com/werf/nelm/compare/v1.18.0...v1.18.1) (2025-12-08) + + +### Bug Fixes + +* hooks cleaned up too early ([#503](https://github.com/werf/nelm/issues/503)) ([f9986dd](https://github.com/werf/nelm/commit/f9986ddfdd556ce6ccacc1b3b7ad87626d084ea1)) +* inherit `deckhouse-controller` managed fields ([0116483](https://github.com/werf/nelm/commit/0116483ae15553394a4fd7a0e82721fb613fff2d)) +* revert: inherit `deckhouse-controller` managed fields ([c3dd378](https://github.com/werf/nelm/commit/c3dd3788de561b297becef68c15aacc5ceb3011b)) + ## [1.18.0](https://github.com/werf/nelm/compare/v1.17.2...v1.18.0) (2025-11-25) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/README.md new/nelm-1.19.1/README.md --- old/nelm-1.18.0/README.md 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/README.md 2025-12-10 13:58:40.000000000 +0100 @@ -59,6 +59,7 @@ - [`werf.io/log-regex` annotation](#werfiolog-regex-annotation) - [`werf.io/log-regex-for-<container_name>` annotation](#werfiolog-regex-for-container_name-annotation) - [`werf.io/log-regex-skip` annotation](#werfiolog-regex-skip-annotation) + - [`werf.io/log-regex-skip-for-<container_name>` annotation](#werfiolog-regex-skip-for-container_name-annotation) - [`werf.io/skip-logs` annotation](#werfioskip-logs-annotation) - [`werf.io/skip-logs-for-containers` annotation](#werfioskip-logs-for-containers-annotation) - [`werf.io/show-logs-only-for-number-of-replicas` annotation](#werfioshow-logs-only-for-number-of-replicas-annotation) @@ -243,7 +244,7 @@ `nelm release plan install` shows exactly what's going to happen in the cluster on the next release. It shows 100% accurate diffs between current and to-be resource versions, utilizing robust dry-run Server-Side Apply instead of client-side trickery. - + ### Encrypted values and encrypted files @@ -602,6 +603,19 @@ werf.io/log-regex-skip: <re2 regex> ``` +### `werf.io/log-regex-skip-for-<container_name>` annotation + +For the specified container, exclude log lines that match the specified regex. + +Example: +```yaml +werf.io/log-regex-skip-for-backend: ".*ERR|err|WARN|warn.*" +``` +Format ([more info](https://github.com/google/re2/wiki/Syntax)): +``` +werf.io/log-regex-skip-for-backend: <re2 regex> +``` + ### `werf.io/skip-logs` annotation Don't print container logs during resource tracking. @@ -838,9 +852,10 @@ - [x] Advanced resource lifecycle management. - [ ] Nelm v2. - [ ] Migration to Helm v4. -- [ ] The Nelm operator, which can integrate with ArgoCD/Flux. +- [ ] The Nelm operator, which can integrate with ArgoCD/Flux ([#494](https://github.com/werf/nelm/issues/494)). - [ ] An alternative to Helm templating ([#54](https://github.com/werf/nelm/issues/54)). - [ ] Resource patching support ([#115](https://github.com/werf/nelm/issues/115)). +- [ ] DRY values.yaml files ([#495](https://github.com/werf/nelm/issues/495)). - [ ] Downloading charts directly from Git. - [ ] Migrate the built-in secrets management to Mozilla SOPS ([#62](https://github.com/werf/nelm/issues/62)). - [ ] Nelmfile. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/go.mod new/nelm-1.19.1/go.mod --- old/nelm-1.18.0/go.mod 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/go.mod 2025-12-10 13:58:40.000000000 +0100 @@ -40,7 +40,7 @@ github.com/wI2L/jsondiff v0.5.0 github.com/werf/3p-helm v0.0.0-20251113141050-17dd24e6c20b github.com/werf/common-go v0.0.0-20251113140850-a1a98e909e9b - github.com/werf/kubedog v0.13.1-0.20251110132552-6ffc5a117ada + github.com/werf/kubedog v0.13.1-0.20251210123541-25b3a13e42fe github.com/werf/lockgate v0.1.1 github.com/werf/logboek v0.6.1 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/go.sum new/nelm-1.19.1/go.sum --- old/nelm-1.18.0/go.sum 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/go.sum 2025-12-10 13:58:40.000000000 +0100 @@ -411,8 +411,8 @@ github.com/werf/3p-helm v0.0.0-20251113141050-17dd24e6c20b/go.mod h1:UAmQvGZhiUULXQpigm1yqcp57s097kpAHz2EvFtKCSk= github.com/werf/common-go v0.0.0-20251113140850-a1a98e909e9b h1:58850oFrnw5Jy5YaB8QifXz75qpGotfx6qqZ9Q2my1A= github.com/werf/common-go v0.0.0-20251113140850-a1a98e909e9b/go.mod h1:MXS0JR9zut+oR9oEM8PEkdXXoEbKDILTmWopt0z1eZs= -github.com/werf/kubedog v0.13.1-0.20251110132552-6ffc5a117ada h1:QABud6hPXaKnl7sMpvAtu9Rxi/fY2+QzGKtw+7itYo4= -github.com/werf/kubedog v0.13.1-0.20251110132552-6ffc5a117ada/go.mod h1:gu4EY4hxtiYVDy5o6WE2lRZS0YWqrOV0HS//GTYyrUE= +github.com/werf/kubedog v0.13.1-0.20251210123541-25b3a13e42fe h1:fQDk19dTi6CEue5tYR+lroJCFwFrt+zh1kO1b2pjXQo= +github.com/werf/kubedog v0.13.1-0.20251210123541-25b3a13e42fe/go.mod h1:gu4EY4hxtiYVDy5o6WE2lRZS0YWqrOV0HS//GTYyrUE= github.com/werf/lockgate v0.1.1 h1:S400JFYjtWfE4i4LY9FA8zx0fMdfui9DPrBiTciCrx4= github.com/werf/lockgate v0.1.1/go.mod h1:0yIFSLq9ausy6ejNxF5uUBf/Ib6daMAfXuCaTMZJzIE= github.com/werf/logboek v0.6.1 h1:oEe6FkmlKg0z0n80oZjLplj6sXcBeLleCkjfOOZEL2g= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/internal/plan/operation_config.go new/nelm-1.19.1/internal/plan/operation_config.go --- old/nelm-1.18.0/internal/plan/operation_config.go 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/internal/plan/operation_config.go 2025-12-10 13:58:40.000000000 +0100 @@ -114,6 +114,8 @@ FailuresAllowed int IgnoreLogs bool IgnoreLogsForContainers []string + IgnoreLogsByRegex *regexp.Regexp + IgnoreLogsByRegexForContainers map[string]*regexp.Regexp IgnoreReadinessProbeFailsByContainerName map[string]time.Duration NoActivityTimeout time.Duration SaveEvents bool diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/internal/plan/plan_build.go new/nelm-1.19.1/internal/plan/plan_build.go --- old/nelm-1.18.0/internal/plan/plan_build.go 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/internal/plan/plan_build.go 2025-12-10 13:58:40.000000000 +0100 @@ -491,6 +491,8 @@ FailuresAllowed: info.LocalResource.FailuresAllowed, IgnoreLogs: info.LocalResource.SkipLogs, IgnoreLogsForContainers: info.LocalResource.SkipLogsForContainers, + IgnoreLogsByRegex: info.LocalResource.SkipLogsRegex, + IgnoreLogsByRegexForContainers: info.LocalResource.SkipLogsRegexForContainers, IgnoreReadinessProbeFailsByContainerName: info.LocalResource.IgnoreReadinessProbeFailsForContainers, NoActivityTimeout: info.LocalResource.NoActivityTimeout, SaveEvents: info.LocalResource.ShowServiceMessages, @@ -514,7 +516,7 @@ DeletePropagation: info.LocalResource.DeletePropagation, }, } - chain.AddOperation(deleteOp).Stage(stg) + chain.AddOperation(deleteOp).Stage(info.StageDeleteOnSuccessfulInstall) opTrack := &Operation{ Type: OperationTypeTrackAbsence, @@ -525,7 +527,7 @@ ResourceMeta: info.ResourceMeta, }, } - chain.AddOperation(opTrack).Stage(stg) + chain.AddOperation(opTrack).Stage(info.StageDeleteOnSuccessfulInstall) } if err := chain.Do(); err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/internal/plan/plan_build_test.go new/nelm-1.19.1/internal/plan/plan_build_test.go --- old/nelm-1.18.0/internal/plan/plan_build_test.go 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/internal/plan/plan_build_test.go 2025-12-10 13:58:40.000000000 +0100 @@ -1007,6 +1007,7 @@ info := defaultInstallableResourceInfo(defaultInstallableResource(s.releaseName, s.releaseNamespace)) info.MustTrackReadiness = false info.MustDeleteOnSuccessfulInstall = true + info.StageDeleteOnSuccessfulInstall = common.StageUninstall return []*plan.InstallableResourceInfo{ info, @@ -1022,25 +1023,6 @@ }, } - deleteOp := &plan.Operation{ - Type: plan.OperationTypeDelete, - Version: plan.OperationVersionDelete, - Category: plan.OperationCategoryResource, - Config: &plan.OperationConfigDelete{ - ResourceMeta: installableInfos[0].LocalResource.ResourceMeta, - DeletePropagation: installableInfos[0].LocalResource.DeletePropagation, - }, - } - - trackDeletionOp := &plan.Operation{ - Type: plan.OperationTypeTrackAbsence, - Version: plan.OperationVersionTrackAbsence, - Category: plan.OperationCategoryTrack, - Config: &plan.OperationConfigTrackAbsence{ - ResourceMeta: installableInfos[0].LocalResource.ResourceMeta, - }, - } - mainStageStartOp := &plan.Operation{ Type: plan.OperationTypeNoop, Version: plan.OperationVersionNoop, @@ -1077,14 +1059,53 @@ }, } + mainDeleteStageStartOp := &plan.Operation{ + Type: plan.OperationTypeNoop, + Version: plan.OperationVersionNoop, + Category: plan.OperationCategoryMeta, + Config: &plan.OperationConfigNoop{ + OpID: fmt.Sprintf("%s/%s/%s", common.StagePrefix, common.StageUninstall, common.StageStartSuffix), + }, + } + + deleteOp := &plan.Operation{ + Type: plan.OperationTypeDelete, + Version: plan.OperationVersionDelete, + Category: plan.OperationCategoryResource, + Config: &plan.OperationConfigDelete{ + ResourceMeta: installableInfos[0].LocalResource.ResourceMeta, + DeletePropagation: installableInfos[0].LocalResource.DeletePropagation, + }, + } + + trackDeletionOp := &plan.Operation{ + Type: plan.OperationTypeTrackAbsence, + Version: plan.OperationVersionTrackAbsence, + Category: plan.OperationCategoryTrack, + Config: &plan.OperationConfigTrackAbsence{ + ResourceMeta: installableInfos[0].LocalResource.ResourceMeta, + }, + } + + mainDeleteStageEndOp := &plan.Operation{ + Type: plan.OperationTypeNoop, + Version: plan.OperationVersionNoop, + Category: plan.OperationCategoryMeta, + Config: &plan.OperationConfigNoop{ + OpID: fmt.Sprintf("%s/%s/%s", common.StagePrefix, common.StageUninstall, common.StageEndSuffix), + }, + } + ops := []*plan.Operation{ mainStageStartOp, weightStageStartOp, createOp, - deleteOp, - trackDeletionOp, weightStageEndOp, mainStageEndOp, + mainDeleteStageStartOp, + deleteOp, + trackDeletionOp, + mainDeleteStageEndOp, } adjMap := map[string]map[string]graph.Edge[string]{ @@ -1095,18 +1116,24 @@ createOp.ID(): {}, }, createOp.ID(): { + weightStageEndOp.ID(): {}, + }, + weightStageEndOp.ID(): { + mainStageEndOp.ID(): {}, + }, + mainStageEndOp.ID(): { + mainDeleteStageStartOp.ID(): {}, + }, + mainDeleteStageStartOp.ID(): { deleteOp.ID(): {}, }, deleteOp.ID(): { trackDeletionOp.ID(): {}, }, trackDeletionOp.ID(): { - weightStageEndOp.ID(): {}, - }, - weightStageEndOp.ID(): { - mainStageEndOp.ID(): {}, + mainDeleteStageEndOp.ID(): {}, }, - mainStageEndOp.ID(): {}, + mainDeleteStageEndOp.ID(): {}, } return ops, adjMap diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/internal/plan/plan_execute.go new/nelm-1.19.1/internal/plan/plan_execute.go --- old/nelm-1.18.0/internal/plan/plan_execute.go 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/internal/plan/plan_execute.go 2025-12-10 13:58:40.000000000 +0100 @@ -274,6 +274,8 @@ SaveLogsByRegexForContainers: opConfig.SaveLogsByRegexForContainers, IgnoreLogs: opConfig.IgnoreLogs, IgnoreLogsForContainers: opConfig.IgnoreLogsForContainers, + IgnoreLogsByRegex: opConfig.IgnoreLogsByRegex, + IgnoreLogsByRegexForContainers: opConfig.IgnoreLogsByRegexForContainers, SaveEvents: opConfig.SaveEvents, }) if err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/internal/plan/resource_info.go new/nelm-1.19.1/internal/plan/resource_info.go --- old/nelm-1.18.0/internal/plan/resource_info.go 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/internal/plan/resource_info.go 2025-12-10 13:58:40.000000000 +0100 @@ -61,8 +61,9 @@ MustDeleteOnFailedInstall bool MustTrackReadiness bool - Stage common.Stage - Iteration int + Stage common.Stage + StageDeleteOnSuccessfulInstall common.Stage + Iteration int } type DeletableResourceInfo struct { @@ -174,13 +175,14 @@ return lo.Map(stages, func(stg common.Stage, _ int) *InstallableResourceInfo { return &InstallableResourceInfo{ - ResourceMeta: localRes.ResourceMeta, - LocalResource: localRes, - MustInstall: ResourceInstallTypeCreate, - MustDeleteOnSuccessfulInstall: mustDeleteOnSuccess, - MustDeleteOnFailedInstall: mustDeleteOnFailedDeploy(localRes, nil, ResourceInstallTypeCreate, releaseNamespace, trackReadiness), - MustTrackReadiness: trackReadiness, - Stage: stg, + ResourceMeta: localRes.ResourceMeta, + LocalResource: localRes, + MustInstall: ResourceInstallTypeCreate, + MustDeleteOnSuccessfulInstall: mustDeleteOnSuccess, + MustDeleteOnFailedInstall: mustDeleteOnFailedDeploy(localRes, nil, ResourceInstallTypeCreate, releaseNamespace, trackReadiness), + MustTrackReadiness: trackReadiness, + Stage: stg, + StageDeleteOnSuccessfulInstall: stageDeleteOnSuccessfulInstall(mustDeleteOnSuccess, stg), } }), nil } else { @@ -211,16 +213,17 @@ return lo.Map(stages, func(stg common.Stage, _ int) *InstallableResourceInfo { return &InstallableResourceInfo{ - ResourceMeta: localRes.ResourceMeta, - LocalResource: localRes, - GetResult: getObj, - DryApplyResult: dryApplyObj, - DryApplyErr: dryApplyErr, - MustInstall: installType, - MustDeleteOnSuccessfulInstall: mustDeleteOnSuccess, - MustDeleteOnFailedInstall: mustDeleteOnFailedDeploy(localRes, getMeta, installType, releaseNamespace, trackReadiness), - MustTrackReadiness: trackReadiness, - Stage: stg, + ResourceMeta: localRes.ResourceMeta, + LocalResource: localRes, + GetResult: getObj, + DryApplyResult: dryApplyObj, + DryApplyErr: dryApplyErr, + MustInstall: installType, + MustDeleteOnSuccessfulInstall: mustDeleteOnSuccess, + MustDeleteOnFailedInstall: mustDeleteOnFailedDeploy(localRes, getMeta, installType, releaseNamespace, trackReadiness), + MustTrackReadiness: trackReadiness, + Stage: stg, + StageDeleteOnSuccessfulInstall: stageDeleteOnSuccessfulInstall(mustDeleteOnSuccess, stg), } }), nil } @@ -452,6 +455,25 @@ return true } +func stageDeleteOnSuccessfulInstall(shouldDelete bool, installStg common.Stage) common.Stage { + if !shouldDelete { + return "" + } + + switch installStg { + case common.StagePreInstall: + return common.StagePreUninstall + case common.StageInstall: + return common.StageUninstall + case common.StagePostInstall: + return common.StagePostUninstall + case common.StagePostPostInstall: + return common.StagePostPostUninstall + default: + panic("unexpected resource install stage") + } +} + func fixManagedFieldsInCluster(ctx context.Context, releaseNamespace string, getObj *unstructured.Unstructured, meta *spec.ResourceMeta, noRemoveManualChanges bool, clientFactory kube.ClientFactorier) (*unstructured.Unstructured, error) { if changed, err := fixManagedFields(getObj, noRemoveManualChanges); err != nil { return nil, fmt.Errorf("fix managed fields for resource %q: %w", meta.IDHuman(), err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/internal/plan/resource_info_test.go new/nelm-1.19.1/internal/plan/resource_info_test.go --- old/nelm-1.18.0/internal/plan/resource_info_test.go 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/internal/plan/resource_info_test.go 2025-12-10 13:58:40.000000000 +0100 @@ -152,6 +152,7 @@ info.DryApplyResult = defaultResourceSpec(s.releaseName, s.releaseNamespace).Unstruct info.MustInstall = plan.ResourceInstallTypeNone info.MustDeleteOnSuccessfulInstall = true + info.StageDeleteOnSuccessfulInstall = common.StageUninstall return []*plan.InstallableResourceInfo{info} }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/internal/resource/metadata.go new/nelm-1.19.1/internal/resource/metadata.go --- old/nelm-1.18.0/internal/resource/metadata.go 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/internal/resource/metadata.go 2025-12-10 13:58:40.000000000 +0100 @@ -243,6 +243,16 @@ } } + if key, value, found := spec.FindAnnotationOrLabelByKeyPattern(meta.Annotations, common.AnnotationKeyPatternLogRegexSkip); found { + if value == "" { + return fmt.Errorf("invalid value %q for annotation %q, expected non-empty string value", value, key) + } + + if _, err := regexp.Compile(value); err != nil { + return fmt.Errorf("invalid value %q for annotation %q, expected valid regexp", value, key) + } + } + if annotations, found := spec.FindAnnotationsOrLabelsByKeyPattern(meta.Annotations, common.AnnotationKeyPatternLogRegexFor); found { for key, value := range annotations { keyMatches := common.AnnotationKeyPatternLogRegexFor.FindStringSubmatch(key) @@ -269,6 +279,32 @@ } } + if annotations, found := spec.FindAnnotationsOrLabelsByKeyPattern(meta.Annotations, common.AnnotationKeyPatternSkipLogRegexFor); found { + for key, value := range annotations { + keyMatches := common.AnnotationKeyPatternSkipLogRegexFor.FindStringSubmatch(key) + if keyMatches == nil { + return fmt.Errorf("invalid key for annotation %q", key) + } + + containerSubexpIndex := common.AnnotationKeyPatternSkipLogRegexFor.SubexpIndex("container") + if containerSubexpIndex == -1 { + return fmt.Errorf("invalid regexp pattern %q for annotation %q", common.AnnotationKeyPatternSkipLogRegexFor.String(), key) + } + + if len(keyMatches) < containerSubexpIndex+1 { + return fmt.Errorf("can't parse container name for annotation %q", key) + } + + if value == "" { + return fmt.Errorf("invalid value %q for annotation %q, expected non-empty value", value, key) + } + + if _, err := regexp.Compile(value); err != nil { + return fmt.Errorf("invalid value %q for annotation %q, expected valid regular expression", value, key) + } + } + } + if key, value, found := spec.FindAnnotationOrLabelByKeyPattern(meta.Annotations, common.AnnotationKeyPatternNoActivityTimeout); found { if value == "" { return fmt.Errorf("invalid value %q for annotation %q, expected non-empty duration value", value, key) @@ -752,6 +788,15 @@ return regexp.MustCompile(value) } +func skipLogRegex(meta *spec.ResourceMeta) *regexp.Regexp { + _, value, found := spec.FindAnnotationOrLabelByKeyPattern(meta.Annotations, common.AnnotationKeyPatternLogRegexSkip) + if !found { + return nil + } + + return regexp.MustCompile(value) +} + func logRegexesForContainers(meta *spec.ResourceMeta) map[string]*regexp.Regexp { annotations, found := spec.FindAnnotationsOrLabelsByKeyPattern(meta.Annotations, common.AnnotationKeyPatternLogRegexFor) if !found { @@ -765,6 +810,23 @@ container := keyMatches[containerSubexpIndex] regexByContainer[container] = regexp.MustCompile(value) } + + return regexByContainer +} + +func skipLogRegexesForContainers(meta *spec.ResourceMeta) map[string]*regexp.Regexp { + annotations, found := spec.FindAnnotationsOrLabelsByKeyPattern(meta.Annotations, common.AnnotationKeyPatternSkipLogRegexFor) + if !found { + return nil + } + + regexByContainer := map[string]*regexp.Regexp{} + for key, value := range annotations { + keyMatches := common.AnnotationKeyPatternSkipLogRegexFor.FindStringSubmatch(key) + containerSubexpIndex := common.AnnotationKeyPatternSkipLogRegexFor.SubexpIndex("container") + container := keyMatches[containerSubexpIndex] + regexByContainer[container] = regexp.MustCompile(value) + } return regexByContainer } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/internal/resource/resource.go new/nelm-1.19.1/internal/resource/resource.go --- old/nelm-1.18.0/internal/resource/resource.go 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/internal/resource/resource.go 2025-12-10 13:58:40.000000000 +0100 @@ -38,6 +38,8 @@ ShowLogsOnlyForNumberOfReplicas int SkipLogs bool SkipLogsForContainers []string + SkipLogsRegex *regexp.Regexp + SkipLogsRegexForContainers map[string]*regexp.Regexp TrackTerminationMode multitrack.TrackTerminationMode Weight *int ManualInternalDependencies []*InternalDependency @@ -132,6 +134,8 @@ ShowLogsOnlyForNumberOfReplicas: showLogsOnlyForNumberOfReplicas(res.ResourceMeta), SkipLogs: skipLogs(res.ResourceMeta), SkipLogsForContainers: skipLogsForContainers(res.ResourceMeta), + SkipLogsRegex: skipLogRegex(res.ResourceMeta), + SkipLogsRegexForContainers: skipLogRegexesForContainers(res.ResourceMeta), TrackTerminationMode: trackTerminationMode(res.ResourceMeta), Weight: weight(res.ResourceMeta, len(manIntDeps) > 0), ManualInternalDependencies: manIntDeps, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/pkg/common/common.go new/nelm-1.19.1/pkg/common/common.go --- old/nelm-1.18.0/pkg/common/common.go 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/pkg/common/common.go 2025-12-10 13:58:40.000000000 +0100 @@ -23,6 +23,7 @@ const ( DefaultBurstLimit = 100 DefaultChartProvenanceStrategy = "never" // TODO(v2): switch to if-possible + DefaultDeletePropagation = metav1.DeletePropagationForeground DefaultDiffContextLines = 3 DefaultFieldManager = "helm" DefaultLocalKubeVersion = "1.20.0" @@ -38,7 +39,6 @@ StageStartSuffix = "start" StubReleaseName = "stub-release" StubReleaseNamespace = "stub-namespace" - DefaultDeletePropagation = metav1.DeletePropagationForeground ) const ( @@ -197,9 +197,15 @@ AnnotationKeyHumanLogRegex = "werf.io/log-regex" AnnotationKeyPatternLogRegex = regexp.MustCompile(`^werf.io/log-regex$`) + AnnotationKeyHumanLogRegexSkip = "werf.io/log-regex-skip" + AnnotationKeyPatternLogRegexSkip = regexp.MustCompile(`^werf.io/log-regex-skip$`) + AnnotationKeyHumanLogRegexFor = "werf.io/log-regex-for-<container>" AnnotationKeyPatternLogRegexFor = regexp.MustCompile(`^werf.io/log-regex-for-(?P<container>.+)$`) + AnnotationKeyHumanSkipLogRegexFor = "werf.io/log-regex-skip-for-<container>" + AnnotationKeyPatternSkipLogRegexFor = regexp.MustCompile(`^werf.io/log-regex-skip-for-(?P<container>.+)$`) + AnnotationKeyHumanNoActivityTimeout = "werf.io/no-activity-timeout" AnnotationKeyPatternNoActivityTimeout = regexp.MustCompile(`^werf.io/no-activity-timeout$`) Binary files old/nelm-1.18.0/resources/images/nelm-release-plan-install.gif and new/nelm-1.19.1/resources/images/nelm-release-plan-install.gif differ Binary files old/nelm-1.18.0/resources/images/nelm-release-plan-install.png and new/nelm-1.19.1/resources/images/nelm-release-plan-install.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.18.0/trdl_channels.yaml new/nelm-1.19.1/trdl_channels.yaml --- old/nelm-1.18.0/trdl_channels.yaml 2025-11-25 13:29:33.000000000 +0100 +++ new/nelm-1.19.1/trdl_channels.yaml 2025-12-10 13:58:40.000000000 +0100 @@ -2,12 +2,12 @@ - name: "1" channels: - name: alpha - version: 1.17.2 + version: 1.19.0 - name: beta - version: 1.17.2 + version: 1.18.1 - name: ea - version: 1.17.2 + version: 1.18.0 - name: stable - version: 1.16.2 + version: 1.18.0 - name: rock-solid version: 1.16.2 ++++++ nelm.obsinfo ++++++ --- /var/tmp/diff_new_pack.fry6qI/_old 2026-02-05 18:02:14.308233888 +0100 +++ /var/tmp/diff_new_pack.fry6qI/_new 2026-02-05 18:02:14.320234391 +0100 @@ -1,5 +1,5 @@ name: nelm -version: 1.18.0 -mtime: 1764073773 -commit: 5ba43b55e461563256a785c019aa3bdae247f7a7 +version: 1.19.1 +mtime: 1765371520 +commit: 0b2816ba60ef9b7492a05aeec97aa71670cba19b ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/nelm/vendor.tar.gz /work/SRC/openSUSE:Factory/.nelm.new.1670/vendor.tar.gz differ: char 131, line 2
