Contributing to Automax
Thanks for your interest in Automax! 🚀
This is a lightweight, YAML-based automation framework. All contributions are welcome: features, bug fixes, docs, tests, or ideas.
How to Contribute
Prerequisites
- Python 3.11+
- Git
- (Optional) Poetry for dependency management
Initial Setup
- Fork the repo →
https://github.com/marcofortina/automax/fork - Clone your fork:
git clone https://github.com/YOUR-USERNAME/automax.git cd automax - Set up environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -e . # Install in development mode - Create a branch (use naming convention below):
git checkout -b feature/my-awesome-feature # or docs/update-readme, infra/add-workflow, etc. - Code & Test:
- Follow code style:
isort . && black . && flake8 && docformatter -r . - Add type hints everywhere
- Write tests in
tests/(pytest) - Validate changes with utilities below
- Run test suite
- Commit (see
DEVELOPER-NOTES.mdfor conventions):Note: For merge commits, use the format:git commit -m "feat: add parallel execution with asyncio"Merge PR #PR_NUMBER: Title Case Description - Push & PR:
git push origin your-branch - Open PR against
main - Fill the PR template from
.github/pull_request_template.md - Request review (@marcofortina)
Quick Contribution Flow
- Fork & Clone
pip install -e .pytest(verify setup)- Make changes
- Run code quality tools:
isort . && black . && flake8 && docformatter -r . pytest(test)- Commit & PR
Branch Naming
feat/→ new features/pluginsfix/→ bug fixesdocs/→ documentationinfra/→ CI/CD, workflowsbuild/→ packaging, pyproject.tomlsetup/→ configs, utils, examplesstructure/→ skeletons, refactoringstyle/→ formatting, lintingtest/→ tests onlyrelease/→ version bumps, changelogsecurity/→ security improvements, vulnerability fixes
Code Style
- Python 3.11+
- Code formatting:
isort . && black . - Linting:
flake8 - Docstring formatting:
docformatter -r . - Type hints + mypy strict
- Conventional Commits (see
DEVELOPER-NOTES.md)
Testing
Run all tests:
pytest
Run with coverage:
pytest --cov=automax
Run specific test file:
pytest tests/test_plugins/test_ssh_command.py
Run tests in parallel:
pytest -n auto
Run with verbose output:
pytest -v
- 90%+ coverage goal
- Unit + integration tests
- Mock external services (SSH, HTTP, Email)
Validation Utilities
Dry-run validation:
python utils/validate_step.py examples/steps/step1/step1.yaml
Check step dependencies:
python utils/check_step_deps.py examples/steps/
Lint YAML files:
python utils/lint_yaml.py examples/config/config.yaml
Validate plugins:
python utils/validate_plugins.py
Dry-run validate entire project:
python utils/dry_run_validate.py
Pull Request Template
Use the template from .github/pull_request_template.md when creating pull requests.
Debugging
- Check logs in
logs/directory - Use
--verboseflag when available - Validate YAML syntax before running
- Test plugins individually before integration
Releasing
- Maintainer only: tag
vX.Y.Z→ GitHub Actions publishes to PyPI - Update
CHANGELOG.md - Verify all tests pass
- Check documentation is current
- Merge commits should follow the format:
Merge PR #PR_NUMBER: Title Case Description
Questions?
Open an issue or discussion on GitHub.
Happy automating! 🛠️