Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 96 additions & 0 deletions .github/scripts/fetch-admin-sdk.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#!/usr/bin/env sh
# Скачивает текущий zip DevCraft Admin с витрины и кладёт sdk/dle (модели Schema).
# /download отдаёт GitHub-снимок репозитория: mhadmin-rel-{версия}.zip
# (корень архива mhadmin-rel-200.4.1/upload/devcraft/src/sdk/dle).
# Env: ADMIN_DOWNLOAD_URL, ADMIN_ARCHIVE_URL, DLE_ADMIN_SDK, GITHUB_TOKEN
set -eu

URL="${ADMIN_DOWNLOAD_URL:-https://devcraft.club/downloads/devcraft-admin-panel.4/download}"
FALLBACK="${ADMIN_ARCHIVE_URL:-https://github.com/DevCraftClub/mhadmin/archive/refs/heads/rel/200.4.1.zip}"
DEST="${DLE_ADMIN_SDK:-}"

if [ -z "$DEST" ]; then
echo "DLE_ADMIN_SDK не задан" >&2
exit 1
fi

if ! command -v unzip >/dev/null 2>&1; then
echo "Admin SDK: нет unzip" >&2
exit 1
fi

TMP="$(mktemp -d)"
cleanup() { rm -rf "$TMP"; }
trap cleanup EXIT

ZIP="$TMP/admin.zip"

curl_zip() {
src="$1"
echo "Admin SDK: скачиваю ${src}" >&2
# Фиксированное имя: -J/-O на CI часто даёт файл «download» без .zip.
if [ -n "${GITHUB_TOKEN:-}" ] && printf '%s' "$src" | grep -q 'github.com'; then
curl -fsSL --retry 3 --retry-delay 2 -L \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-o "$ZIP" "$src"
else
curl -fsSL --retry 3 --retry-delay 2 -L -o "$ZIP" "$src"
fi
}

zip_ok() {
[ -s "$ZIP" ] && unzip -t "$ZIP" >/dev/null 2>&1
}

if ! curl_zip "$URL" || ! zip_ok; then
echo "Admin SDK: витрина не zip, пробую снимок GitHub" >&2
head -c 160 "$ZIP" >&2 || true
echo >&2
curl_zip "$FALLBACK"
fi

if ! zip_ok; then
echo "Admin SDK: ответ не zip (Cloudflare / вход?)" >&2
ls -la "$TMP" >&2 || true
head -c 200 "$ZIP" >&2 || true
exit 1
fi

echo "Admin SDK: файл $(wc -c < "$ZIP") байт" >&2

unzip -q "$ZIP" -d "$TMP/unpack"

SDK=""
# GitHub archive: mhadmin-rel-200.4.1/upload/devcraft/src/sdk/dle
for root in "$TMP/unpack"/mhadmin-rel-* "$TMP/unpack"/mhadmin-*; do
[ -d "$root" ] || continue
cand="$root/upload/devcraft/src/sdk/dle"
if [ -d "$cand/Schema" ] && [ -d "$cand/Xfield/Schema" ]; then
SDK="$cand"
echo "Admin SDK: корень $(basename "$root")" >&2
break
fi
done

if [ -z "$SDK" ]; then
while IFS= read -r dir; do
if [ -d "$dir/Schema" ] && [ -d "$dir/Xfield/Schema" ]; then
SDK="$dir"
break
fi
done <<EOF
$(find "$TMP/unpack" -type d -path '*/upload/devcraft/src/sdk/dle')
EOF
fi

if [ -z "$SDK" ]; then
echo "Admin SDK: в архиве нет mhadmin-rel-*/upload/devcraft/src/sdk/dle/Schema" >&2
find "$TMP/unpack" -maxdepth 3 -type d >&2 || true
exit 1
fi

rm -rf "$DEST"
mkdir -p "$DEST"
cp -a "$SDK"/. "$DEST"/

echo "Admin SDK: модели → ${DEST} (Schema=$(find "$DEST/Schema" -name '*.php' | wc -l))" >&2
13 changes: 12 additions & 1 deletion .github/workflows/openapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ on:
- 'upload/api/composer.json'
- 'upload/api/composer.lock'
- '.github/workflows/openapi.yml'
- '.github/scripts/fetch-admin-sdk.sh'
- 'upload/api/scripts/**'

permissions:
contents: write
Expand Down Expand Up @@ -37,7 +39,14 @@ jobs:
composer install --no-dev --no-interaction --prefer-dist --no-progress

- name: Generate openapi.yaml
run: composer openapi
env:
DLE_ADMIN_SDK: ${{ runner.temp }}/dle-admin-sdk
ADMIN_DOWNLOAD_URL: https://devcraft.club/downloads/devcraft-admin-panel.4/download
ADMIN_ARCHIVE_URL: https://github.com/DevCraftClub/mhadmin/archive/refs/heads/rel/200.4.1.zip
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
composer openapi
test -s ../../apidata/openapi.yaml

- name: Open PR if spec changed
uses: peter-evans/create-pull-request@v8
Expand All @@ -50,5 +59,7 @@ jobs:
body: |
Автоматическая регенерация `apidata/openapi.yaml` из PHP-атрибутов.

Модели Schema — из последней версии [DevCraft Admin](https://devcraft.club/downloads/devcraft-admin-panel.4/download).

Триггер: `${{ github.event_name }}`
labels: documentation
Loading
Loading