From b2066e8acd1893eca4c1c55cee17b37d37795a94 Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Sat, 25 Jan 2025 15:08:58 +0300 Subject: [PATCH 01/11] Add files via upload --- app.py | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ r.txt | 3 ++ 2 files changed, 115 insertions(+) create mode 100644 app.py create mode 100644 r.txt diff --git a/app.py b/app.py new file mode 100644 index 0000000..a79a563 --- /dev/null +++ b/app.py @@ -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() diff --git a/r.txt b/r.txt new file mode 100644 index 0000000..0b320b4 --- /dev/null +++ b/r.txt @@ -0,0 +1,3 @@ +requests +pytz +schedule From fce77b8c863049ae70e5f1c305ea59d958cfba68 Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Sat, 25 Jan 2025 21:50:14 +0300 Subject: [PATCH 02/11] Create pylint.yml --- .github/workflows/pylint.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/pylint.yml diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml new file mode 100644 index 0000000..c73e032 --- /dev/null +++ b/.github/workflows/pylint.yml @@ -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') From 2b6c988965e7640b3277178843e01b2fa1f1bc66 Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Sat, 25 Jan 2025 22:01:35 +0300 Subject: [PATCH 03/11] Update and rename r.txt to requirements.txt --- r.txt => requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename r.txt => requirements.txt (100%) diff --git a/r.txt b/requirements.txt similarity index 100% rename from r.txt rename to requirements.txt From 2e195f9762c705ffaaf397439d2677dd76530cff Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Fri, 28 Mar 2025 00:51:35 +0300 Subject: [PATCH 04/11] Update README.md --- README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1269535..f380396 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ 1. Клонировать репозиторий: ```bash -git clone https://github.com/your-repo/auto-build-script.git +git clone https://github.com/AutoBuildRepo/auto-build-script.git cd auto-build-script ``` @@ -33,11 +33,16 @@ cd auto-build-script pip install -r requirements.txt ``` +3. Запуск: +```powershell +python app.py +``` + ### Linux 1. Клонировать репозиторий: ```bash -git clone https://github.com/your-repo/auto-build-script.git +git clone https://github.com/AutoBuildRepo/auto-build-script.git cd auto-build-script ``` @@ -52,6 +57,11 @@ source venv/bin/activate pip install -r requirements.txt ``` +3. Запуск: +```powershell +python3 app.py +``` + ## 🔧 Настройка 1. Получить Personal Access Token в GitHub From 0478b4d7c5351a41e2a9872b6fff8d50ae8a0230 Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Fri, 28 Mar 2025 00:51:54 +0300 Subject: [PATCH 05/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f380396..851c0c9 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ source venv/bin/activate pip install -r requirements.txt ``` -3. Запуск: +4. Запуск: ```powershell python3 app.py ``` From e4d9adf7c9dd87a1c0cf49773c1d6b79e6aa4171 Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Mon, 31 Mar 2025 22:52:48 +0300 Subject: [PATCH 06/11] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 851c0c9..4aac48c 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ 1. Клонировать репозиторий: ```bash -git clone https://github.com/AutoBuildRepo/auto-build-script.git +git clone https://github.com/themaster1970sf/AutoBuildRepo.git cd auto-build-script ``` @@ -42,7 +42,7 @@ python app.py 1. Клонировать репозиторий: ```bash -git clone https://github.com/AutoBuildRepo/auto-build-script.git +git clone https://github.com/themaster1970sf/AutoBuildRepo.git cd auto-build-script ``` From d3e2bf4b459f666c895b6c7ce8b7ef9b0a3a1705 Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Mon, 19 May 2025 20:04:23 +0300 Subject: [PATCH 07/11] Update README.md --- README.md | 208 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 140 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index 4aac48c..7a7ab6b 100644 --- a/README.md +++ b/README.md @@ -1,101 +1,173 @@ -# 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 + +## Установка + +
+ ### Windows + -1. Клонировать репозиторий: -```bash -git clone https://github.com/themaster1970sf/AutoBuildRepo.git -cd auto-build-script -``` +1. **Клонировать репозиторий** -2. Установить зависимости: -```powershell -pip install -r requirements.txt -``` + ```bash + git clone https://github.com/themaster1970sf/AutoBuildRepo.git + cd AutoBuildRepo + ``` -3. Запуск: -```powershell -python app.py -``` +2. **Установить зависимости** + + ```powershell + pip install -r requirements.txt + ``` + +3. **Запустить скрипт** + + ```powershell + python app.py + ``` +
+ +
+ ### Linux + -1. Клонировать репозиторий: -```bash -git clone https://github.com/themaster1970sf/AutoBuildRepo.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. **Создать и активировать виртуальное окружение** -4. Запуск: -```powershell -python3 app.py -``` + ```bash + python3 -m venv venv + source venv/bin/activate + ``` -## 🔧 Настройка +3. **Установить зависимости** + + ```bash + pip install -r requirements.txt + ``` + +4. **Запустить скрипт** + + ```bash + python3 app.py + ``` +
+ +## Конфигурация + +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) +- Никогда не фиксируйте токен GitHub непосредственно в коде +- Рассмотрите возможность использования переменных окружения для хранения конфиденциальной информации +- Убедитесь, что ваш репозиторий имеет достаточно места для хранения регулярных архивов +- Проверьте, есть ли у вас необходимые разрешения для целевого репозитория + +⚠️ **Соображения производительности** + +- Для больших репозиториев архивирование может занять значительное время +- Следите за ограничениями скорости API GitHub +- Учитывайте использование пропускной способности сети для больших загрузок + +## Лицензия + +[Лицензия MIT](https://github.com/themaster1970sf/AutoBuildRepo/blob/main/LICENSE) + +--- + +

