Lumen / .github /workflows /deploy-proxy.yml
SilverElixir
Pin CI actions by SHA and harden backup and deploy workflows
6d81643
Raw History Blame Contribute Delete
4.36 kB
name: Deploy proxy
# Деплой Deno-прокси только после зелёного CI и только если менялся proxy/
# (аудит, 30.09.2026): раньше прокси выкатывался вручную из дашборда, код и
# деплой рассинхронизировались. Ждём воркфлоу "CI", как sync-to-hf.yml.
# Нужны секреты репозитория (только имена проектов; токен не нужен — deployctl
# ходит через GitHub OIDC, нужно право id-token: write ниже):
# DENO_PROXY_PROJECT — имя основного проекта прокси в Deno Deploy
# DENO_PROXY_PROJECT_FALLBACK — имя резервного проекта прокси в Deno Deploy
# Плюс ручной шаг в дашборде Deno (один раз на проект): Settings → Git →
# подключить репозиторий, режим деплоя "GitHub Actions".
on:
workflow_run:
workflows: ["CI"]
types: [completed]
branches: [main]
# Ручной запуск из вкладки Actions — например, чтобы выложить текущий код
# после добавления секретов, без правок в proxy/.
workflow_dispatch:
permissions:
contents: read
# deployctl ходит в Deno через GitHub OIDC, токен не нужен (см. denoland/deployctl).
id-token: write
# Два CI подряд — деплоим по очереди, идущий деплой не отменяем.
concurrency:
group: deno-proxy-deploy
cancel-in-progress: false
jobs:
deploy:
# Авто: только пуши в ЭТОТ репозиторий с зелёным CI (та же защита от форков, что в sync-to-hf.yml).
# Вручную: всегда (для ручного запуска и нужен отдельный пункт).
if: >-
github.event_name == 'workflow_dispatch' ||
(github.event.workflow_run.conclusion == 'success'
&& github.event.workflow_run.event == 'push'
&& github.event.workflow_run.head_repository.full_name == github.repository)
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
# Тот коммит, что проверялся CI (см. sync-to-hf.yml); при ручном
# запуске — текущий main.
ref: ${{ github.event.workflow_run.head_sha || github.sha }}
fetch-depth: 0
- name: Check proxy changes
id: proxy_changed
# При ручном запуске всегда деплоим (иначе было бы нечего запускать).
if: github.event_name == 'workflow_dispatch'
run: echo "changed=true" >> "$GITHUB_OUTPUT"
- name: Check proxy changes on CI trigger
id: proxy_changed_ci
if: github.event_name != 'workflow_dispatch'
run: |
# Мержи — по базе слияния, а не HEAD~1: иначе мультикоммитные пуши
# в main проверяли бы только последний коммит.
if git rev-parse --verify HEAD^2 >/dev/null 2>&1; then
base="$(git merge-base HEAD^1 HEAD^2)"
else
base="HEAD~1"
fi
if git diff --name-only "$base" HEAD | grep -q '^proxy/'; then
echo "changed=true" >> "$GITHUB_OUTPUT"
else
echo "changed=false" >> "$GITHUB_OUTPUT"
fi
- name: Deploy to primary proxy
if: steps.proxy_changed.outputs.changed == 'true' || steps.proxy_changed_ci.outputs.changed == 'true'
uses: denoland/deployctl@35381c73621e1731268f80e51b54718d086f1e64 # v1
with:
project: ${{ secrets.DENO_PROXY_PROJECT }}
entrypoint: proxy/proxy.ts
- name: Deploy to fallback proxy
if: steps.proxy_changed.outputs.changed == 'true' || steps.proxy_changed_ci.outputs.changed == 'true'
uses: denoland/deployctl@35381c73621e1731268f80e51b54718d086f1e64 # v1
with:
project: ${{ secrets.DENO_PROXY_PROJECT_FALLBACK }}
entrypoint: proxy/proxy.ts