Добавлены новые файлы и обновлены триггеры для workflow деплоя, включая поддержку запуска через Makefile и улучшение документации по CI.
Синхронизация Wiki / Синхронизация Wiki (push) Successful in 2s

This commit is contained in:
Dmitriy Fofanov
2026-02-24 23:50:12 +03:00
parent 90966663bf
commit f9b9c20f54
5 changed files with 169 additions and 13 deletions
+11
View File
@@ -1,6 +1,17 @@
name: "Deploy scripts to remote server"
on:
push:
branches:
- master
paths:
- "letsencrypt_regru_api.py"
- "letsencrypt_regru.sh"
- "letsencrypt_regru_dns.sh"
- "letsencrypt_regru.ps1"
- "requirements.txt"
- "systemd/**"
- ".github/workflows/deploy-service.yml"
workflow_dispatch:
inputs:
ref:
+75 -13
View File
@@ -42,14 +42,20 @@ BUILD_DIR_PY = build
SPEC_FILE = $(APP_NAME).spec
# Переменные для запуска Gitea Actions workflows
DFGIT_URL ?= http://dfgit
DFGIT_URL ?= https://github.dfv24.com
WORKFLOW_DISPATCH_SCRIPT ?= scripts/wiki_sync_dispatch.py
DFGIT_REPO ?= fofanov.dmitry/configure_nginx_manager
GIT_TOKEN ?=
GITEA_TOKEN ?=
GITEA_ACCESS_TOKEN ?=
AUTH_TOKEN := $(or $(DFGIT_TOKEN),$(GIT_TOKEN),$(GITEA_TOKEN),$(GITEA_ACCESS_TOKEN))
WIKI_SYNC_WORKFLOW ?= wiki-sync.yml
WIKI_SYNC_REF ?= master
RELEASE_WORKFLOW ?= release.yml
RELEASE_REF ?= master
RELEASE_TAG := $(if $(TAG),$(TAG),v$(VERSION))
DEPLOY_SERVICE_WORKFLOW ?= deploy-service.yml
DEPLOY_SERVICE_REF ?= master
@@ -86,9 +92,9 @@ help:
@echo ""
@echo "$(GREEN)CI / Wiki:$(NC)"
@echo ""
@echo " $(YELLOW)make wiki-sync$(NC) - Запустить workflow wiki-sync.yml на dfgit"
@echo " $(YELLOW)make ci-release$(NC) - Запустить workflow release.yml на dfgit (нужен TAG или VERSION)"
@echo " $(YELLOW)make deploy-service$(NC) - Запустить workflow deploy-service.yml на dfgit"
@echo " $(YELLOW)make wiki-sync$(NC) - Запустить workflow wiki-sync.yml на github.dfv24.com"
@echo " $(YELLOW)make ci-release$(NC) - Запустить workflow release.yml на github.dfv24.com (нужен TAG или VERSION)"
@echo " $(YELLOW)make deploy-service$(NC) - Запустить workflow deploy-service.yml на github.dfv24.com"
@echo ""
@echo " $(YELLOW)make help$(NC) - Показать эту справку"
@echo ""
@@ -444,17 +450,35 @@ logs:
@echo "$(YELLOW)→ Логи systemd:$(NC)"
@journalctl -u $(SERVICE_FILE) -n 50 --no-pager 2>/dev/null || echo "$(YELLOW)Логи systemd не найдены$(NC)"
# Запуск workflow синхронизации wiki на dfgit
# Запуск workflow синхронизации wiki на github.dfv24.com
ifeq ($(OS),Windows_NT)
wiki-sync:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Запуск wiki-sync workflow на dfgit $(NC)"
@echo "$(BLUE)║ Запуск wiki-sync workflow на github.dfv24.com$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@$(PYTHON) $(WORKFLOW_DISPATCH_SCRIPT) --workflow $(WIKI_SYNC_WORKFLOW) --ref $(WIKI_SYNC_REF) --input ref=$(WIKI_SYNC_REF)
$(if $(AUTH_TOKEN),,$(error Токен не задан. Укажите DFGIT_TOKEN или GIT_TOKEN/GITEA_TOKEN/GITEA_ACCESS_TOKEN))
@powershell -NoProfile -ExecutionPolicy Bypass -Command "$$ErrorActionPreference='Stop'; Write-Host '>>> Запуск wiki-sync workflow (ref=$(WIKI_SYNC_REF))...'; Invoke-RestMethod -Method Post -Uri '$(DFGIT_URL)/api/v1/repos/$(DFGIT_REPO)/actions/workflows/$(WIKI_SYNC_WORKFLOW)/dispatches' -Headers @{ Authorization = 'token $(AUTH_TOKEN)'; 'Content-Type' = 'application/json' } -Body '{\"ref\": \"$(WIKI_SYNC_REF)\", \"inputs\": {\"ref\": \"$(WIKI_SYNC_REF)\"}}' -ErrorAction Stop | Out-Null; Write-Host '>>> Workflow запущен. Статус: $(DFGIT_URL)/$(DFGIT_REPO)/actions'"
else
wiki-sync:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Запуск wiki-sync workflow на github.dfv24.com ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
$(if $(AUTH_TOKEN),,$(error Токен не задан. Укажите DFGIT_TOKEN или GIT_TOKEN/GITEA_TOKEN/GITEA_ACCESS_TOKEN))
@echo ">>> Запуск wiki-sync workflow (ref=$(WIKI_SYNC_REF))..."
@curl -sf -X POST \
-H "Authorization: token $(AUTH_TOKEN)" \
-H "Content-Type: application/json" \
"$(DFGIT_URL)/api/v1/repos/$(DFGIT_REPO)/actions/workflows/$(WIKI_SYNC_WORKFLOW)/dispatches" \
-d '{"ref": "$(WIKI_SYNC_REF)", "inputs": {"ref": "$(WIKI_SYNC_REF)"}}' \
&& echo ">>> Workflow запущен. Статус: $(DFGIT_URL)/$(DFGIT_REPO)/actions"
endif
ifeq ($(OS),Windows_NT)
ci-release:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Запуск release workflow на dfgit $(NC)"
@echo "$(BLUE)║ Запуск release workflow на github.dfv24.com$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
ifndef TAG
@@ -462,14 +486,52 @@ ifndef TAG
$(error Укажите TAG=vX.Y.Z или VERSION=X.Y.Z. Пример: make ci-release TAG=v1.0.0)
endif
endif
@$(PYTHON) $(WORKFLOW_DISPATCH_SCRIPT) --workflow $(RELEASE_WORKFLOW) --ref $(RELEASE_REF) --input tag=$(if $(TAG),$(TAG),v$(VERSION)) --require-input tag
deploy-service:
$(if $(AUTH_TOKEN),,$(error Токен не задан. Укажите DFGIT_TOKEN или GIT_TOKEN/GITEA_TOKEN/GITEA_ACCESS_TOKEN))
@powershell -NoProfile -ExecutionPolicy Bypass -Command "$$ErrorActionPreference='Stop'; Write-Host '>>> Запуск release workflow (ref=$(RELEASE_REF), tag=$(RELEASE_TAG))...'; Invoke-RestMethod -Method Post -Uri '$(DFGIT_URL)/api/v1/repos/$(DFGIT_REPO)/actions/workflows/$(RELEASE_WORKFLOW)/dispatches' -Headers @{ Authorization = 'token $(AUTH_TOKEN)'; 'Content-Type' = 'application/json' } -Body '{\"ref\": \"$(RELEASE_REF)\", \"inputs\": {\"tag\": \"$(RELEASE_TAG)\"}}' -ErrorAction Stop | Out-Null; Write-Host '>>> Workflow запущен. Статус: $(DFGIT_URL)/$(DFGIT_REPO)/actions'"
else
ci-release:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Запуск deploy-service workflow на dfgit $(NC)"
@echo "$(BLUE)║ Запуск release workflow на github.dfv24.com$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@$(PYTHON) $(WORKFLOW_DISPATCH_SCRIPT) --workflow $(DEPLOY_SERVICE_WORKFLOW) --ref $(if $(REF),$(REF),$(DEPLOY_SERVICE_REF)) --input ref=$(if $(REF),$(REF),$(DEPLOY_SERVICE_REF))
ifndef TAG
ifndef VERSION
$(error Укажите TAG=vX.Y.Z или VERSION=X.Y.Z. Пример: make ci-release TAG=v1.0.0)
endif
endif
$(if $(AUTH_TOKEN),,$(error Токен не задан. Укажите DFGIT_TOKEN или GIT_TOKEN/GITEA_TOKEN/GITEA_ACCESS_TOKEN))
@echo ">>> Запуск release workflow (ref=$(RELEASE_REF), tag=$(RELEASE_TAG))..."
@curl -sf -X POST \
-H "Authorization: token $(AUTH_TOKEN)" \
-H "Content-Type: application/json" \
"$(DFGIT_URL)/api/v1/repos/$(DFGIT_REPO)/actions/workflows/$(RELEASE_WORKFLOW)/dispatches" \
-d '{"ref": "$(RELEASE_REF)", "inputs": {"tag": "$(RELEASE_TAG)"}}' \
&& echo ">>> Workflow запущен. Статус: $(DFGIT_URL)/$(DFGIT_REPO)/actions"
endif
ifeq ($(OS),Windows_NT)
deploy-service:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Запуск deploy-service workflow на github.dfv24.com ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
$(if $(AUTH_TOKEN),,$(error Токен не задан. Укажите DFGIT_TOKEN или GIT_TOKEN/GITEA_TOKEN/GITEA_ACCESS_TOKEN))
@powershell -NoProfile -ExecutionPolicy Bypass -Command "$$ErrorActionPreference='Stop'; Write-Host '>>> Запуск deploy-service workflow (ref=$(if $(REF),$(REF),$(DEPLOY_SERVICE_REF)))...'; Invoke-RestMethod -Method Post -Uri '$(DFGIT_URL)/api/v1/repos/$(DFGIT_REPO)/actions/workflows/$(DEPLOY_SERVICE_WORKFLOW)/dispatches' -Headers @{ Authorization = 'token $(AUTH_TOKEN)'; 'Content-Type' = 'application/json' } -Body '{\"ref\": \"$(if $(REF),$(REF),$(DEPLOY_SERVICE_REF))\", \"inputs\": {\"ref\": \"$(if $(REF),$(REF),$(DEPLOY_SERVICE_REF))\"}}' -ErrorAction Stop | Out-Null; Write-Host '>>> Workflow запущен. Статус: $(DFGIT_URL)/$(DFGIT_REPO)/actions'"
else
deploy-service:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Запуск deploy-service workflow на github.dfv24.com ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
$(if $(AUTH_TOKEN),,$(error Токен не задан. Укажите DFGIT_TOKEN или GIT_TOKEN/GITEA_TOKEN/GITEA_ACCESS_TOKEN))
@echo ">>> Запуск deploy-service workflow (ref=$(if $(REF),$(REF),$(DEPLOY_SERVICE_REF)))..."
@curl -sf -X POST \
-H "Authorization: token $(AUTH_TOKEN)" \
-H "Content-Type: application/json" \
"$(DFGIT_URL)/api/v1/repos/$(DFGIT_REPO)/actions/workflows/$(DEPLOY_SERVICE_WORKFLOW)/dispatches" \
-d '{"ref": "$(if $(REF),$(REF),$(DEPLOY_SERVICE_REF))", "inputs": {"ref": "$(if $(REF),$(REF),$(DEPLOY_SERVICE_REF))"}}' \
&& echo ">>> Workflow запущен. Статус: $(DFGIT_URL)/$(DFGIT_REPO)/actions"
endif
# Ручной запуск обновления
run: check-root
+12
View File
@@ -41,3 +41,15 @@
- прикрепить файлы
Подробности зависят от ваших workflows.
## Ручной запуск релиза (workflow_dispatch)
Если в workflow релиза включён `workflow_dispatch`, его можно запускать вручную:
- из UI Actions
- или через Makefile (API dispatch):
`make ci-release TAG=v1.0.0`
Для запуска через Makefile нужен токен (любой из): `DFGIT_TOKEN` / `GIT_TOKEN` / `GITEA_TOKEN` / `GITEA_ACCESS_TOKEN`.
Makefile отправляет запрос на `DFGIT_URL` (по умолчанию `https://github.dfv24.com`) в репозиторий `DFGIT_REPO`.
+42
View File
@@ -44,6 +44,48 @@
- `make status`
- `make logs`
### CI / Wiki (workflow dispatch)
Эти команды **не выполняют деплой/синк локально** — они делают API-запрос в Actions
на `github.dfv24.com` и запускают соответствующий workflow.
- `make wiki-sync` — запустить синхронизацию `wiki/` в Wiki репозитория
- `make ci-release TAG=vX.Y.Z` (или `make ci-release VERSION=X.Y.Z`) — запустить релизный workflow
- `make deploy-service` (опционально `REF=branch_or_tag`) — запустить деплойный workflow
`wiki-sync` также запускается автоматически при push в `master`, если изменились файлы в `wiki/**`.
Нужно задать токен (любой из):
- `DFGIT_TOKEN` (предпочтительно)
- `GIT_TOKEN`
- `GITEA_TOKEN`
- `GITEA_ACCESS_TOKEN`
Примеры:
```bash
# Windows PowerShell
$env:DFGIT_TOKEN = "<token>"; make wiki-sync
$env:DFGIT_TOKEN = "<token>"; make ci-release TAG=v1.2.3
$env:DFGIT_TOKEN = "<token>"; make deploy-service
$env:DFGIT_TOKEN = "<token>"; make deploy-service REF=master
```
```bash
# Linux/macOS
DFGIT_TOKEN="<token>" make wiki-sync
DFGIT_TOKEN="<token>" make ci-release TAG=v1.2.3
DFGIT_TOKEN="<token>" make deploy-service
DFGIT_TOKEN="<token>" make deploy-service REF=master
```
Примечания:
- Базовый URL задаётся переменной `DFGIT_URL` (по умолчанию `https://github.dfv24.com`).
- Репозиторий задаётся `DFGIT_REPO` (по умолчанию `fofanov.dmitry/configure_nginx_manager`).
- Для Linux/macOS требуется установленный `curl`.
## Типовой workflow (рекомендуется)
1) Подготовка
+29
View File
@@ -2,6 +2,22 @@
Эта страница описывает деплой через workflow `.github/workflows/deploy-service.yml`.
## Триггеры (когда запускается)
1) Автоматически по push
- ветка: `master`
- только если изменились файлы:
- `letsencrypt_regru_api.py`, `letsencrypt_regru*.sh`, `letsencrypt_regru.ps1`
- `requirements.txt`
- `systemd/**`
- `.github/workflows/deploy-service.yml`
2) Вручную (workflow_dispatch)
- из UI Actions
- или через Makefile командой `make deploy-service` (Makefile делает API dispatch)
## Что делает workflow
- деплоит проект на сервер `192.168.10.14` по SSH (ключ)
@@ -88,6 +104,19 @@ dfv24.com,pages.github.dfv24.com
2. Запустите workflow `Deploy scripts to remote server`
3. При необходимости задайте `ref` (ветка/тег/коммит)
### Запуск через Makefile
Makefile умеет запускать workflow через API на `github.dfv24.com`:
- `make deploy-service` — деплой `master`
- `make deploy-service REF=<branch_or_tag>` — деплой указанной ветки/тега
Нужен токен (любой из): `DFGIT_TOKEN` / `GIT_TOKEN` / `GITEA_TOKEN` / `GITEA_ACCESS_TOKEN`.
Важно: токен для **запуска** workflow (Makefile) и секреты для **выполнения** workflow (Actions secrets)
— это разные вещи. Workflow внутри всё равно требует `GIT_TOKEN` (или `GITEA_TOKEN`) secret,
SSH-ключ и остальные secrets из списка выше.
После завершения проверьте статус сервиса на сервере:
```bash