diff --git a/.github/workflows/deploy-service.yml b/.github/workflows/deploy-service.yml index 4a234c0..062d367 100644 --- a/.github/workflows/deploy-service.yml +++ b/.github/workflows/deploy-service.yml @@ -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: diff --git a/Makefile b/Makefile index 2c0baad..311a5b5 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/wiki/Build_and_Release.md b/wiki/Build_and_Release.md index 80f48fc..65c9422 100644 --- a/wiki/Build_and_Release.md +++ b/wiki/Build_and_Release.md @@ -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`. diff --git a/wiki/Commands.md b/wiki/Commands.md index 98a3b5b..53996ad 100644 --- a/wiki/Commands.md +++ b/wiki/Commands.md @@ -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 = ""; make wiki-sync +$env:DFGIT_TOKEN = ""; make ci-release TAG=v1.2.3 +$env:DFGIT_TOKEN = ""; make deploy-service +$env:DFGIT_TOKEN = ""; make deploy-service REF=master +``` + +```bash +# Linux/macOS +DFGIT_TOKEN="" make wiki-sync +DFGIT_TOKEN="" make ci-release TAG=v1.2.3 +DFGIT_TOKEN="" make deploy-service +DFGIT_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) Подготовка diff --git a/wiki/Deploy_Actions_Secrets.md b/wiki/Deploy_Actions_Secrets.md index 9071b5c..73af028 100644 --- a/wiki/Deploy_Actions_Secrets.md +++ b/wiki/Deploy_Actions_Secrets.md @@ -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=` — деплой указанной ветки/тега + +Нужен токен (любой из): `DFGIT_TOKEN` / `GIT_TOKEN` / `GITEA_TOKEN` / `GITEA_ACCESS_TOKEN`. + +Важно: токен для **запуска** workflow (Makefile) и секреты для **выполнения** workflow (Actions secrets) +— это разные вещи. Workflow внутри всё равно требует `GIT_TOKEN` (или `GITEA_TOKEN`) secret, +SSH-ключ и остальные secrets из списка выше. + После завершения проверьте статус сервиса на сервере: ```bash