Добавлены новые документы и инструкции по настройке, использованию и тестированию SSL сертификатов Let's Encrypt с использованием API reg.ru. Обновлены зависимости в requirements.txt для поддержки новых функций. Включены подробные шаги по автоматизации, созданию и продлению сертификатов, а также интеграции с Nginx Proxy Manager.
This commit is contained in:
330
.gitea/README.md
Normal file
330
.gitea/README.md
Normal file
@@ -0,0 +1,330 @@
|
||||
# Настройка Gitea Actions для автоматической сборки
|
||||
|
||||
## 📋 Предварительные требования
|
||||
|
||||
### 1. Gitea с поддержкой Actions
|
||||
|
||||
Убедитесь, что ваш Gitea имеет включенные Actions:
|
||||
|
||||
```ini
|
||||
# В app.ini Gitea
|
||||
[actions]
|
||||
ENABLED = true
|
||||
DEFAULT_ACTIONS_URL = https://gitea.com
|
||||
```
|
||||
|
||||
### 2. Gitea Runner
|
||||
|
||||
Установите и настройте Gitea Act Runner:
|
||||
|
||||
```bash
|
||||
# Скачать runner
|
||||
wget https://dl.gitea.com/act_runner/latest/act_runner-linux-amd64 -O act_runner
|
||||
chmod +x act_runner
|
||||
|
||||
# Зарегистрировать runner
|
||||
./act_runner register --no-interactive \
|
||||
--instance https://your-gitea-instance.com \
|
||||
--token YOUR_RUNNER_TOKEN \
|
||||
--name my-runner
|
||||
|
||||
# Запустить runner
|
||||
./act_runner daemon
|
||||
```
|
||||
|
||||
Или через Docker:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name gitea-runner \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-v $PWD/runner-data:/data \
|
||||
-e GITEA_INSTANCE_URL=https://your-gitea-instance.com \
|
||||
-e GITEA_RUNNER_REGISTRATION_TOKEN=YOUR_TOKEN \
|
||||
gitea/act_runner:latest
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Использование
|
||||
|
||||
### Создание релиза автоматически
|
||||
|
||||
1. **Создайте и отправьте тег:**
|
||||
|
||||
```bash
|
||||
# Создать тег
|
||||
git tag -a v1.0.0 -m "Release version 1.0.0"
|
||||
|
||||
# Отправить тег на сервер
|
||||
git push origin v1.0.0
|
||||
```
|
||||
|
||||
2. **Gitea автоматически:**
|
||||
- Запустит workflow `.gitea/workflows/release.yml`
|
||||
- Соберет Linux версию на Ubuntu runner
|
||||
- Соберет Windows версию на Windows runner
|
||||
- Создаст релиз с артефактами
|
||||
- Добавит контрольные суммы SHA256 и MD5
|
||||
|
||||
### Ручной запуск workflow
|
||||
|
||||
В веб-интерфейсе Gitea:
|
||||
|
||||
1. Перейдите в **Repository → Actions**
|
||||
2. Выберите workflow **Build and Release**
|
||||
3. Нажмите **Run workflow**
|
||||
4. Укажите версию (опционально)
|
||||
|
||||
---
|
||||
|
||||
## 📂 Структура workflows
|
||||
|
||||
```
|
||||
.gitea/
|
||||
└── workflows/
|
||||
├── build-release.yml # Простой workflow (совместим с GitHub)
|
||||
└── release.yml # Расширенный workflow с уведомлениями
|
||||
```
|
||||
|
||||
### build-release.yml
|
||||
|
||||
Базовый workflow, совместимый с GitHub Actions:
|
||||
- Сборка для Linux и Windows
|
||||
- Создание пакетов
|
||||
- Генерация контрольных сумм
|
||||
- Создание релиза
|
||||
|
||||
**Использование:**
|
||||
```bash
|
||||
git tag v1.0.0
|
||||
git push origin v1.0.0
|
||||
```
|
||||
|
||||
### release.yml
|
||||
|
||||
Расширенный workflow с дополнительными возможностями:
|
||||
- Детальные release notes
|
||||
- MD5 + SHA256 checksums
|
||||
- Уведомления после релиза
|
||||
- Поддержка ручного запуска
|
||||
|
||||
**Использование:**
|
||||
```bash
|
||||
# Автоматически при теге
|
||||
git tag v1.0.0
|
||||
git push origin v1.0.0
|
||||
|
||||
# Или вручную через веб-интерфейс
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Настройка
|
||||
|
||||
### Переменные окружения
|
||||
|
||||
Workflow использует следующие переменные:
|
||||
|
||||
| Переменная | Описание | Где установить |
|
||||
|------------|----------|----------------|
|
||||
| `GITEA_TOKEN` | Токен для создания релиза | Repository Secrets |
|
||||
| `GITHUB_TOKEN` | Автоматически (fallback) | Встроенный |
|
||||
|
||||
### Создание GITEA_TOKEN
|
||||
|
||||
1. В Gitea: **Settings → Applications → Generate New Token**
|
||||
2. Выберите права: `repo`, `write:packages`
|
||||
3. Скопируйте токен
|
||||
4. В репозитории: **Settings → Secrets → Add Secret**
|
||||
- Name: `GITEA_TOKEN`
|
||||
- Value: ваш токен
|
||||
|
||||
---
|
||||
|
||||
## 📦 Артефакты релиза
|
||||
|
||||
После успешной сборки в релизе будут доступны:
|
||||
|
||||
```
|
||||
letsencrypt-regru-linux-x86_64.tar.gz
|
||||
letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||
letsencrypt-regru-linux-x86_64.tar.gz.md5
|
||||
letsencrypt-regru-windows-x86_64.zip
|
||||
letsencrypt-regru-windows-x86_64.zip.sha256
|
||||
letsencrypt-regru-windows-x86_64.zip.md5
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Workflow не запускается
|
||||
|
||||
**Проблема:** После push тега workflow не запускается
|
||||
|
||||
**Решение:**
|
||||
1. Проверьте, что Actions включены в настройках репозитория
|
||||
2. Проверьте `.gitea/workflows/*.yml` на синтаксические ошибки
|
||||
3. Убедитесь, что runner зарегистрирован и запущен
|
||||
|
||||
```bash
|
||||
# Проверить статус runner
|
||||
./act_runner status
|
||||
|
||||
# Посмотреть логи runner
|
||||
./act_runner daemon --debug
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Ошибка при сборке Windows
|
||||
|
||||
**Проблема:** `make: command not found` на Windows
|
||||
|
||||
**Решение:**
|
||||
|
||||
Установите Make для Windows или используйте альтернативный workflow:
|
||||
|
||||
```yaml
|
||||
- name: Build Windows executable (без make)
|
||||
run: |
|
||||
pyinstaller --onefile --name letsencrypt-regru letsencrypt_regru_api.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Релиз создается без файлов
|
||||
|
||||
**Проблема:** Релиз создан, но артефакты отсутствуют
|
||||
|
||||
**Решение:**
|
||||
|
||||
Проверьте логи job `create-release`:
|
||||
|
||||
1. Перейдите в **Actions → Build and Release → create-release**
|
||||
2. Проверьте шаг "Download artifacts"
|
||||
3. Убедитесь, что предыдущие jobs (`build-linux`, `build-windows`) завершились успешно
|
||||
|
||||
---
|
||||
|
||||
### Permission denied при создании релиза
|
||||
|
||||
**Проблема:** `Error: Resource not accessible by integration`
|
||||
|
||||
**Решение:**
|
||||
|
||||
1. Проверьте права токена:
|
||||
- `GITEA_TOKEN` должен иметь права `repo` и `write:packages`
|
||||
|
||||
2. Или используйте встроенный `GITHUB_TOKEN`:
|
||||
- Убедитесь, что в настройках репозитория включены Actions
|
||||
|
||||
---
|
||||
|
||||
## 📊 Мониторинг сборок
|
||||
|
||||
### Просмотр логов
|
||||
|
||||
1. **Web UI:**
|
||||
- Repository → Actions
|
||||
- Выберите workflow run
|
||||
- Кликните на job для просмотра логов
|
||||
|
||||
2. **API:**
|
||||
```bash
|
||||
curl -H "Authorization: token YOUR_TOKEN" \
|
||||
https://your-gitea.com/api/v1/repos/USER/REPO/actions/runs
|
||||
```
|
||||
|
||||
### Статус badges
|
||||
|
||||
Добавьте в README.md:
|
||||
|
||||
```markdown
|
||||
[](https://your-gitea.com/USER/REPO/actions)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Автоматизация релизов
|
||||
|
||||
### Semantic Versioning
|
||||
|
||||
Используйте теги с семантическим версионированием:
|
||||
|
||||
```bash
|
||||
# Major release (несовместимые изменения)
|
||||
git tag v2.0.0
|
||||
|
||||
# Minor release (новые функции)
|
||||
git tag v1.1.0
|
||||
|
||||
# Patch release (исправления)
|
||||
git tag v1.0.1
|
||||
```
|
||||
|
||||
### Pre-release
|
||||
|
||||
Для тестовых релизов используйте suffix:
|
||||
|
||||
```bash
|
||||
git tag v1.0.0-beta.1
|
||||
git tag v1.0.0-rc.1
|
||||
```
|
||||
|
||||
В workflow автоматически будет установлен `prerelease: true` для таких тегов.
|
||||
|
||||
---
|
||||
|
||||
## 📝 Changelog автоматизация
|
||||
|
||||
### Использование conventional commits
|
||||
|
||||
```bash
|
||||
git commit -m "feat: добавлена поддержка wildcard сертификатов"
|
||||
git commit -m "fix: исправлена ошибка загрузки в NPM"
|
||||
git commit -m "docs: обновлена документация"
|
||||
```
|
||||
|
||||
### Генерация CHANGELOG.md
|
||||
|
||||
Добавьте в workflow:
|
||||
|
||||
```yaml
|
||||
- name: Generate Changelog
|
||||
run: |
|
||||
git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" > CHANGELOG.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Рекомендации
|
||||
|
||||
1. **Используйте теги только для стабильных релизов**
|
||||
- Тестируйте перед созданием тега
|
||||
- Проверяйте сборку локально: `make release`
|
||||
|
||||
2. **Проверяйте контрольные суммы**
|
||||
- Всегда включайте SHA256 и MD5
|
||||
- Документируйте процесс проверки для пользователей
|
||||
|
||||
3. **Версионирование**
|
||||
- Следуйте семантическому версионированию
|
||||
- Документируйте breaking changes
|
||||
|
||||
4. **Тестирование**
|
||||
- Запускайте workflow вручную перед тегированием
|
||||
- Проверяйте артефакты после сборки
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Полезные ссылки
|
||||
|
||||
- [Gitea Actions Documentation](https://docs.gitea.com/next/usage/actions/overview)
|
||||
- [Act Runner GitHub](https://github.com/nektos/act)
|
||||
- [Workflow Syntax](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions)
|
||||
|
||||
---
|
||||
|
||||
**Примечание:** Эти workflows совместимы с GitHub Actions и могут использоваться на обеих платформах.
|
||||
211
.gitea/workflows/build-release.yml
Normal file
211
.gitea/workflows/build-release.yml
Normal file
@@ -0,0 +1,211 @@
|
||||
name: Build Releases
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*' # Срабатывает на теги вида v1.0, v2.0.1 и т.д.
|
||||
workflow_dispatch: # Возможность запустить вручную
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
name: Build Linux Executable
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.9'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pyinstaller
|
||||
pip install -r requirements.txt
|
||||
|
||||
- name: Build Linux executable
|
||||
run: |
|
||||
make build-linux
|
||||
|
||||
- name: Test Linux executable
|
||||
run: |
|
||||
chmod +x dist/letsencrypt-regru
|
||||
dist/letsencrypt-regru --help
|
||||
|
||||
- name: Create Linux package
|
||||
run: |
|
||||
make package-linux
|
||||
|
||||
- name: Upload Linux artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-executable
|
||||
path: dist/letsencrypt-regru-linux-x86_64.tar.gz
|
||||
|
||||
- name: Generate SHA256 checksum
|
||||
run: |
|
||||
cd dist
|
||||
sha256sum letsencrypt-regru-linux-x86_64.tar.gz > letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||
|
||||
- name: Upload checksum
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-checksum
|
||||
path: dist/letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||
|
||||
build-windows:
|
||||
name: Build Windows Executable
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.9'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pyinstaller
|
||||
pip install -r requirements.txt
|
||||
|
||||
- name: Build Windows executable
|
||||
run: |
|
||||
make build-windows
|
||||
|
||||
- name: Test Windows executable
|
||||
run: |
|
||||
dist\letsencrypt-regru.exe --help
|
||||
|
||||
- name: Create Windows package
|
||||
run: |
|
||||
make package-windows
|
||||
|
||||
- name: Upload Windows artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows-executable
|
||||
path: dist/letsencrypt-regru-windows-x86_64.zip
|
||||
|
||||
- name: Generate SHA256 checksum
|
||||
run: |
|
||||
cd dist
|
||||
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256 > letsencrypt-regru-windows-x86_64.zip.sha256
|
||||
|
||||
- name: Upload checksum
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows-checksum
|
||||
path: dist/letsencrypt-regru-windows-x86_64.zip.sha256
|
||||
|
||||
create-release:
|
||||
name: Create Gitea Release
|
||||
needs: [build-linux, build-windows]
|
||||
runs-on: ubuntu-latest
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Download Linux artifact
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: linux-executable
|
||||
path: ./artifacts
|
||||
|
||||
- name: Download Linux checksum
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: linux-checksum
|
||||
path: ./artifacts
|
||||
|
||||
- name: Download Windows artifact
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: windows-executable
|
||||
path: ./artifacts
|
||||
|
||||
- name: Download Windows checksum
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: windows-checksum
|
||||
path: ./artifacts
|
||||
|
||||
- name: Get tag name
|
||||
id: get_version
|
||||
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create Release
|
||||
uses: actions/gitea-release@v1
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
tag_name: ${{ steps.get_version.outputs.VERSION }}
|
||||
name: Let's Encrypt RegRu Manager ${{ steps.get_version.outputs.VERSION }}
|
||||
body: |
|
||||
## Let's Encrypt RegRu Manager ${{ steps.get_version.outputs.VERSION }}
|
||||
|
||||
### 📦 Релизные пакеты
|
||||
|
||||
**Linux (Ubuntu/Debian/CentOS):**
|
||||
- `letsencrypt-regru-linux-x86_64.tar.gz` - Исполняемый файл + файлы
|
||||
- `letsencrypt-regru-linux-x86_64.tar.gz.sha256` - Контрольная сумма
|
||||
|
||||
**Windows:**
|
||||
- `letsencrypt-regru-windows-x86_64.zip` - Исполняемый файл + файлы
|
||||
- `letsencrypt-regru-windows-x86_64.zip.sha256` - Контрольная сумма
|
||||
|
||||
### 🚀 Быстрая установка
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
wget https://your-gitea-instance.com/${{ github.repository }}/releases/download/${{ steps.get_version.outputs.VERSION }}/letsencrypt-regru-linux-x86_64.tar.gz
|
||||
tar -xzf letsencrypt-regru-linux-x86_64.tar.gz
|
||||
sudo mv letsencrypt-regru /usr/local/bin/
|
||||
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||
```
|
||||
|
||||
**Windows:**
|
||||
Скачайте `letsencrypt-regru-windows-x86_64.zip` и распакуйте.
|
||||
|
||||
### 📖 Документация
|
||||
|
||||
- [README.md](README.md)
|
||||
- [BUILD_GUIDE.md](BUILD_GUIDE.md)
|
||||
- [INSTALL_GUIDE.md](docs/INSTALL_GUIDE.md)
|
||||
|
||||
### ⚠️ Важно
|
||||
|
||||
- Исполняемые файлы требуют установленного `certbot` в системе
|
||||
- Linux версия требует права root (sudo)
|
||||
- Windows версия не поддерживает certbot напрямую (используйте WSL)
|
||||
|
||||
### 🔐 Проверка контрольных сумм
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||
```
|
||||
|
||||
**Windows:**
|
||||
```powershell
|
||||
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256
|
||||
```
|
||||
|
||||
### 📝 Changelog
|
||||
|
||||
- Автоматическая сборка релиза ${{ steps.get_version.outputs.VERSION }}
|
||||
- См. коммиты для деталей изменений
|
||||
files: |
|
||||
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz
|
||||
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||
./artifacts/letsencrypt-regru-windows-x86_64.zip
|
||||
./artifacts/letsencrypt-regru-windows-x86_64.zip.sha256
|
||||
draft: false
|
||||
prerelease: false
|
||||
387
.gitea/workflows/release.yml
Normal file
387
.gitea/workflows/release.yml
Normal file
@@ -0,0 +1,387 @@
|
||||
name: Build and Release (Gitea Native)
|
||||
|
||||
# Этот workflow оптимизирован для Gitea
|
||||
# Использует нативные возможности Gitea Actions
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
- 'release-*'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'Version tag (e.g., v1.0.0)'
|
||||
required: false
|
||||
default: 'dev'
|
||||
|
||||
env:
|
||||
APP_NAME: letsencrypt-regru
|
||||
PYTHON_VERSION: '3.9'
|
||||
|
||||
jobs:
|
||||
# ============================================================================
|
||||
# Сборка для Linux
|
||||
# ============================================================================
|
||||
build-linux:
|
||||
name: 🐧 Build Linux
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: 🐍 Set up Python ${{ env.PYTHON_VERSION }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
cache: 'pip'
|
||||
|
||||
- name: 📦 Install system dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential
|
||||
|
||||
- name: 📚 Install Python dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip setuptools wheel
|
||||
pip install pyinstaller
|
||||
if [ -f requirements.txt ]; then
|
||||
pip install -r requirements.txt
|
||||
else
|
||||
pip install requests certbot cryptography
|
||||
fi
|
||||
|
||||
- name: ℹ️ Build info
|
||||
run: |
|
||||
make build-info
|
||||
|
||||
- name: 🔨 Build Linux executable
|
||||
run: |
|
||||
make build-linux
|
||||
|
||||
- name: ✅ Test executable
|
||||
run: |
|
||||
chmod +x dist/${{ env.APP_NAME }}
|
||||
./dist/${{ env.APP_NAME }} --help
|
||||
./dist/${{ env.APP_NAME }} --create-config /tmp/test_config.json
|
||||
|
||||
- name: 📦 Create distribution package
|
||||
run: |
|
||||
make package-linux
|
||||
|
||||
- name: 🔐 Generate checksums
|
||||
run: |
|
||||
cd dist
|
||||
sha256sum ${{ env.APP_NAME }}-linux-x86_64.tar.gz > ${{ env.APP_NAME }}-linux-x86_64.tar.gz.sha256
|
||||
md5sum ${{ env.APP_NAME }}-linux-x86_64.tar.gz > ${{ env.APP_NAME }}-linux-x86_64.tar.gz.md5
|
||||
cat ${{ env.APP_NAME }}-linux-x86_64.tar.gz.sha256
|
||||
|
||||
- name: 📤 Upload Linux package
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-package
|
||||
path: |
|
||||
dist/${{ env.APP_NAME }}-linux-x86_64.tar.gz
|
||||
dist/${{ env.APP_NAME }}-linux-x86_64.tar.gz.sha256
|
||||
dist/${{ env.APP_NAME }}-linux-x86_64.tar.gz.md5
|
||||
retention-days: 7
|
||||
|
||||
# ============================================================================
|
||||
# Сборка для Windows
|
||||
# ============================================================================
|
||||
build-windows:
|
||||
name: 🪟 Build Windows
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: 🐍 Set up Python ${{ env.PYTHON_VERSION }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
cache: 'pip'
|
||||
|
||||
- name: 📚 Install Python dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip setuptools wheel
|
||||
pip install pyinstaller
|
||||
if (Test-Path requirements.txt) {
|
||||
pip install -r requirements.txt
|
||||
} else {
|
||||
pip install requests certbot cryptography
|
||||
}
|
||||
|
||||
- name: 🔨 Build Windows executable
|
||||
run: |
|
||||
make build-windows
|
||||
|
||||
- name: ✅ Test executable
|
||||
run: |
|
||||
dist\${{ env.APP_NAME }}.exe --help
|
||||
dist\${{ env.APP_NAME }}.exe --create-config test_config.json
|
||||
|
||||
- name: 📦 Create distribution package
|
||||
run: |
|
||||
make package-windows
|
||||
|
||||
- name: 🔐 Generate checksums
|
||||
run: |
|
||||
cd dist
|
||||
certutil -hashfile ${{ env.APP_NAME }}-windows-x86_64.zip SHA256 > ${{ env.APP_NAME }}-windows-x86_64.zip.sha256
|
||||
certutil -hashfile ${{ env.APP_NAME }}-windows-x86_64.zip MD5 > ${{ env.APP_NAME }}-windows-x86_64.zip.md5
|
||||
type ${{ env.APP_NAME }}-windows-x86_64.zip.sha256
|
||||
|
||||
- name: 📤 Upload Windows package
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows-package
|
||||
path: |
|
||||
dist/${{ env.APP_NAME }}-windows-x86_64.zip
|
||||
dist/${{ env.APP_NAME }}-windows-x86_64.zip.sha256
|
||||
dist/${{ env.APP_NAME }}-windows-x86_64.zip.md5
|
||||
retention-days: 7
|
||||
|
||||
# ============================================================================
|
||||
# Создание релиза в Gitea
|
||||
# ============================================================================
|
||||
create-release:
|
||||
name: 📦 Create Release
|
||||
needs: [build-linux, build-windows]
|
||||
runs-on: ubuntu-latest
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: 📥 Download Linux artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: linux-package
|
||||
path: ./release
|
||||
|
||||
- name: 📥 Download Windows artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: windows-package
|
||||
path: ./release
|
||||
|
||||
- name: 📋 List release files
|
||||
run: |
|
||||
echo "Release files:"
|
||||
ls -lh ./release/
|
||||
|
||||
- name: 🏷️ Get version info
|
||||
id: version
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
||||
VERSION="${{ github.event.inputs.version }}"
|
||||
else
|
||||
VERSION="${GITHUB_REF#refs/tags/}"
|
||||
fi
|
||||
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
||||
echo "Release version: $VERSION"
|
||||
|
||||
- name: 📝 Generate release notes
|
||||
id: release_notes
|
||||
run: |
|
||||
cat > release_notes.md << 'EOF'
|
||||
## 🎉 Let's Encrypt RegRu Manager ${{ steps.version.outputs.VERSION }}
|
||||
|
||||
Автоматическое управление SSL сертификатами Let's Encrypt для доменов на reg.ru с интеграцией в Nginx Proxy Manager.
|
||||
|
||||
### 📦 Файлы релиза
|
||||
|
||||
#### Linux (Ubuntu 20.04+, Debian 10+, CentOS 8+)
|
||||
- **letsencrypt-regru-linux-x86_64.tar.gz** - Исполняемый файл (ELF 64-bit)
|
||||
- **letsencrypt-regru-linux-x86_64.tar.gz.sha256** - SHA256 контрольная сумма
|
||||
- **letsencrypt-regru-linux-x86_64.tar.gz.md5** - MD5 контрольная сумма
|
||||
|
||||
#### Windows (10/11, Server 2019+)
|
||||
- **letsencrypt-regru-windows-x86_64.zip** - Исполняемый файл (PE32+)
|
||||
- **letsencrypt-regru-windows-x86_64.zip.sha256** - SHA256 контрольная сумма
|
||||
- **letsencrypt-regru-windows-x86_64.zip.md5** - MD5 контрольная сумма
|
||||
|
||||
---
|
||||
|
||||
### 🚀 Быстрая установка
|
||||
|
||||
#### Linux (одна команда):
|
||||
```bash
|
||||
curl -fsSL https://your-gitea.com/api/v1/repos/${{ github.repository }}/releases/tags/${{ steps.version.outputs.VERSION }} | \
|
||||
jq -r '.assets[] | select(.name | contains("linux")) | .browser_download_url' | \
|
||||
xargs wget -O letsencrypt-regru.tar.gz && \
|
||||
tar -xzf letsencrypt-regru.tar.gz && \
|
||||
sudo mv letsencrypt-regru /usr/local/bin/ && \
|
||||
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||
```
|
||||
|
||||
#### Или вручную:
|
||||
```bash
|
||||
# 1. Скачать
|
||||
wget https://your-gitea.com/${{ github.repository }}/releases/download/${{ steps.version.outputs.VERSION }}/letsencrypt-regru-linux-x86_64.tar.gz
|
||||
|
||||
# 2. Проверить контрольную сумму
|
||||
wget https://your-gitea.com/${{ github.repository }}/releases/download/${{ steps.version.outputs.VERSION }}/letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||
|
||||
# 3. Распаковать и установить
|
||||
tar -xzf letsencrypt-regru-linux-x86_64.tar.gz
|
||||
sudo mv letsencrypt-regru /usr/local/bin/
|
||||
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||
|
||||
# 4. Проверить
|
||||
letsencrypt-regru --help
|
||||
```
|
||||
|
||||
#### Windows:
|
||||
```powershell
|
||||
# Скачать и распаковать
|
||||
Invoke-WebRequest -Uri "https://your-gitea.com/${{ github.repository }}/releases/download/${{ steps.version.outputs.VERSION }}/letsencrypt-regru-windows-x86_64.zip" -OutFile "letsencrypt-regru.zip"
|
||||
Expand-Archive -Path letsencrypt-regru.zip -DestinationPath "C:\Program Files\LetsEncrypt-RegRu"
|
||||
|
||||
# Проверить
|
||||
& "C:\Program Files\LetsEncrypt-RegRu\letsencrypt-regru.exe" --help
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### ✨ Основные возможности
|
||||
|
||||
- ✅ Автоматическое получение Let's Encrypt сертификатов
|
||||
- ✅ DNS-валидация через API reg.ru
|
||||
- ✅ Поддержка wildcard сертификатов (*.domain.com)
|
||||
- ✅ Автоматическая загрузка в Nginx Proxy Manager
|
||||
- ✅ Автоматическое обновление сертификатов
|
||||
- ✅ Systemd интеграция для автоматизации
|
||||
- ✅ Подробное логирование
|
||||
- ✅ Генерация тестовых самоподписанных сертификатов
|
||||
|
||||
---
|
||||
|
||||
### 📋 Системные требования
|
||||
|
||||
#### Linux:
|
||||
- Ubuntu 20.04+ / Debian 10+ / CentOS 8+ / RHEL 8+
|
||||
- certbot (устанавливается автоматически через `letsencrypt_regru.sh`)
|
||||
- 50 MB свободного места
|
||||
- Права root (sudo)
|
||||
|
||||
#### Windows:
|
||||
- Windows 10/11 или Server 2019+
|
||||
- **Важно:** certbot не поддерживается напрямую на Windows
|
||||
- Рекомендуется использовать WSL (Windows Subsystem for Linux)
|
||||
|
||||
---
|
||||
|
||||
### 📖 Документация
|
||||
|
||||
- **[README.md](README.md)** - Полное руководство пользователя
|
||||
- **[BUILD_GUIDE.md](BUILD_GUIDE.md)** - Руководство по сборке из исходников
|
||||
- **[INSTALL_GUIDE.md](docs/INSTALL_GUIDE.md)** - Детальная инструкция по установке
|
||||
- **[MAKEFILE_COMMANDS.md](MAKEFILE_COMMANDS.md)** - Справка по командам Makefile
|
||||
|
||||
---
|
||||
|
||||
### ⚠️ Важная информация
|
||||
|
||||
1. **Certbot зависимость:**
|
||||
- Исполняемый файл НЕ включает certbot
|
||||
- certbot должен быть установлен в системе
|
||||
- Используется через subprocess
|
||||
|
||||
2. **Размер файла:**
|
||||
- Linux: ~45-55 MB (включая Python runtime)
|
||||
- Windows: ~40-50 MB (включая Python runtime)
|
||||
|
||||
3. **Первый запуск:**
|
||||
- Может занять 5-10 секунд (распаковка)
|
||||
- Последующие запуски быстрее (~1-2 сек)
|
||||
|
||||
4. **Безопасность:**
|
||||
- Файлы подписаны контрольными суммами SHA256 и MD5
|
||||
- Всегда проверяйте контрольные суммы перед использованием
|
||||
|
||||
---
|
||||
|
||||
### 🔐 Проверка контрольных сумм
|
||||
|
||||
#### Linux:
|
||||
```bash
|
||||
# SHA256
|
||||
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||
|
||||
# MD5
|
||||
md5sum -c letsencrypt-regru-linux-x86_64.tar.gz.md5
|
||||
```
|
||||
|
||||
#### Windows:
|
||||
```powershell
|
||||
# SHA256
|
||||
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256
|
||||
|
||||
# MD5
|
||||
certutil -hashfile letsencrypt-regru-windows-x86_64.zip MD5
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🐛 Проблемы и поддержка
|
||||
|
||||
Если у вас возникли проблемы:
|
||||
|
||||
1. Проверьте [Issues](../../issues)
|
||||
2. Создайте новый [Issue](../../issues/new)
|
||||
3. См. раздел [Troubleshooting](BUILD_GUIDE.md#troubleshooting) в BUILD_GUIDE.md
|
||||
|
||||
---
|
||||
|
||||
### 📝 Changelog
|
||||
|
||||
См. [коммиты](${{ github.server_url }}/${{ github.repository }}/commits/${{ steps.version.outputs.VERSION }}) для деталей изменений.
|
||||
|
||||
---
|
||||
|
||||
**Автор:** Фофанов Дмитрий
|
||||
**Дата релиза:** $(date -u +"%Y-%m-%d %H:%M:%S UTC")
|
||||
**Версия:** ${{ steps.version.outputs.VERSION }}
|
||||
EOF
|
||||
|
||||
cat release_notes.md
|
||||
|
||||
- name: 🚀 Create Gitea Release
|
||||
uses: actions/gitea-release@v1
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
files: |
|
||||
release/*
|
||||
tag_name: ${{ steps.version.outputs.VERSION }}
|
||||
name: "Let's Encrypt RegRu Manager ${{ steps.version.outputs.VERSION }}"
|
||||
body_path: release_notes.md
|
||||
draft: false
|
||||
prerelease: false
|
||||
|
||||
# ============================================================================
|
||||
# Уведомление о релизе (опционально)
|
||||
# ============================================================================
|
||||
notify:
|
||||
name: 📢 Notify
|
||||
needs: [create-release]
|
||||
runs-on: ubuntu-latest
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
|
||||
steps:
|
||||
- name: 📧 Send notification
|
||||
run: |
|
||||
echo "Release created successfully!"
|
||||
echo "Tag: ${{ github.ref_name }}"
|
||||
echo "Repository: ${{ github.repository }}"
|
||||
# Здесь можно добавить отправку уведомлений через webhook, email и т.д.
|
||||
Reference in New Issue
Block a user