Skip to content

feat(ci): релиз выполняется по тегу, а не на каждый push в main - #151

Merged
npinaev merged 1 commit into
Dynamic-Mobile-Security:mainfrom
SergeyOstrouhov:feat/ci-release-on-tag
Aug 26, 2026
Merged

feat(ci): релиз выполняется по тегу, а не на каждый push в main#151
npinaev merged 1 commit into
Dynamic-Mobile-Security:mainfrom
SergeyOstrouhov:feat/ci-release-on-tag

Conversation

@SergeyOstrouhov

Copy link
Copy Markdown
Contributor

Публикация в PyPI и в Docker Hub запускалась на каждый push в main, тогда как версия пакета меняется только в релизных коммитах. Любой обычный коммит или merge PR пересобирал уже выложенный дистрибутив и получал

400 File already exists ('mdast_cli-2026.8.6-py3-none-any.whl' ...)

после чего workflow падал. Образ latest на Docker Hub при этом перезаписывался на каждый коммит, релизный он или нет.

Оба workflow переведены на триггер по тегу:

on:
  push:
    tags:
      - '*'

Публикация становится осознанным действием, а не побочным эффектом мержа. Тесты обычных коммитов и PR не затронуты: их гоняет tests.yml, у которого триггеры прежние.

Версия образа Docker больше не прописана в файле руками, а берётся из тега (github.ref_name). Раньше её приходилось править в двух местах при каждом релизе, и рассинхрон с setup.py ничем не отслеживался.

Добавлена проверка, что тег совпадает с версией в setup.py. Иначе под тегом уедет дистрибутив с другим номером, а откатить это на PyPI нельзя - файлы там неизменяемы. Проверка выполняется до сборки и публикации.

Порядок релиза становится таким:

  1. поднять версию в setup.py, влить в main;
  2. поставить тег с тем же номером и запушить его.

Публикация в PyPI и в Docker Hub запускалась на каждый push в main, тогда
как версия пакета меняется только в релизных коммитах. Любой обычный
коммит или merge PR пересобирал уже выложенный дистрибутив и получал

    400 File already exists ('mdast_cli-2026.8.6-py3-none-any.whl' ...)

после чего workflow падал. Образ latest на Docker Hub при этом
перезаписывался на каждый коммит, релизный он или нет.

Оба workflow переведены на триггер по тегу:

    on:
      push:
        tags:
          - '*'

Публикация становится осознанным действием, а не побочным эффектом мержа.
Тесты обычных коммитов и PR не затронуты: их гоняет tests.yml, у которого
триггеры прежние.

Версия образа Docker больше не прописана в файле руками, а берётся из тега
(github.ref_name). Раньше её приходилось править в двух местах при каждом
релизе, и рассинхрон с setup.py ничем не отслеживался.

Добавлена проверка, что тег совпадает с версией в setup.py. Иначе под
тегом уедет дистрибутив с другим номером, а откатить это на PyPI нельзя -
файлы там неизменяемы. Проверка выполняется до сборки и публикации.

Порядок релиза становится таким:
  1. поднять версию в setup.py, влить в main;
  2. поставить тег с тем же номером и запушить его.
@npinaev
npinaev merged commit 28c0b18 into Dynamic-Mobile-Security:main Aug 26, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants