Compare commits

..

11 commits

Author SHA1 Message Date
themaster1970sf
bc145f4634
Update README.md 2025-10-24 08:16:33 +03:00
themaster1970sf
c14d9c1b3b
Update README.md 2025-06-23 01:30:26 +03:00
themaster1970sf
2e65b9704a
Update README.md 2025-05-20 07:14:08 +03:00
themaster1970sf
7eb2c68e21
Update README.md 2025-05-19 23:38:08 +03:00
themaster1970sf
d3e2bf4b45
Update README.md 2025-05-19 20:04:23 +03:00
themaster1970sf
e4d9adf7c9
Update README.md 2025-03-31 22:52:48 +03:00
themaster1970sf
0478b4d7c5
Update README.md 2025-03-28 00:51:54 +03:00
themaster1970sf
2e195f9762
Update README.md 2025-03-28 00:51:35 +03:00
themaster1970sf
2b6c988965
Update and rename r.txt to requirements.txt 2025-01-25 22:01:35 +03:00
themaster1970sf
fce77b8c86
Create pylint.yml 2025-01-25 21:50:14 +03:00
themaster1970sf
b2066e8acd
Add files via upload 2025-01-25 15:08:58 +03:00
4 changed files with 278 additions and 60 deletions

23
.github/workflows/pylint.yml vendored Normal file
View file

@ -0,0 +1,23 @@
name: Pylint
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pylint
- name: Analysing the code with pylint
run: |
pylint $(git ls-files '*.py')

200
README.md
View file

