Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package werf for openSUSE:Factory checked in 
at 2026-03-25 21:19:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/werf (Old)
 and      /work/SRC/openSUSE:Factory/.werf.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "werf"

Wed Mar 25 21:19:16 2026 rev:68 rq:1342373 version:2.63.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/werf/werf.changes        2026-03-24 
18:50:06.829538061 +0100
+++ /work/SRC/openSUSE:Factory/.werf.new.8177/werf.changes      2026-03-27 
06:52:33.553522532 +0100
@@ -1,0 +2,10 @@
+Wed Mar 25 06:14:21 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 2.63.1:
+  * Bug Fixes
+    - deploy: adopt managed fields after migration from helm to
+      nelm (#7406) (eab87e5)
+    - deploy: pass option for yaml validator to allow duplicate map
+      key (#7408) (c9ea743)
+
+-------------------------------------------------------------------

Old:
----
  werf-2.63.0.obscpio

New:
----
  werf-2.63.1.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ werf.spec ++++++
--- /var/tmp/diff_new_pack.RwvOLh/_old  2026-03-27 06:52:34.841575708 +0100
+++ /var/tmp/diff_new_pack.RwvOLh/_new  2026-03-27 06:52:34.845575873 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           werf
-Version:        2.63.0
+Version:        2.63.1
 Release:        0
 Summary:        CLI for the Werf CI/CD system
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.RwvOLh/_old  2026-03-27 06:52:35.037583800 +0100
+++ /var/tmp/diff_new_pack.RwvOLh/_new  2026-03-27 06:52:35.057584626 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/werf/werf</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v2.63.0</param>
+    <param name="revision">v2.63.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.RwvOLh/_old  2026-03-27 06:52:35.133587763 +0100
+++ /var/tmp/diff_new_pack.RwvOLh/_new  2026-03-27 06:52:35.153588589 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/werf/werf</param>
-              <param 
name="changesrevision">196f19a9da33d622ceb0f29e855335c44eb02f39</param></service></servicedata>
+              <param 
name="changesrevision">2713df07ca09297c939e73250fb4344825e828dd</param></service></servicedata>
 (No newline at EOF)
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/werf/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.werf.new.8177/vendor.tar.gz differ: char 25, line 1

++++++ werf-2.63.0.obscpio -> werf-2.63.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/werf-2.63.0/CHANGELOG.md new/werf-2.63.1/CHANGELOG.md
--- old/werf-2.63.0/CHANGELOG.md        2026-03-16 21:49:47.000000000 +0100
+++ new/werf-2.63.1/CHANGELOG.md        2026-03-23 16:01:58.000000000 +0100
@@ -1,5 +1,12 @@
 # Changelog
 
+## [2.63.1](https://github.com/werf/werf/compare/v2.63.0...v2.63.1) 
(2026-03-23)
+
+### Bug Fixes
+
+* **deploy:** adopt managed fields after migration from helm to nelm 
([#7406](https://github.com/werf/werf/issues/7406)) 
([eab87e5](https://github.com/werf/werf/commit/eab87e518f81ea86384f081bb509bae3b00a3104))
+* **deploy:** pass option for yaml validator to allow duplicate map key 
([#7408](https://github.com/werf/werf/issues/7408)) 
([c9ea743](https://github.com/werf/werf/commit/c9ea743659a900b65c12ebcacc30ddf1b6147a99))
+
 ## [2.63.0](https://github.com/werf/werf/compare/v2.62.2...v2.63.0) 
(2026-03-16)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/werf-2.63.0/docs/pages_ru/reference/deploy_annotations.md 
new/werf-2.63.1/docs/pages_ru/reference/deploy_annotations.md
--- old/werf-2.63.0/docs/pages_ru/reference/deploy_annotations.md       
2026-03-16 21:49:47.000000000 +0100
+++ new/werf-2.63.1/docs/pages_ru/reference/deploy_annotations.md       
2026-03-23 16:01:58.000000000 +0100
@@ -6,36 +6,36 @@
 
 Данная статья содержит описание аннотаций, которые меняют поведение механизма 
отслеживания ресурсов в процессе выката с помощью werf. Все аннотации должны 
быть объявлены в шаблонах чарта.
 
- - [`werf.io/weight`](#resource-weight) — задает вес ресурса, который 
определяет порядок развертывания ресурсов.
- - [`werf.io/deploy-dependency-ANY_NAME`](#resource-dependencies) — задать 
зависимость от другого ресурса, что повлияет на порядок развертывания ресурсов.
- - 
[`<any-name>.external-dependency.werf.io/resource`](#external-dependency-resource)
 — дождаться, пока указанная внешняя зависимость будет запущена, и только после 
этого приступить к развертыванию аннотированного ресурса.
- - 
[`<any-name>.external-dependency.werf.io/namespace`](#external-dependency-namespace)
 — задать пространство имен для внешней зависимости.
- - [`werf.io/ownership`](#resource-ownership) — определяет, как обрабатывается 
удаление ресурса и управление аннотациями релиза.
- - [`werf.io/deploy-on`](#conditional-resource-deployment) — определяет, когда 
рендерить ресурс для выката и на каких стадиях он должен быть задеплоен.
- - [`werf.io/delete-policy`](#resource-delete-policy) — управляет удалением 
ресурса во время его выката.
- - [`werf.io/delete-propagation`](#delete-propagation) — определяет политику 
удаления дочерних ресурсов.
- - [`werf.io/delete-dependency-ANY_NAME`](#delete-dependencies) — задать 
зависимость от другого ресурса, что повлияет на порядок удаления ресурсов.
- - [`werf.io/replicas-on-creation`](#replicas-on-creation) — задаёт количество 
реплик, которое должно быть установлено при первичном создании ресурса (полезно 
при использовании HPA).
- - [`werf.io/track-termination-mode`](#track-termination-mode) — определяет 
условие при котором werf остановит отслеживание ресурса.
- - [`werf.io/fail-mode`](#fail-mode) — определяет как werf обработает ресурс в 
состоянии ошибки. Ресурс в свою очередь перейдет в состояние ошибки после 
превышения порога допустимых ошибок, обнаруженных при отслеживании этого 
ресурса в процессе выката.
- - [`werf.io/failures-allowed-per-replica`](#failures-allowed-per-replica) — 
определяет порог ошибок, обнаруживаемых при отслеживании этого ресурса в 
процессе выката, после превышения которого ресурс перейдет в состояние ошибки. 
werf обработает это состояние в соответствии с настройкой [fail 
mode](#fail-mode).
- - 
[`werf.io/ignore-readiness-probe-fails-for-CONTAINER_NAME`](#ignore-readiness-probe-failures-for-container)
 — переопределить высчитываемый автоматически период, в течение которого 
неуспешные readiness-пробы будут игнорироваться и не будут переводить ресурс в 
состояние ошибки.
- - [`werf.io/no-activity-timeout`](#no-activity-timeout) — переопределить 
период неактивности, по истечении которого ресурс перейдет в состояние ошибки.
- - [`werf.io/log-regex`](#log-regex) — показывать в логах только те строки 
вывода ресурса, которые подходят под указанный шаблон.
- - [`werf.io/log-regex-for-CONTAINER_NAME`](#log-regex-for-container) — 
показывать в логах только те строки вывода для указанного контейнера, которые 
подходят под указанный шаблон.
- - [`werf.io/log-regex-skip`](#log-regex-skip) — не показывать строки логов, 
которые подходят под указанный шаблон.
- - 
[`werf.io/log-regex-skip-for-CONTAINER_NAME`](#log-regex-skip-for-container) — 
не показывать строки логов, которые подходят под указанный шаблон, но только 
для указанного контейнера.
- - [`werf.io/skip-logs`](#skip-logs) — выключить логирование вывода для 
ресурса.
- - [`werf.io/skip-logs-for-containers`](#skip-logs-for-containers) — выключить 
логирование вывода для указанного контейнера.
- - 
[`werf.io/show-logs-only-for-number-of-replicas`](#show-logs-only-for-number-of-replicas)
 — включить логирование вывода только для указанного числа реплик ресурса.
- - [`werf.io/show-logs-only-for-containers`](#show-logs-only-for-containers) — 
включить логирование вывода только для указанных контейнеров ресурса.
- - [`werf.io/show-service-messages`](#show-service-messages) — включить вывод 
сервисных сообщений и событий Kubernetes для данного ресурса.
- - [`werf.io/sensitive`](#mark-resource-as-sensitive) — пометить ресурс как 
содержащий чувствительные данные, чтобы werf не показывал диффы для этого 
ресурса в `werf plan`.
- - [`werf.io/sensitive-paths`](#mark-fields-of-a-resource-as-sensitive) — 
пометить поля ресурса как чувствительные, чтобы werf не показывал диффы для 
этих полей в `werf plan`.
+ - [`werf.io/weight`](#вес-ресурса) — задает вес ресурса, который определяет 
порядок развертывания ресурсов.
+ - [`werf.io/deploy-dependency-ANY_NAME`](#зависимости-ресурса) — задать 
зависимость от другого ресурса, что повлияет на порядок развертывания ресурсов.
+ - 
[`<any-name>.external-dependency.werf.io/resource`](#внешняя-зависимость-ресурс)
 — дождаться, пока указанная внешняя зависимость будет запущена, и только после 
этого приступить к развертыванию аннотированного ресурса.
+ - 
[`<any-name>.external-dependency.werf.io/namespace`](#внешняя-зависимость-пространство-имен)
 — задать пространство имен для внешней зависимости.
+ - [`werf.io/ownership`](#право-владения-ресурсом) — определяет, как 
обрабатывается удаление ресурса и управление аннотациями релиза.
+ - [`werf.io/deploy-on`](#условный-деплой-ресурса) — определяет, когда 
рендерить ресурс для выката и на каких стадиях он должен быть задеплоен.
+ - [`werf.io/delete-policy`](#политика-удаления-ресурса) — управляет удалением 
ресурса во время его выката.
+ - [`werf.io/delete-propagation`](#распространение-удаления) — определяет 
политику удаления дочерних ресурсов.
+ - [`werf.io/delete-dependency-ANY_NAME`](#зависимости-при-удалении) — задать 
зависимость от другого ресурса, что повлияет на порядок удаления ресурсов.
+ - [`werf.io/replicas-on-creation`](#количество-реплик-при-создании) — задаёт 
количество реплик, которое должно быть установлено при первичном создании 
ресурса (полезно при использовании HPA).
+ - [`werf.io/track-termination-mode`](#режим-остановки-отслеживания) — 
определяет условие при котором werf остановит отслеживание ресурса.
+ - [`werf.io/fail-mode`](#режим-обработки-ошибок) — определяет как werf 
обработает ресурс в состоянии ошибки. Ресурс в свою очередь перейдет в 
состояние ошибки после превышения порога допустимых ошибок, обнаруженных при 
отслеживании этого ресурса в процессе выката.
+ - 
[`werf.io/failures-allowed-per-replica`](#допустимое-количество-ошибок-на-реплику)
 — определяет порог ошибок, обнаруживаемых при отслеживании этого ресурса в 
процессе выката, после превышения которого ресурс перейдет в состояние ошибки. 
werf обработает это состояние в соответствии с настройкой [fail 
mode](#режим-обработки-ошибок).
+ - 
[`werf.io/ignore-readiness-probe-fails-for-CONTAINER_NAME`](#игнорирование-неудачных-readiness-проб-контейнера)
 — переопределить высчитываемый автоматически период, в течение которого 
неуспешные readiness-пробы будут игнорироваться и не будут переводить ресурс в 
состояние ошибки.
+ - [`werf.io/no-activity-timeout`](#таймаут-отсутствия-активности) — 
переопределить период неактивности, по истечении которого ресурс перейдет в 
состояние ошибки.
+ - [`werf.io/log-regex`](#шаблон-для-включения-логов) — показывать в логах 
только те строки вывода ресурса, которые подходят под указанный шаблон.
+ - 
[`werf.io/log-regex-for-CONTAINER_NAME`](#шаблон-для-включения-логов-контейнера)
 — показывать в логах только те строки вывода для указанного контейнера, 
которые подходят под указанный шаблон.
+ - [`werf.io/log-regex-skip`](#шаблон-для-исключения-логов) — не показывать 
строки логов, которые подходят под указанный шаблон.
+ - 
[`werf.io/log-regex-skip-for-CONTAINER_NAME`](#шаблон-для-исключения-логов-контейнера)
 — не показывать строки логов, которые подходят под указанный шаблон, но только 
для указанного контейнера.
+ - [`werf.io/skip-logs`](#отключение-логов) — выключить логирование вывода для 
ресурса.
+ - [`werf.io/skip-logs-for-containers`](#отключение-логов-для-контейнеров) — 
выключить логирование вывода для указанного контейнера.
+ - 
[`werf.io/show-logs-only-for-number-of-replicas`](#логи-для-указанного-числа-реплик)
 — включить логирование вывода только для указанного числа реплик ресурса.
+ - [`werf.io/show-logs-only-for-containers`](#логи-для-указанных-контейнеров) 
— включить логирование вывода только для указанных контейнеров ресурса.
+ - [`werf.io/show-service-messages`](#отображение-служебных-сообщений) — 
включить вывод сервисных сообщений и событий Kubernetes для данного ресурса.
+ - [`werf.io/sensitive`](#пометка-ресурса-как-чувствительного) — пометить 
ресурс как содержащий чувствительные данные, чтобы werf не показывал диффы для 
этого ресурса в `werf plan`.
+ - [`werf.io/sensitive-paths`](#пометка-полей-ресурса-как-чувствительных) — 
пометить поля ресурса как чувствительные, чтобы werf не показывал диффы для 
этих полей в `werf plan`.
 
 Больше информации о том, что такое чарт, шаблоны и пр. доступно в [главе про 
Helm]({{ "usage/deploy/overview.html" | true_relative_url }}).
 
-## Resource weight
+## Вес ресурса
 
 `werf.io/weight: "NUM"`
 
@@ -49,7 +49,7 @@
 
 Дополнительная информация доступна в разделе [Порядок развертывания]({{ 
"/usage/deploy/deployment_order.html" | true_relative_url }}).
 
-## Resource dependencies
+## Зависимости ресурса
 
 `werf.io/deploy-dependency-ANY_NAME: 
state=STATE[,name=NAME][,namespace=NAMESPACE][,kind=KIND][,group=GROUP][,version=VERSION]`
 
@@ -69,7 +69,7 @@
 
 Больше информации: [порядок развертывания]({{ 
"/usage/deploy/deployment_order.html" | true_relative_url }})
 
-## External dependency resource
+## Внешняя зависимость: ресурс
 
 `<any-name>.external-dependency.werf.io/resource: type[.version.group]/name`
 
@@ -79,13 +79,13 @@
 
 Задает внешнюю зависимость для ресурса. Ресурс с аннотацией будет развернут 
только после создания и готовности внешней зависимости.
 
-## External dependency namespace
+## Внешняя зависимость: пространство имен
 
 `<any-name>.external-dependency.werf.io/namespace: name`
 
-Указывает пространство имен для внешней зависимости, заданной [соответствующей 
аннотацией](#external-dependency-resource). Префикс `<any-name>` должен быть 
таким же, как у аннотации, определяющей внешнюю зависимость.
+Указывает пространство имен для внешней зависимости, заданной [соответствующей 
аннотацией](#внешняя-зависимость-ресурс). Префикс `<any-name>` должен быть 
таким же, как у аннотации, определяющей внешнюю зависимость.
 
-## Resource ownership
+## Право владения ресурсом
 
 `werf.io/ownership: release|anyone`
 
@@ -95,7 +95,7 @@
 
 Обычные ресурсы по умолчанию имеют владельцем `release`, а хуки и CRD из 
директории `crds` — `anyone`.
 
-## Conditional resource deployment
+## Условный деплой ресурса
 
 `werf.io/deploy-on: 
pre-install|install|post-install|pre-upgrade|upgrade|post-upgrade|pre-rollback|rollback|post-rollback|pre-delete|delete|post-delete`
 
@@ -107,7 +107,7 @@
 
 По умолчанию для обычных ресурсов используется значение 
`install,upgrade,rollback`, для хуков — значения из `helm.sh/hook`.
 
-## Resource delete policy
+## Политика удаления ресурса
 
 `werf.io/delete-policy: 
before-creation|before-creation-if-immutable|succeeded|failed`
 
@@ -119,7 +119,7 @@
 
 По умолчанию для обычных ресурсов политика удаления не задана, а для хуков 
значения берутся из `helm.sh/hook-delete-policy` и преобразуются в значения в 
`werf.io/delete-policy`.
 
-## Delete propagation
+## Распространение удаления
 
 `werf.io/delete-propagation: Foreground|Background|Orphan`
 
@@ -127,7 +127,7 @@
 
 Значением по умолчанию является `Foreground`.
 
-## Delete dependencies
+## Зависимости при удалении
 
 `werf.io/delete-dependency-ANY_NAME: 
state=STATE[,name=NAME][,namespace=NAMESPACE][,kind=KIND][,group=GROUP][,version=VERSION]`
 
@@ -147,7 +147,7 @@
 
 Больше информации: [порядок развертывания]({{ 
"/usage/deploy/deployment_order.html" | true_relative_url }})
 
-## Replicas on creation
+## Количество реплик при создании
 
 Когда для ресурса включён HPA, использование `spec.replicas` может привести к 
непредсказуемому поведению, потому что каждый раз когда происходит converge для 
werf chart через CI/CD количество реплик ресурса будет сброшено к статически 
заданному в шаблонах чарта значению `spec.replicas`, даже если это значение 
изменил HPA в рантайме.
 
@@ -159,7 +159,7 @@
 
 **ЗАМЕЧАНИЕ** `"NUM"` должно быть указано строкой (в двойных кавычках), потому 
что аннотации не поддерживают передачу других типов данных кроме строк, 
аннотации с другим типом данных будут проигнорированы.
 
-## Track termination mode
+## Режим остановки отслеживания
 
 `"werf.io/track-termination-mode": WaitUntilResourceReady|NonBlocking`
 
@@ -173,7 +173,7 @@
 
 **СОВЕТ** Используйте аннотацию `"werf.io/track-termination-mode": 
NonBlocking`, когда описываете в релизе объект StatefulSet с ручной стратегией 
выката (параметр `OnDelete`) и не хотите блокировать весь процесс деплоя из-за 
этого объекта, дожидаясь его обновления.
 
-## Fail mode
+## Режим обработки ошибок
 
 `"werf.io/fail-mode": 
FailWholeDeployProcessImmediately|HopeUntilEndOfDeployProcess|IgnoreAndContinueDeployProcess`
 
@@ -182,13 +182,13 @@
  * `HopeUntilEndOfDeployProcess` — в случае ошибки при деплое ресурса с данной 
аннотацией его отслеживание будет продолжаться, пока есть другие ресурсы, 
готовности которых ожидает процесс деплоя, либо все оставшиеся ресурсы имеют 
такую-же аннотацию. Если с ошибкой остался только этот ресурс или несколько 
ресурсов с такой-же аннотацией, то в случае сохранения ошибки весь процесс 
деплоя завершается с ошибкой.
  * `IgnoreAndContinueDeployProcess` — ошибка при деплое ресурса с данной 
аннотацией не влияет на весь процесс деплоя.
 
-## Failures allowed per replica
+## Допустимое количество ошибок на реплику
 
 `"werf.io/failures-allowed-per-replica": "NUMBER"`
 
-По умолчанию, при отслеживании статуса ресурса допускается срабатывание ошибки 
1 раз, прежде чем весь процесс деплоя считается ошибочным. Этот параметр влияет 
на поведение настройки [Fail mode](#fail-mode): определяет порог срабатывания, 
после которого начинает работать режим реакции на ошибки.
+По умолчанию, при отслеживании статуса ресурса допускается срабатывание ошибки 
1 раз, прежде чем весь процесс деплоя считается ошибочным. Этот параметр влияет 
на поведение настройки [Fail mode](#режим-обработки-ошибок): определяет порог 
срабатывания, после которого начинает работать режим реакции на ошибки.
 
-## Ignore readiness probe failures for container
+## Игнорирование неудачных readiness-проб контейнера
 
 `"werf.io/ignore-readiness-probe-fails-for-CONTAINER_NAME": "TIME"`
 
@@ -203,7 +203,7 @@
 Пример:
 `"werf.io/ignore-readiness-probe-fails-for-backend": "20s"`
 
-## No activity timeout
+## Таймаут отсутствия активности
 
 `werf.io/no-activity-timeout: "TIME"`
 
@@ -217,31 +217,31 @@
 
 Формат записи значения описан [здесь](https://pkg.go.dev/time#ParseDuration).
 
-## Log regex
+## Шаблон для включения логов
 
 `"werf.io/log-regex": RE2_REGEX`
 
 Определяет [Re2 regex](https://github.com/google/re2/wiki/Syntax) шаблон, 
применяемый ко всем логам всех контейнеров всех подов ресурса с этой 
аннотацией. werf будет выводить только те строки лога, которые удовлетворяют 
regex-шаблону. По умолчанию werf выводит все строки лога.
 
-## Log regex for container
+## Шаблон для включения логов контейнера
 
 `"werf.io/log-regex-for-CONTAINER_NAME": RE2_REGEX`
 
 Определяет [Re2 regex](https://github.com/google/re2/wiki/Syntax) шаблон, 
применяемый к логам контейнера с именем `CONTAINER_NAME` всех подов с данной 
аннотацией. werf будет выводить только те строки лога, которые удовлетворяют 
regex-шаблону. По умолчанию werf выводит все строки лога.
 
-## Log regex skip
+## Шаблон для исключения логов
 
 `"werf.io/log-regex-skip": RE2_REGEX`
 
 Определяет [Re2 regex](https://github.com/google/re2/wiki/Syntax) шаблон, 
применяемый ко всем логам всех контейнеров всех подов ресурса с этой 
аннотацией. werf не будет выводить те строки лога, которые удовлетворяют 
regex-шаблону. По умолчанию werf выводит все строки лога.
 
-## Log regex skip for container
+## Шаблон для исключения логов контейнера
 
 `"werf.io/log-regex-skip-for-CONTAINER_NAME": RE2_REGEX`
 
 Определяет [Re2 regex](https://github.com/google/re2/wiki/Syntax) шаблон, 
применяемый к логам контейнера с именем `CONTAINER_NAME` всех подов с данной 
аннотацией. werf будет скрывать те строки лога, которые удовлетворяют 
regex-шаблону. По умолчанию werf выводит все строки лога.
 
-## Skip logs
+## Отключение логов
 
 `"werf.io/skip-logs": "true"|"false"`
 
@@ -249,25 +249,25 @@
 
 <img 
src="https://raw.githubusercontent.com/werf/demos/master/deploy/werf-new-track-modes-2.gif";
 />
 
-## Skip logs for containers
+## Отключение логов для контейнеров
 
 `"werf.io/skip-logs-for-containers": 
CONTAINER_NAME1,CONTAINER_NAME2,CONTAINER_NAME3...`
 
 Список (через запятую) контейнеров пода с данной аннотацией, для которых логи 
не выводятся при отслеживании.
 
-## Show logs only for number of replicas
+## Логи для указанного числа реплик
 
 `"werf.io/show-logs-only-for-number-of-replicas": "NUMBER"`
 
 Отобразить логи только для указанного числа реплик ресурса в процессе 
трекинга. Мы отображаем логи только для одной реплики по умолчанию, чтобы 
избежать избыточного вывода логов и оптимизировать утилизацию ресурсов.
 
-## Show logs only for containers
+## Логи для указанных контейнеров
 
 `"werf.io/show-logs-only-for-containers": 
CONTAINER_NAME1,CONTAINER_NAME2,CONTAINER_NAME3...`
 
 Список (через запятую) контейнеров пода с данной аннотацией, для которых 
выводятся логи при отслеживании. Для контейнеров, чьи имена отсутствуют в 
списке, логи не выводятся. По умолчанию выводятся логи для всех контейнеров 
всех подов ресурса.
 
-## Show service messages
+## Отображение служебных сообщений
 
 `"werf.io/show-service-messages": "true"|"false"`
 
@@ -275,7 +275,7 @@
 
 <img 
src="https://raw.githubusercontent.com/werf/demos/master/deploy/werf-new-track-modes-1.gif";
 />
 
-## Mark fields of a resource as sensitive
+## Пометка полей ресурса как чувствительных
 
 `"werf.io/sensitive-paths": "JSONPath,JSONPath,..."`
 
@@ -284,7 +284,7 @@
 
 Не показывать диффы для ресурсных полей, которые подпадают под указанные 
JSONPath. Переопределяет значение аннотации `werf.io/sensitive`.
 
-## Mark resource as sensitive
+## Пометка ресурса как чувствительного
 
 `"werf.io/sensitive": "true"|"false"`
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/werf-2.63.0/docs/pages_ru/usage/deploy/deployment_order.md 
new/werf-2.63.1/docs/pages_ru/usage/deploy/deployment_order.md
--- old/werf-2.63.0/docs/pages_ru/usage/deploy/deployment_order.md      
2026-03-16 21:49:47.000000000 +0100
+++ new/werf-2.63.1/docs/pages_ru/usage/deploy/deployment_order.md      
2026-03-23 16:01:58.000000000 +0100
@@ -123,7 +123,7 @@
 
 В этом случае, ресурс `database` будет развернут первым, за ним последует 
`database-migrations`, а затем `app1` и `app2` будут развертываться параллельно.
 
-Посмотрите все возможности этой аннотации [здесь]({{ 
"/reference/deploy_annotations.html#resource-dependencies" | true_relative_url 
}}).
+Посмотрите все возможности этой аннотации [здесь]({{ 
"/reference/deploy_annotations.html#зависимости-ресурса" | true_relative_url 
}}).
 
 Это более гибкий и эффективный способ установить порядок развертывания 
ресурсов по сравнению с `werf.io/weight` и другими методами, так как он 
позволяет развертывать ресурсы в порядке, подобном графу.
 
@@ -160,7 +160,7 @@
 
 В этом примере, при удалении релиза, сначала будет удалён ресурс `Ingress`, 
затем `Service`, и только потом `Deployment`.
 
-Посмотрите все возможности этой аннотации [здесь]({{ 
"/reference/deploy_annotations.html#delete-dependencies" | true_relative_url 
}}).
+Посмотрите все возможности этой аннотации [здесь]({{ 
"/reference/deploy_annotations.html#зависимости-при-удалении" | 
true_relative_url }}).
 
 ## Ожидание готовности ресурсов вне релиза (только werf)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/werf-2.63.0/go.mod new/werf-2.63.1/go.mod
--- old/werf-2.63.0/go.mod      2026-03-16 21:49:47.000000000 +0100
+++ new/werf-2.63.1/go.mod      2026-03-23 16:01:58.000000000 +0100
@@ -64,7 +64,7 @@
        github.com/werf/kubedog-for-werf-helm v0.0.0-20241217155728-9d45c48b82b6
        github.com/werf/lockgate v0.1.1
        github.com/werf/logboek v0.6.1
-       github.com/werf/nelm v1.22.1-0.20260313155353-826a6f789be4
+       github.com/werf/nelm v1.23.2-0.20260323144402-e5b23e65b8ed
        github.com/werf/nelm-for-werf-helm v0.0.0-20241217155925-b0e6734d1dbf
        go.opentelemetry.io/otel v1.24.0
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/werf-2.63.0/go.sum new/werf-2.63.1/go.sum
--- old/werf-2.63.0/go.sum      2026-03-16 21:49:47.000000000 +0100
+++ new/werf-2.63.1/go.sum      2026-03-23 16:01:58.000000000 +0100
@@ -1420,14 +1420,8 @@
 github.com/werf/lockgate v0.1.1/go.mod 
h1:0yIFSLq9ausy6ejNxF5uUBf/Ib6daMAfXuCaTMZJzIE=
 github.com/werf/logboek v0.6.1 h1:oEe6FkmlKg0z0n80oZjLplj6sXcBeLleCkjfOOZEL2g=
 github.com/werf/logboek v0.6.1/go.mod 
h1:Gez5J4bxekyr6MxTmIJyId1F61rpO+0/V4vjCIEIZmk=
-github.com/werf/nelm v1.22.1-0.20260312043441-32992f02a07a 
h1:s6wNa6Qu7CnSzNCTe801pj7VtUfIC8FEOQ7wsGjhuQ8=
-github.com/werf/nelm v1.22.1-0.20260312043441-32992f02a07a/go.mod 
h1:ys2WqkKuZOLvnW1r8dGl20k1oWkOxLFKF5CPXT4MEyo=
-github.com/werf/nelm v1.22.1-0.20260313141852-9a7591e58b83 
h1:6JcxaqK2kKk8KN1N7sdl19rLWyx8FrkOmPb8TI+po/o=
-github.com/werf/nelm v1.22.1-0.20260313141852-9a7591e58b83/go.mod 
h1:ys2WqkKuZOLvnW1r8dGl20k1oWkOxLFKF5CPXT4MEyo=
-github.com/werf/nelm v1.22.1-0.20260313152345-ed6e23e80acd 
h1:BQNlILdFpDfmDRjjd2ne6NPIqn0IMlCpqs4YfKxLB6A=
-github.com/werf/nelm v1.22.1-0.20260313152345-ed6e23e80acd/go.mod 
h1:ys2WqkKuZOLvnW1r8dGl20k1oWkOxLFKF5CPXT4MEyo=
-github.com/werf/nelm v1.22.1-0.20260313155353-826a6f789be4 
h1:M5bT7TaTfn7lzG2JdXRLdcCBnutTvU1lk+cqdyvCkv4=
-github.com/werf/nelm v1.22.1-0.20260313155353-826a6f789be4/go.mod 
h1:ys2WqkKuZOLvnW1r8dGl20k1oWkOxLFKF5CPXT4MEyo=
+github.com/werf/nelm v1.23.2-0.20260323144402-e5b23e65b8ed 
h1:IW1utDuk4kXcB1uY1mr31d/p5Ui4FdsKgzBQR/jbRTg=
+github.com/werf/nelm v1.23.2-0.20260323144402-e5b23e65b8ed/go.mod 
h1:ys2WqkKuZOLvnW1r8dGl20k1oWkOxLFKF5CPXT4MEyo=
 github.com/werf/nelm-for-werf-helm v0.0.0-20241217155925-b0e6734d1dbf 
h1:K51qz209c1yJgKzPw8AeS72T21F/ACp0VI3RJvT4THA=
 github.com/werf/nelm-for-werf-helm v0.0.0-20241217155925-b0e6734d1dbf/go.mod 
h1:7RJXSGPKKPEvfPqrTwNA8jT7y52O0ebwhSbSn29ESMA=
 github.com/xanzy/go-gitlab v0.31.0/go.mod 
h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/werf-2.63.0/pkg/docker_registry/api.go 
new/werf-2.63.1/pkg/docker_registry/api.go
--- old/werf-2.63.0/pkg/docker_registry/api.go  2026-03-16 21:49:47.000000000 
+0100
+++ new/werf-2.63.1/pkg/docker_registry/api.go  2026-03-23 16:01:58.000000000 
+0100
@@ -265,6 +265,19 @@
        return nil
 }
 
+func (api *api) deleteImageByTag(ctx context.Context, reference string) error {
+       r, err := name.NewTag(reference, api.parseReferenceOptions()...)
+       if err != nil {
+               return fmt.Errorf("parsing tag reference %q: %w", reference, 
err)
+       }
+
+       if err := remote.Delete(r, api.defaultRemoteOptions(ctx)...); err != 
nil {
+               return fmt.Errorf("deleting tag %q: %w", r, err)
+       }
+
+       return nil
+}
+
 func (api *api) MutateAndPushImage(ctx context.Context, sourceReference, 
destinationReference string, opts ...registry_api.MutateOption) error {
        return api.mutateAndPushImage(ctx, sourceReference, 
destinationReference, opts...)
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/werf-2.63.0/pkg/docker_registry/default.go 
new/werf-2.63.1/pkg/docker_registry/default.go
--- old/werf-2.63.0/pkg/docker_registry/default.go      2026-03-16 
21:49:47.000000000 +0100
+++ new/werf-2.63.1/pkg/docker_registry/default.go      2026-03-23 
16:01:58.000000000 +0100
@@ -67,7 +67,35 @@
 }
 
 func (r *defaultImplementation) DeleteRepoImage(ctx context.Context, repoImage 
*image.Info) error {
-       return r.api.deleteImageByReference(ctx, repoImage.RepoDigest)
+       return deleteRepoImage(ctx, r.api, repoImage)
+}
+
+func isReferencedByTag(repoImage *image.Info) bool {
+       if repoImage.Tag == "" {
+               return false
+       }
+       if strings.Contains(repoImage.Name, "@") {
+               return false
+       }
+       return strings.Contains(repoImage.Name, ":")
+}
+
+func deleteRepoImage(ctx context.Context, apiClient *api, repoImage 
*image.Info) error {
+       if isReferencedByTag(repoImage) {
+               tagReference := strings.Join([]string{repoImage.Repository, 
repoImage.Tag}, ":")
+               if err := apiClient.deleteImageByTag(ctx, tagReference); err != 
nil {
+                       logboek.Context(ctx).Info().LogF("Delete tag %s: %s\n", 
tagReference, err)
+               }
+       }
+
+       if err := apiClient.deleteImageByReference(ctx, repoImage.RepoDigest); 
err != nil {
+               if IsStatusNotFoundErr(err) || IsImageNotFoundError(err) {
+                       return nil
+               }
+               return err
+       }
+
+       return nil
 }
 
 func (r *defaultImplementation) String() string {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/werf-2.63.0/pkg/docker_registry/default_test.go 
new/werf-2.63.1/pkg/docker_registry/default_test.go
--- old/werf-2.63.0/pkg/docker_registry/default_test.go 1970-01-01 
01:00:00.000000000 +0100
+++ new/werf-2.63.1/pkg/docker_registry/default_test.go 2026-03-23 
16:01:58.000000000 +0100
@@ -0,0 +1,45 @@
+package docker_registry
+
+import (
+       . "github.com/onsi/ginkgo/v2"
+       . "github.com/onsi/gomega"
+
+       "github.com/werf/werf/v2/pkg/image"
+)
+
+type IsReferencedByTagEntry struct {
+       name        string
+       tag         string
+       expectation bool
+}
+
+var _ = DescribeTable("isReferencedByTag", func(entry IsReferencedByTagEntry) {
+       info := &image.Info{Name: entry.name, Tag: entry.tag}
+       Expect(isReferencedByTag(info)).To(Equal(entry.expectation))
+},
+       Entry("explicit tag", IsReferencedByTagEntry{
+               name:        "registry.example.com/repo:abc123-1773320914455",
+               tag:         "abc123-1773320914455",
+               expectation: true,
+       }),
+       Entry("digest-only reference", IsReferencedByTagEntry{
+               name:        
"registry.example.com/repo@sha256:e674a824ddaee080167ac0789095402209ff4b15e743e0bd344c0e39833420c7",
+               tag:         "latest",
+               expectation: false,
+       }),
+       Entry("bare repository with implicit latest", IsReferencedByTagEntry{
+               name:        "registry.example.com/repo",
+               tag:         "latest",
+               expectation: false,
+       }),
+       Entry("empty tag", IsReferencedByTagEntry{
+               name:        "registry.example.com/repo:sometag",
+               tag:         "",
+               expectation: false,
+       }),
+       Entry("tag with digest (both present)", IsReferencedByTagEntry{
+               name:        
"registry.example.com/repo:tag@sha256:e674a824ddaee080167ac0789095402209ff4b15e743e0bd344c0e39833420c7",
+               tag:         "tag",
+               expectation: false,
+       }),
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/werf-2.63.0/pkg/docker_registry/docker_hub.go 
new/werf-2.63.1/pkg/docker_registry/docker_hub.go
--- old/werf-2.63.0/pkg/docker_registry/docker_hub.go   2026-03-16 
21:49:47.000000000 +0100
+++ new/werf-2.63.1/pkg/docker_registry/docker_hub.go   2026-03-23 
16:01:58.000000000 +0100
@@ -142,6 +142,10 @@
 }
 
 func (r *dockerHub) handleFailedApiResponse(resp *http.Response, err error) 
error {
+       if resp == nil {
+               return err
+       }
+
        switch resp.StatusCode {
        case http.StatusUnauthorized:
                return NewDockerHubUnauthorizedError(err)
@@ -149,7 +153,7 @@
                return NewDockerHubRepositoryNotFoundError(err)
        }
 
-       return nil
+       return err
 }
 
 func (r *dockerHub) String() string {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/werf-2.63.0/trdl_channels.yaml 
new/werf-2.63.1/trdl_channels.yaml
--- old/werf-2.63.0/trdl_channels.yaml  2026-03-16 21:49:47.000000000 +0100
+++ new/werf-2.63.1/trdl_channels.yaml  2026-03-23 16:01:58.000000000 +0100
@@ -38,12 +38,12 @@
   - name: "2"
     channels:
       - name: alpha
-        version: 2.62.2
+        version: 2.63.0
       - name: beta
-        version: 2.62.1
+        version: 2.63.0
       - name: ea
-        version: 2.62.1
+        version: 2.63.0
       - name: stable
-        version: 2.57.1
+        version: 2.63.0
       - name: rock-solid
         version: 2.57.1

++++++ werf.obsinfo ++++++
--- /var/tmp/diff_new_pack.RwvOLh/_old  2026-03-27 06:52:37.453683547 +0100
+++ /var/tmp/diff_new_pack.RwvOLh/_new  2026-03-27 06:52:37.461683878 +0100
@@ -1,5 +1,5 @@
 name: werf
-version: 2.63.0
-mtime: 1773694187
-commit: 196f19a9da33d622ceb0f29e855335c44eb02f39
+version: 2.63.1
+mtime: 1774278118
+commit: 2713df07ca09297c939e73250fb4344825e828dd
 

Reply via email to