Files
preland/.gitea/workflows/deploy.yml
T
Panfilov KonstantinandClaude Opus 5.5 01b5a03b8e
deploy-preland / deploy (push) Successful in 18s
Автодеплой: после коммита в main — заливка на хостинг преленда по FTP с TLS и проверка страницы
Реквизиты — секреты репозитория PRELAND_FTP_HOST/USER/PASS. Не заливаются служебные файлы и живущие только на
хостинге config.json и requisites.html; на хостинге ничего не удаляется. После заливки страница проверяется: адрес
загрузки — на сайте, а не на самом преленде, переход — на claim. Один вызов curl на все файлы (одно соединение).
README: раздел «Автодеплой».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 18:37:25 +03:00

68 lines
3.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: deploy-preland
# После коммита в main — заливка на хостинг преленда (beget, FTP с TLS) и проверка страницы.
# Реквизиты — секреты репозитория PRELAND_FTP_HOST, PRELAND_FTP_USER, PRELAND_FTP_PASS (порт 21).
# Заливаются файлы репозитория (git ls-files), кроме служебных (.gitea/, README.md, .gitignore) и тех, что живут
# только на хостинге: config.json (в git его нет) и requisites.html (реквизиты заполняют на месте — пустой файл
# из git их бы затёр). На хостинге ничего не удаляется: удалённое из репозитория убирать вручную.
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
defaults:
run:
shell: sh
env:
PRELAND_URL: https://preland.anton.barbariskatest.ru
steps:
- name: Install tools (Alpine)
run: apk add --no-cache git curl
- name: Checkout repository
uses: actions/checkout@v4
- name: Upload over FTP (TLS)
env:
FTP_HOST: ${{ secrets.PRELAND_FTP_HOST }}
FTP_USER: ${{ secrets.PRELAND_FTP_USER }}
FTP_PASS: ${{ secrets.PRELAND_FTP_PASS }}
run: |
set -eu
[ -n "$FTP_HOST" ] && [ -n "$FTP_USER" ] && [ -n "$FTP_PASS" ] || { echo "нет секретов PRELAND_FTP_*"; exit 1; }
umask 077
netrc=$(mktemp); list=$(mktemp)
trap 'rm -f "$netrc" "$list"' EXIT
printf 'machine %s login %s password %s\n' "$FTP_HOST" "$FTP_USER" "$FTP_PASS" > "$netrc"
git ls-files | grep -vE '^(\.gitea/|README\.md$|\.gitignore$|config\.json$|requisites\.html$)' > files.txt
# имя уходит в адрес ftp:// как есть — пробелы и прочее экранирование не поддерживаем
if grep -q '[^A-Za-z0-9._/-]' files.txt; then echo "имена с недопустимыми символами:"; grep '[^A-Za-z0-9._/-]' files.txt; exit 1; fi
# один curl на все файлы — одно соединение FTP+TLS вместо соединения на файл
while read -r f; do printf 'upload-file = "%s"\nurl = "ftp://%s/%s"\n' "$f" "$FTP_HOST" "$f"; done < files.txt > "$list"
curl -sS --ssl-reqd --netrc-file "$netrc" --ftp-create-dirs --retry 3 --fail-early -K "$list"
echo "залито файлов: $(wc -l < files.txt)"
- name: Check the page
run: |
set -eu
page=$(curl -fsS --max-time 30 "$PRELAND_URL/?nc=$(date +%s)")
api=$(printf '%s' "$page" | grep -o 'const createApiUrl = "[^"]*"' || true)
echo "$api"
case "$api" in
*'\/api\/images\/public\/create'*) ;;
*) echo "на странице нет адреса загрузки"; exit 1 ;;
esac
own=$(printf '%s' "$PRELAND_URL" | sed -E 's#^https?://([^/]+).*#\1#')
case "$api" in
*"$own"*) echo "загрузка уходит на сам преленд: на хостинге нет config.json с host"; exit 1 ;;
esac
printf '%s' "$page" | grep -q 'claim?key=' || { echo "переход не на claim — залит старый код?"; exit 1; }
echo "страница в порядке"