65 lines
2.6 KiB
YAML
65 lines
2.6 KiB
YAML
name: deploy-portainer
|
||
|
||
# Ручной запуск: вкладка Actions → Run workflow.
|
||
# Создаёт или обновляет стек photo-editor на Portainer
|
||
# (https://ptr.byte-mate.ru) из deploy/docker-compose.yml.
|
||
on:
|
||
workflow_dispatch:
|
||
|
||
concurrency:
|
||
group: deploy
|
||
cancel-in-progress: true
|
||
|
||
jobs:
|
||
deploy:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Deploy stack to Portainer
|
||
env:
|
||
PORTAINER_URL: https://ptr.byte-mate.ru
|
||
PORTAINER_API_KEY: ${{ secrets.PORTAINER_API_KEY }}
|
||
STACK_NAME: photo-editor
|
||
# Если не задано — берётся первый endpoint из /api/endpoints
|
||
ENDPOINT_ID: ${{ vars.PORTAINER_ENDPOINT_ID }}
|
||
run: |
|
||
set -euo pipefail
|
||
|
||
if [ -z "${PORTAINER_API_KEY:-}" ]; then
|
||
echo "::error::Секрет PORTAINER_API_KEY не задан"
|
||
echo "::error::Создайте API-ключ в Portainer (Account → API keys) и добавьте его в секреты репозитория."
|
||
exit 1
|
||
fi
|
||
|
||
AUTH="X-API-Key: ${PORTAINER_API_KEY}"
|
||
|
||
# Определяем endpoint (окружение Docker), если не задан вручную
|
||
if [ -z "${ENDPOINT_ID:-}" ]; then
|
||
ENDPOINT_ID=$(curl -fsSk -H "$AUTH" "$PORTAINER_URL/api/endpoints" | jq -r '.[0].Id')
|
||
echo "Endpoint id автоопределён: ${ENDPOINT_ID}"
|
||
fi
|
||
echo "Endpoint id: ${ENDPOINT_ID}"
|
||
|
||
# Ищем существующий стек
|
||
STACK_ID=$(curl -fsSk -H "$AUTH" \
|
||
"$PORTAINER_URL/api/stacks?filters=%7B%22EndpointId%22%3A${ENDPOINT_ID}%7D" \
|
||
| jq -r ".[] | select(.Name==\"${STACK_NAME}\") | .Id" | head -1 || true)
|
||
|
||
if [ -n "${STACK_ID}" ]; then
|
||
echo "Обновляю стек ${STACK_NAME} (id=${STACK_ID})"
|
||
curl -fsSk -X PUT -H "$AUTH" \
|
||
-F "StackFileContent=@deploy/docker-compose.yml" \
|
||
"$PORTAINER_URL/api/stacks/${STACK_ID}?endpointId=${ENDPOINT_ID}" >/dev/null
|
||
else
|
||
echo "Создаю стек ${STACK_NAME}"
|
||
curl -fsSk -X POST -H "$AUTH" \
|
||
-F "Name=${STACK_NAME}" \
|
||
-F "EndpointId=${ENDPOINT_ID}" \
|
||
-F "StackFileContent=@deploy/docker-compose.yml" \
|
||
"$PORTAINER_URL/api/stacks/create/standalone" >/dev/null
|
||
fi
|
||
|
||
echo "✅ Стек ${STACK_NAME} развёрнут на ${PORTAINER_URL}"
|