All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
Повтор запроса включался на ЛЮБОМ ненулевом rc curl, хотя собственный комментарий рядом называл сетевой класс (6/28/35/52/56). Протухший, чужой или самоподписанный сертификат даёт rc=60 (замер: expired.badssl.com, self-signed.badssl.com, wrong.host.badssl.com) — и измеренный регресс периметра уезжал в колонку «периметр этой проверкой НЕ проверен», потратив на детерминированный отказ три попытки и 6 c пауз. Ровно этот отказ и есть предмет проверки 5b: без site-блока Caddy не выпускает сертификат. Коды сетевого класса вынесены в NETWORK_RC рядом с комментарием, чтобы описание и поведение не разъезжались; повтор делается только по ним. rc=7 (соединение отвергнуто) добавлен туда же — ответа при нём тоже нет. curl_failed печатает rc в обеих ветках: строки RETRY при SMOKE_ATTEMPTS=1 нет вовсе, и «домена нет» (6) было не отличить от «сертификат протух» (60). timeout-minutes 10 → 40: худший случай (прод не отвечает — мертвы все 43 проверки) = 43 × 53 c ≈ 38 мин, в 10 минут помещалось ~8 мёртвых проверок, и job убивали ДО печати FAIL-строк и итога — в том самом сценарии, ради которого правка и делалась.
75 lines
5.1 KiB
YAML
75 lines
5.1 KiB
YAML
# Регресс-тест публичного 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
|