# Регресс-тест публичного B2C-периметра МЕРА (ЭТАП 1 плана B2C-запуска). # # НЕ pre-merge гейт — эти 4 проверки требуют реального DNS + выпущенного TLS- # сертификата для meraocenka.ru, т.е. осмысленны ТОЛЬКО против прода после # деплоя. Запускается вручную (workflow_dispatch) или раз в сутки (cron) — # страхует от случайной регрессии периметра (например, будущий PR по ошибке # открывает B2B-путь на публичном домене, или basic_auth gate на gendsgn.ru # случайно снимают). # # ДО того как появится DNS A-record meraocenka.ru → IP VPS, проверки 1 и 2 # (см. scripts/smoke-mera-perimeter.sh) ожидаемо КРАСНЫЕ — это не регресс, # просто домен ещё не резолвится. Проверки 3 и 4 не зависят от DNS нового # домена и обязаны быть зелёными всегда. name: perimeter-smoke-mera on: workflow_dispatch: {} schedule: # Раз в сутки, 06:17 UTC — вне пиков, время произвольное. - cron: '17 6 * * *' # #2917: правка самого смоука должна проверяться сразу, а не следующим утром. # Проверки read-only (curl по публичным адресам), поэтому прогонять их на # push в main безопасно и дёшево. Синтаксис скрипта отдельно гейтится в # ci.yml на каждом PR — здесь проверяется уже поведение против прода. push: branches: [main] paths: - 'scripts/smoke-mera-perimeter.sh' - '.forgejo/workflows/perimeter-smoke.yml' concurrency: group: perimeter-smoke-mera cancel-in-progress: false jobs: smoke: runs-on: ubuntu-latest # 11.09.2026: было 5 минут — теперь мало. В скрипте появились пауза между # проверками (2 c) и повтор запроса, если ответа не пришло вовсе: обычный # прогон вырос с ~89 c до ~175 c, а ХУДШИЙ случай — гораздо больше, потому # что каждая неотвечающая проверка стоит до 3×15 c таймаута плюс паузы # (~53 c против обычных ~2 c). # # 12.09.2026: 10 минут — тоже мало, и мало ровно в том сценарии, ради # которого повтор писался. АРИФМЕТИКА ХУДШЕГО СЛУЧАЯ. Одна неотвечающая # проверка сетевого класса = 3×15 c таймаута + 2 c и 4 c пауз ретрая + 2 c # паузы между проверками = 53 c. Прод не отвечает целиком (DNS не # резолвится, вход лежит) — мертвы ВСЕ проверки: 43 × 53 = 2279 c ≈ 38 мин. # Откуда 43 (замер 12.09, зелёный прогон против прода — 43 PASS за 167 c): # 42 обычные проверки + отдельная загрузка HTML лэндинга; 43-я, производный # layout-чанк, при мёртвом ответе не запрашивается вовсе — запросов ровно # столько же. # В 10 минут помещалось ~8 мёртвых проверок из 43, дальше job убивали ДО # печати FAIL-строк и итога — то есть лог терялся при полном отказе прода. # # Правка «повторяем только сетевой класс» (12.09) худший случай НЕ # уменьшает: 15-секундный таймаут как раз сетевой (rc=28) и повторяется # по-прежнему. Она удешевляет ДРУГОЙ сценарий — протухший/чужой сертификат # (rc=60): отказ приходит сразу и без повторов. Замер 12.09 на # expired.badssl.com, одна проверка при SMOKE_PAUSE=0 — 23 c на прежней # голове (3 попытки + 6 c пауз) против <1 c теперь. # # 40 минут = 38 мин худшего случая + запас на чекаут и разброс сети. # Цена промаха несимметрична: занятый раннер стоит дёшево (прогон daily + # on-push), потерянный лог при полном отказе прода — дорого. timeout-minutes: 40 steps: - name: Checkout repo uses: actions/checkout@v4 - name: Run perimeter smoke checks run: | chmod +x scripts/smoke-mera-perimeter.sh ./scripts/smoke-mera-perimeter.sh