fix: preserve stage example sets during deploy
No files matched your search
@@ -170,7 +170,10 @@ jobs:
|
||||
dirs=$(mktemp)
|
||||
trap 'rm -f "$known_hosts" "$batch" "$files" "$dirs"' EXIT
|
||||
printf '%s\n' "$SFTP_KNOWN_HOSTS" > "$known_hosts"
|
||||
git ls-files | grep -vE '^(\.gitea/|README\.md$|AGENTS\.md$|CLAUDE\.md$|\.gitignore$|requisites\.html$|config\.json$)' > "$files"
|
||||
# Наборы `/N/` на stage — редактируемый контент. Кодовая доставка их
|
||||
# намеренно не перезаписывает: актуальное содержимое stage фиксируют в Git
|
||||
# отдельной синхронизацией по задаче.
|
||||
git ls-files | grep -vE '^(\.gitea/|README\.md$|AGENTS\.md$|CLAUDE\.md$|\.gitignore$|requisites\.html$|config\.json$|[0-9]+/)' > "$files"
|
||||
if grep -q '[^A-Za-z0-9._/-]' "$files"; then echo "имена с недопустимыми символами:"; grep '[^A-Za-z0-9._/-]' "$files"; exit 1; fi
|
||||
printf '%s\n' "-mkdir $REMOTE_DIR" > "$batch"
|
||||
while read -r file; do
|
||||
|
||||
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 523 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 719 KiB After Width: | Height: | Size: 309 KiB |
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 226 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 303 KiB After Width: | Height: | Size: 234 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 344 KiB After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 325 KiB After Width: | Height: | Size: 218 KiB |
|
Before Width: | Height: | Size: 533 KiB After Width: | Height: | Size: 716 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 332 KiB After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 535 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 302 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 197 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -30,6 +30,10 @@
|
||||
такого выпуска фактический stage-config следует забрать и зафиксировать в Git.
|
||||
`requisites.html` также живёт только на хостинге и не перезаписывается. Не
|
||||
создавать target-specific конфиги или `config.json.example`.
|
||||
- Корневые числовые наборы примеров `/N/` на `zoomstage.online` — редактируемый
|
||||
контент stage. Обычный push в `staging` должен исключать `[0-9]+/` из SFTP-заливки:
|
||||
актуальные примеры нельзя перезаписывать Git-версией. Снимок stage фиксируется в
|
||||
Git отдельной синхронизацией по задаче.
|
||||
- Коммит в `main` запускает FTP-автодеплой на все цели workflow; откат через `git revert`
|
||||
также запускает выкат. Коммит, push и изменения хостинга — только по прямому поручению.
|
||||
- Проверки кода и браузера проводить в Docker без установки ПО на хост.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
Область действия — репозиторий `preland/`. Общие правила рабочей области находятся в
|
||||
[AGENTS.md](../AGENTS.md) и [CLAUDE.md](../CLAUDE.md); канонический процесс и каталог ролей —
|
||||
[в общей политике](../.known-base/Соглашения/Процесс%20командной%20разработки%20и%20каталог%20ролей.md).
|
||||
Этот файл и [AGENTS.md](AGENTS.md) содержат одинаковые локальные правила; обновлять их вместе.
|
||||
Этот файл и [CLAUDE.md](CLAUDE.md) содержат одинаковые локальные правила; обновлять их вместе.
|
||||
|
||||
## Перед работой
|
||||
|
||||
@@ -21,10 +21,19 @@
|
||||
переход напрямую на `/public/upscale` не заменяет передачу владельца через claim.
|
||||
- `host` задаёт сайт назначения; HTTPS необходим для `crypto.randomUUID()`.
|
||||
Не обходить серверные правила доступа к загрузке и результату обработки.
|
||||
- Рабочий `config.json` единственный для всех прилендов: это точная проверенная
|
||||
конфигурация `zoomstage.online`, и каждый FTP/SFTP-deploy обязан доставлять её на
|
||||
stage и production. `requisites.html` по-прежнему живёт только на хостинге и не
|
||||
перезаписывается. Не создавать target-specific конфиги или `config.json.example`.
|
||||
- Рабочий `config.json` на каждом хостинге настраивает владелец. Деплой не имеет
|
||||
права перезаписывать его значений. При появлении новой обязательной UTM workflow
|
||||
получает текущий хостовый конфиг и меняет только ключи, которые прямо
|
||||
согласованы в задаче. Иные значения, включая уже настроенные UTM, остаются
|
||||
байт-в-байт прежними. Для #274 `bin/ensure-focus-config.php` — явное
|
||||
исключение: он задаёт только новый `focus=face` (default и rnd). После каждого
|
||||
такого выпуска фактический stage-config следует забрать и зафиксировать в Git.
|
||||
`requisites.html` также живёт только на хостинге и не перезаписывается. Не
|
||||
создавать target-specific конфиги или `config.json.example`.
|
||||
- Корневые числовые наборы примеров `/N/` на `zoomstage.online` — редактируемый
|
||||
контент stage. Обычный push в `staging` должен исключать `[0-9]+/` из SFTP-заливки:
|
||||
актуальные примеры нельзя перезаписывать Git-версией. Снимок stage фиксируется в
|
||||
Git отдельной синхронизацией по задаче.
|
||||
- Коммит в `main` запускает FTP-автодеплой на все цели workflow; откат через `git revert`
|
||||
также запускает выкат. Коммит, push и изменения хостинга — только по прямому поручению.
|
||||
- Проверки кода и браузера проводить в Docker без установки ПО на хост.
|
||||
|
||||
@@ -103,6 +103,12 @@ N/05_...
|
||||
домена целиком: без переименования, вложения в `images/` и промежуточных
|
||||
каталогов. Устаревшие `images/demo*` не являются частью поставки.
|
||||
|
||||
Для `zoomstage.online` обычный deploy ветки `staging` намеренно **не загружает**
|
||||
корневые числовые каталоги `/N/`: это редактируемый контент stage, а не артефакт
|
||||
кодовой доставки. Workflow продолжает проверять их доступность HTTP-smoke. Чтобы
|
||||
зафиксировать обновлённый набор, сначала синхронизируйте его со stage в Git по
|
||||
отдельной задаче; следующая заливка не перетрёт его старой ревизией.
|
||||
|
||||
## Деплой на произвольный домен
|
||||
|
||||
**Требования.** PHP 8.0+ (боевой хостинг — 8.2), веб-сервер с `index.php` в роли индексного файла и **HTTPS**:
|
||||
|
||||
@@ -60,6 +60,10 @@ foreach ([
|
||||
}
|
||||
}
|
||||
|
||||
if (!str_contains($workflow, '|[0-9]+/)')) {
|
||||
$failures[] = 'Stage-деплой не должен перезаписывать корневые наборы /N/: stage владеет их содержимым.';
|
||||
}
|
||||
|
||||
if (substr_count($workflow, 'while [ -n "$dir" ]; do') < 2) {
|
||||
$failures[] = 'SFTP-деплой должен создавать все родительские каталоги для новых наборов assets.';
|
||||
}
|
||||
|
||||