+ Сделано с ❤️ от themaster1970sf +

From 7eb2c68e2166f277f8b7e4af4d2889c05dd5e547 Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Mon, 19 May 2025 23:38:08 +0300 Subject: [PATCH 08/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a7ab6b..2d04c35 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ ## Описание -Мощный Python-скрипт, автоматизирующий создание релизов на GitHub путем генерации ежедневных архивов содержимого вашего репозитория. Идеально подходит для проектов, требующих регулярных сборок или резервных копий. +Python-скрипт, автоматизирующий создание релизов на GitHub путем генерации ежедневных архивов содержимого вашего репозитория. Идеально подходит для проектов, требующих регулярных сборок или резервных копий. ## Функции From 2e65b9704a54dd1761ebf584b8f9719db0022339 Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Tue, 20 May 2025 07:14:08 +0300 Subject: [PATCH 09/11] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2d04c35..51ab649 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ ## Описание -Python-скрипт, автоматизирующий создание релизов на GitHub путем генерации ежедневных архивов содержимого вашего репозитория. Идеально подходит для проектов, требующих регулярных сборок или резервных копий. +Мощный Python-скрипт, автоматизирующий создание релизов на GitHub путем генерации ежедневных архивов содержимого вашего репозитория. Идеально подходит для проектов, требующих регулярных сборок или резервных копий. ## Функции @@ -116,7 +116,7 @@ Python-скрипт, автоматизирующий создание рели repo = { "path": r"/путь/к/сборке", "git_config": { - "username": "ваше_имя_пользователя_github", + "username": "ваш_логин_github", "repo": "ваш_репозиторий", "token": "ваш_токен_github" } @@ -164,10 +164,10 @@ python app.py ## Лицензия -[Лицензия MIT](https://github.com/themaster1970sf/AutoBuildRepo/blob/main/LICENSE) +[Лицензия MIT](https://git.plazmocraft.ru/themaster1970sf/AutoBuildRepo/src/branch/main/LICENSE) ---

- Сделано с ❤️ от themaster1970sf + Сделано с ❤️ от themaster1970sf

From c14d9c1b3baa68140068a841d9fc771783ee29eb Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Mon, 23 Jun 2025 01:30:26 +0300 Subject: [PATCH 10/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51ab649..12d8c14 100644 --- a/README.md +++ b/README.md @@ -164,7 +164,7 @@ python app.py ## Лицензия -[Лицензия MIT](https://git.plazmocraft.ru/themaster1970sf/AutoBuildRepo/src/branch/main/LICENSE) +[Лицензия MIT](https://github.com/themaster1970sf/AutoBuildRepo/blob/main/LICENSE) --- From bc145f4634279ad03e4a9db40461451b932c087d Mon Sep 17 00:00:00 2001 From: themaster1970sf <107542393+themaster1970sf@users.noreply.github.com> Date: Fri, 24 Oct 2025 08:16:33 +0300 Subject: [PATCH 11/11] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 12d8c14..bb0114f 100644 --- a/README.md +++ b/README.md @@ -151,9 +151,7 @@ python app.py ⚠️ **Соображения безопасности** -- Никогда не фиксируйте токен GitHub непосредственно в коде - Рассмотрите возможность использования переменных окружения для хранения конфиденциальной информации -- Убедитесь, что ваш репозиторий имеет достаточно места для хранения регулярных архивов - Проверьте, есть ли у вас необходимые разрешения для целевого репозитория ⚠️ **Соображения производительности**