name: Мутационный гейт # Тонкий вызывающий файл (#623). Для этого события GitHub берёт workflow из # ветки по умолчанию (`main`), поэтому здесь только то, что обязано жить там: # триггеры, run-name, права и concurrency. Тело — `_mutation-gate.yml` по ссылке # `@dev`: правка конвейера — один коммит в `dev`, зеркало в `main` не нужно. # Этот файл меняется, только когда меняются сами триггеры или потолок прав; # тогда он зеркалится в `main`, и preflight `workflow_sync` (validate.yml) # держит копии равными. on: workflow_dispatch: inputs: ref: description: Git ref whose mutation guards must be proved required: false default: dev schedule: # Каждую ночь, 00:43 UTC (03:43 MSK) — после суток правок и до ночного # полного Validate (nightly.yml, 02:17 UTC), чтобы не делить раннеры (#513). # Минута не круглая: такие старты GitHub сдвигает меньше (#658). - cron: '43 0 * * *' permissions: contents: read # Группа зависит от события (#472). Прежде она была одна на всё, и ручной # запуск (отладка гейта) отменял идущий по расписанию — так 24.08 погиб # еженедельный прогон, а отменённый в списке выглядит «не красным». Поймать # отмену изнутри нельзя: вместе с прогоном отменяются и не начавшиеся job, # включая любой репортёр. Значит отмену надо не ловить, а не допускать. concurrency: group: mutation-gate-${{ github.event_name }} cancel-in-progress: true jobs: # Потолок прав тела: объединение job-level прав `_mutation-gate.yml`. Вызываемый # workflow может права только сузить, поэтому каждая его job по-прежнему # получает свой прежний минимум (#556), а шире этого набора не получит никто. dev: permissions: contents: read actions: read issues: write uses: Matysh/houseplan-card/.github/workflows/_mutation-gate.yml@dev # #623: тело конвейера из dev with: ref: ${{ inputs.ref }} secrets: inherit