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
