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