Metadata-Version: 2.4
Name: calculator-actions-example
Version: 0.2.1
Summary: Учебный пример: модуль calculator для задач по GitHub Actions
Author-email: Student <student@example.com>
License: MIT
Project-URL: Homepage, https://github.com/BUka228/Actions
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# Практическая работа по GitHub Actions

## Цель работы

Научиться **автоматизировать рабочие процессы**, связанные с репозиторием, такие как:

- **сборка** проекта
- **тестирование**
- **развёртывание**
- **отправка уведомлений** и другие задачи, выполняемые автоматически при событиях в GitHub (push, pull request, теги, расписание и т.д.).


## Структура репозитория

- `calculator.py` – простой учебный Python‑модуль с арифметическими функциями.
- `tests/test_calculator.py` – юнит‑тесты на `pytest` для проверки работы модуля `calculator.py`.
- `requirements.txt` – зависимости проекта (включая `pytest` для запуска тестов локально и в GitHub Actions).
- `.github/workflows/first-action.yml` – пример первого workflow, который выполняется при `push` в ветку `main` и выводит сообщение в лог.

Эта структура может быть расширена новыми workflow‑файлами по мере выполнения заданий.

## Задания по GitHub Actions

1. **Первый Git Action**  
   Создать workflow, который запускается при каждом `push` в ветку `main` и выводит сообщение `Hello, World!` в лог.

2. **Автоматическое тестирование**  
   Настроить workflow, который запускает unit‑тесты для проекта (например, Python/Node.js) при создании Pull Request.

3. **Сборка проекта**  
   Создать workflow, который собирает проект (компилирует код, создаёт исполняемый файл и т.п.) при `push` в `main` и сохраняет артефакты сборки.

4. **Проверка стиля кода (Linting)**  
   Интегрировать workflow, который запускает линтер (например, `ESLint`, `Pylint`) для проверки стиля кода перед слиянием Pull Request.

5. **Мультиплатформенная сборка**  
   Создать workflow, который собирает проект для разных ОС (Linux, macOS, Windows) и/или разных версий Node.js/Python.

6. **Публикация пакета**  
   Настроить workflow, который автоматически публикует пакет (например, `npm`, `PyPI`) при создании тега версии.

7. **Отправка уведомлений**  
   Создать workflow, который отправляет уведомление (Slack, Telegram и т.п.) при успешном или неудачном завершении сборки.

8. **Развёртывание на статический хостинг**  
   Настроить workflow для автоматического развёртывания статического сайта (HTML/CSS/JS) на GitHub Pages или Netlify при `merge` в `main`.

9. **Управление секретами**  
   Использовать GitHub Actions Secrets для безопасного хранения API‑ключей, токенов и паролей, необходимых для workflow.

10. **Использование шаблонов (Templates)**  
    Создать шаблон workflow, который можно легко переиспользовать в разных проектах.

11. **Работа с подмодулями (Submodules)**  
    Написать workflow, который корректно обрабатывает `git submodules` при сборке или тестировании.

12. **Триггеры по расписанию**  
    Настроить workflow, который запускается по расписанию (например, раз в день) для выполнения фоновых задач (проверка зависимостей, сбор отчётов и т.д.).

13. **Сложный пайплайн**  
    Создать workflow с несколькими этапами (stages), где каждый последующий этап зависит от успешного выполнения предыдущего (например, *сборка → тестирование → развёртывание*).

14. **Создание Docker‑образа**  
    Написать workflow, который собирает Docker‑образ приложения и публикует его в Docker Hub или другом registry.

15. **Релизная автоматизация**  
    Создать workflow, который автоматически создаёт GitHub Release при создании тега и прикрепляет к нему артефакты сборки.

## Как работать с репозиторием

1. **Клонировать репозиторий** в свой аккаунт GitHub (fork/clone).
2. Убедиться, что установлен Python и `pip`.
3. Установить зависимости:
   ```bash
   pip install -r requirements.txt
   ```
4. Запустить тесты локально:
   ```bash
   pytest
   ```
5. Создавать и изменять файлы в каталоге `.github/workflows/` по заданиям выше.
6. Делать `commit` и `push` в GitHub, затем проверять выполнение workflow во вкладке **Actions** в репозитории.

