Skip to content

feat(ci): Пробный прогон релизного конвейера без публикации - #41

Merged
zeegin merged 2 commits into
mainfrom
feat/workflow-dispatch
Sep 17, 2026
Merged

zeegin merged 2 commits into
mainfrom
feat/workflow-dispatch

Conversation

@zeegin

@zeegin zeegin commented Sep 17, 2026

Copy link
Copy Markdown
Member

Закрывает #40.

Конвейер запускался только по пушу тега v*, а create-release публикует не-draft релиз сразу. Проверить сборку, не выпустив релиз, было нельзя — то есть первый прогон любых изменений в build-and-release.yml совпадал бы с первым релизом.

Долг накопился заметный. За последние правки туда ушло то, что больше нигде не выполняется: консольный вывод Windows-бинаря и smoke с проверкой кода возврата (#8), установка .deb в чистый Debian с lintian (#9), матрица macOS с ассертом lipo -archs (#27), сжатие .deb в xz (#29), разделение зависимостей и пины по SHA (#16). test.yml тут не помогает — он гоняет pytest и не собирает ни одного артефакта.

Что изменилось

workflow_dispatch с входом version. Версию приходится задавать явно: вне тега git describe даёт 1.2.11-17-g09a0942, а make check требует ^[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?$ для WiX — без этого Windows-сборка упала бы. Значение пробрасывается в make как VERSION=, который create-version уже honors первым же условием, так что Makefile не менялся.

На пуше тега вход пуст, [ -n "" ] ложно, версия по-прежнему берётся из git describe — прежнее поведение сохранено.

create-release не трогали. У него уже стоит if: startsWith(github.ref, 'refs/tags/'), и при запуске с ветки условие ложно — джоб пропускается, а не падает. Четыре smoke-job при этом выполняются как обычно, в них весь смысл прогона.

docs/BUILD.md — как запустить и где брать артефакты, с явным указанием, что релиз не публикуется.

Проверка

Проброс проверен настоящей сборкой, а не чтением Makefile — важно было убедиться, что переменная доходит сквозь $(MAKE) в подцели:

$ make build-macos VERSION=0.0.0
Built for arm64
dist/efd-unpacker-0.0.0-macos-arm64.dmg
версия в Info.plist: 0.0.0

Три ветки create-version:

VERSION=0.0.0  → 0.0.0                 проверка WiX пройдена
VERSION=       → 1.2.11-22-g9d70f08    как на пуше тега
не передан     → 1.2.11-22-g9d70f08    как раньше

YAML валиден, 9 job, timeout-minutes у всех, 0 uses: без SHA. pytest — 122 passed.

На что посмотреть ревьюеру

  • Первый запуск и будет настоящей проверкой всего накопленного. Я проверил локально что мог — Linux в Docker, macOS нативно, — но Windows-половина Windows-сборка с --windowed глушит вывод CLI, а smoke-тест в CI этого не видит #8 и связка из четырёх smoke-job выполнятся только здесь. Вероятность, что что-то вылезет, я бы оценил как высокую: именно так на реальном .deb вылез hardening-no-pie, которого не было на stub.
  • env.EFD_VERSION объявлен на уровне workflow и подставляется как ${{ inputs.version }}. На пуше тега inputs пуст, выражение даёт пустую строку — это ожидаемо и обработано, но выглядит непривычно.
  • Права не расширялись. contents: read на уровне workflow остаётся; create-release со своим contents: write при dispatch не запускается вовсе.
  • Запускать так: gh workflow run build-and-release.yml --ref <ветка> -f version=0.0.0. После мержа в main кнопка появится и в UI на вкладке Actions.

Конвейер запускался только по пушу тега v*, а create-release публикует
не-draft релиз сразу. Проверить сборку, не выпустив релиз, было нельзя,
и первый прогон любых изменений в build-and-release.yml совпадал бы с
первым релизом. За последние правки туда ушло многое, что больше нигде
не выполняется: консольный вывод Windows и smoke с кодом возврата,
установка .deb в чистый Debian с lintian, матрица macOS с ассертом
lipo -archs, сжатие .deb в xz, разделение зависимостей и пины.

Добавлен workflow_dispatch с входом version. Он обязателен в формате
X.Y.Z: вне тега git describe даёт 1.2.11-17-g09a0942, и Windows-сборка
упала бы на проверке формата для WiX. Значение пробрасывается в make
как VERSION=, который create-version уже honors первым условием —
Makefile не менялся. На пуше тега вход пуст, поведение прежнее.

create-release не трогали: у него уже стоит
if: startsWith(github.ref, 'refs/tags/'), при запуске с ветки джоб
пропускается. Четыре smoke-job выполняются как обычно, в них весь смысл.

Проверено настоящей сборкой: make build-macos VERSION=0.0.0 даёт
dist/efd-unpacker-0.0.0-macos-arm64.dmg и 0.0.0 в Info.plist, то есть
переменная доходит сквозь sub-make. С пустым VERSION версия
по-прежнему берётся из git describe.

docs/BUILD.md описывает запуск и где брать артефакты.

Closes #40
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 17, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-17T06:45:34.670053Z 9340755 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9340755876

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/build-and-release.yml Outdated
По замечанию ревью PR #41. Шаг Build Windows version исполняется
PowerShell (shell у него не объявлен), а там $EFD_VERSION — обычная
необъявленная переменная, а не окружение: подставлялась пустая строка.
VERSION= уходил пустым, create-version откатывался на git describe, и
make check отвергал нечисловую версию — то есть каждый пробный прогон
падал бы до появления Windows-артефакта, ровно там, ради чего всё
затевалось.

Windows-шаг переведён на $env:EFD_VERSION. Дополнительно во все три
сборочных job добавлен шаг Check dry-run version с shell: bash, который
при workflow_dispatch печатает полученную версию и падает с внятным
сообщением, если она пуста или не в формате X.Y.Z. Один и тот же shell
на всех платформах — чтобы разница в синтаксисе подстановки больше не
проходила молча. На пуше тега шаг пропускается по условию.
@zeegin
zeegin merged commit 5614c27 into main Sep 17, 2026
3 checks passed
@zeegin
zeegin deleted the feat/workflow-dispatch branch September 17, 2026 07:00
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.

1 participant