@ -1,91 +1,171 @@
# Auto Build GitHub Release Automation
# ![AutoBuildRepo](https://img.shields.io/badge/Auto%20Build-GitHub%20Release-blue?style=for-the-badge&logo=github)
## 📦 Описание проекта
![Python](https://img.shields.io/badge/-Python-3776AB?logo=python&logoColor=white)
![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)
![Windows](https://img.shields.io/badge/-Windows-0078D6?logo=windows&logoColor=white)
![Linux](https://img.shields.io/badge/-Linux-FCC624?logo=linux&logoColor=black)
![Usage](https://img.shields.io/badge/Usage-Automated%20Releases-yellow)
![License](https://img.shields.io/badge/License-MIT-green)
Скрипт автоматизирует создание релизов в GitHub с ежедневной архивацией содержимого репозитория.
## Содержание
## 🚀 Функциональность
* [Описание](#описание)
* [Функции](#функции)
* [Требования](#требования)
* [Установка](#установка)
* [Конфигурация](#конфигурация)
* [Настройки расписания](#настройки-расписания)
* [Запуск](#запуск)
* [Важные примечания](#важные-примечания)
* [Лицензия](#лицензия)
- Автоматическое создание архива репозитория
- Генерация релиза в GitHub
- Загрузка архива как asset релиза
- Поддержка Windows и Linux
- Настраиваемое расписание
## Описание
## 🛠 Требования
Мощный Python-скрипт, автоматизирующий создание релизов на GitHub путем генерации ежедневных архивов содержимого вашего репозитория. Идеально подходит для проектов, требующих регулярных сборок или резервных копий.
- Python 3.8+
- Git
- Личный токен GitHub
## Функции
## 📋 Установка
* 🔄 **Автоматическое архивирование репозитория** - Создает сжатые архивы вашего репозитория
* 🚀 **Генерация релизов на GitHub** - Автоматически создает релизы на GitHub
* 📦 **Загрузка ресурсов** - Прикрепляет архивные файлы к каждому релизу
* 💻 **Кроссплатформенность** - Работает как на Windows, так и на Linux
* ⏱️ **Настраиваемое расписание** - Настройте собственное время выпуска релизов
* 🔒 **Безопасная аутентификация** - Использует персональные токены доступа GitHub для безопасного доступа к API
## Требования
* Python 3.8 или выше
* Установленный и настроенный Git
* Персональный токен доступа GitHub с соответствующими разрешениями
* Интернет-соединение для доступа к API GitHub
## Установка
<details>
<summary>
### Windows
</summary>
1. Клонировать репозиторий:
```bash
git clone https://github.com/your-repo/auto-build-script.git
cd auto-build-script
```
1. **Клонировать репозиторий**
2. Установить зависимости:
```powershell
pip install -r requirements.txt
```
```bash
git clone https://github.com/themaster1970sf/AutoBuildRepo.git
cd AutoBuildRepo
```
2. **Установить зависимости**
```powershell
pip install -r requirements.txt
```
3. **Запустить скрипт**
```powershell
python app.py
```
</details>
<details>
<summary>
### Linux
</summary>
1. Клонировать репозиторий:
```bash
git clone https://github.com/your-repo/auto-build-script.git
cd auto-build-script
```
1. **Клонировать репозиторий**
2. Создать виртуальное окружение:
```bash
python3 -m venv venv
source venv/bin/activate
```
```bash
git clone https://github.com/themaster1970sf/AutoBuildRepo.git
cd AutoBuildRepo
```
3. Установить зависимости:
```bash
pip install -r requirements.txt
```
2. **Создать и активировать виртуальное окружение**
## 🔧 Настройка
```bash
python3 -m venv venv
source venv/bin/activate
```
3. **Установить зависимости**
```bash
pip install -r requirements.txt
```
4. **Запустить скрипт**
```bash
python3 app.py
```
</details>
## Конфигурация
1. **Получить персональный токен доступа GitHub**
Создайте токен со следующими разрешениями:
- `repo` (Полный контроль над приватными репозиториями)
- `workflow` (Обновление рабочих процессов GitHub Action)
2. **Настроить скрипт**
Отредактируйте функцию `daily_release()` в файле `app.py`:
```python
repo = {
"path": r"/путь/к/сборке",
"git_config": {
"username": "ваш_логин_github",
"repo": "ваш_репозиторий",
"token": "ваш_токен_github"
}
}
```
## Настройки расписания
По умолчанию скрипт запускается ежедневно в 11:23. Чтобы изменить расписание, измените функцию `main()`:
1. Получить Personal Access Token в GitHub
2. Отредактировать `daily_release()`:
```python
repo = {
"path": r"/path/to/build",
"git_config": {
"username": "your_github_username",
"repo": "your_repository",
"token": "your_github_token"
}
}
schedule.every().day.at("ЧАС:МИНУТА").do(daily_release)
```
## 🕒 Расписание
Доступные варианты расписания:
- `schedule.every().day.at("ЧЧ:ММ")` - Запуск ежедневно в указанное время
- `schedule.every().hour` - Запуск каждый час
- `schedule.every().monday` - Запуск каждый понедельник
- `schedule.every(10).minutes` - Запуск каждые 10 минут
По умолчанию скрипт запускается ежедневно в 11:23. Изменить время в функции `main()`:
```python
schedule.every().day.at("HOUR:MINUTE").do(daily_release)
```
## Запуск
## 🐍 Запуск
Чтобы запустить автоматический процесс выпуска релизов:
```bash
python app.py
```
## ⚠️ Важно
Скрипт продолжит работать в фоновом режиме в соответствии с установленным расписанием.
- Храните токен в секрете
- Проверьте права доступа к репозиторию
- Убедитесь в корректности путей
## Важные примечания
## 📄 Лицензия
⚠️ **Соображения безопасности**
[MIT License](https://github.com/themaster1970sf/AutoBuildRepo/blob/main/LICENSE)
- Рассмотрите возможность использования переменных окружения для хранения конфиденциальной информации
- Проверьте, есть ли у вас необходимые разрешения для целевого репозитория
⚠️ **Соображения производительности**
- Для больших репозиториев архивирование может занять значительное время
- Следите за ограничениями скорости API GitHub
- Учитывайте использование пропускной способности сети для больших загрузок
## Лицензия
[Лицензия MIT](https://github.com/themaster1970sf/AutoBuildRepo/blob/main/LICENSE)
---
<p align="center">
Сделано с ❤️ от <a href="https://git.plazmocraft.ru/themaster1970sf/">themaster1970sf</a>
</p>

112
app.py Normal file
View file

@ -0,0 +1,112 @@
import os
import shutil
import requests
from datetime import datetime
import pytz
import schedule
import time
import zipfile
def create_github_release(repo_path, git_config):
"""
Создает релиз в GitHub
"""
try:
moscow_tz = pytz.timezone('Europe/Moscow')
current_time = datetime.now(moscow_tz)
archive_name = f"auto_build_{current_time.strftime('%Y-%m-%d_%H-%M-%S')}"
archive_path = os.path.join(repo_path, f"{archive_name}.zip")
# Создание временной директории без archives
temp_dir = os.path.join(repo_path, 'temp_build')
os.makedirs(temp_dir, exist_ok=True)
# Копирование файлов, исключая archives
for item in os.listdir(repo_path):
if item != 'archives' and item != 'temp_build':
s = os.path.join(repo_path, item)
d = os.path.join(temp_dir, item)
if os.path.isdir(s):
shutil.copytree(s, d)
else:
shutil.copy2(s, d)
# Архивация временной директории
shutil.make_archive(archive_path[:-4], 'zip', temp_dir)
# Удаление временной директории
shutil.rmtree(temp_dir)
release_data = {
"tag_name": archive_name,
"target_commitish": "main",
"name": f"Build {archive_name}",
"body": f"Автоматическая сборка от {current_time.strftime('%Y-%m-%d %H:%M:%S')}",
"draft": False,
"prerelease": False
}
url = f"https://api.github.com/repos/{git_config['username']}/{git_config['repo']}/releases"
headers = {
"Authorization": f"token {git_config['token']}",
"Accept": "application/vnd.github.v3+json"
}
response = requests.post(url, json=release_data, headers=headers)
if response.status_code == 201:
release_info = response.json()
upload_url = release_info['upload_url'].replace('{?name,label}', f'?name={archive_name}.zip')
with open(archive_path, 'rb') as file:
upload_response = requests.post(
upload_url,
headers={
"Authorization": f"token {git_config['token']}",
"Content-Type": "application/zip"
},
data=file
)
if upload_response.status_code in [200, 201]:
print(f"Успешно создан релиз: {archive_name}")
# Удаление архива после успешной загрузки
os.remove(archive_path)
print(f"Архив {archive_name}.zip был удален.")
return True
else:
print("Ошибка загрузки архива")
return False
else:
print(f"Ошибка создания релиза: {response.text}")
return False
except Exception as e:
print(f"Общая ошибка: {e}")
return False
def daily_release():
"""Ежедневное создание релиза"""
repo = {
"path": r"C:\build",
"git_config": {
"username": "xdghrj",
"repo": "auto_build_test",
"token": "ghp_XXXXXXXXXXXXXXXXXXXXX"
}
}
create_github_release(repo['path'], repo['git_config'])
def main():
schedule.every().day.at("23:00").do(daily_release)
while True:
schedule.run_pending()
time.sleep(60)
if __name__ == "__main__":
main()

3
requirements.txt Normal file
View file

@ -0,0 +1,3 @@
requests
pytz
schedule