REErelease
Imagine you had only 3 file to manage and plan your projects: readme, roadmap and release
Now imagine a simple cli interface to release, update, document the lifecycle of those projects
So you have time and mental space to put on the actual work and architect your project in a simple straigth-forward way
This is what REErelease aims to enable, simple markdown project management, automated yet flexible
It does support monorepo environment and other nested contexts scenarios
Based on typer/click, jinja2 and questionary
Quick Start
Installation
pip install reerelease
Basic Usage
# Create new project context with templates
reerelease context new my-project
# Discover existing contexts in current directory
reerelease context list
📖 Complete command reference: See the commands reference for detailed usage and options.
Development
Setup
-
Install hatch
-
Clone and setup:
git clone git@gitlab.com:real-ee/tool/reerelease.git cd reerelease hatch run setup
Git Hooks Setup
Automated quality assurance is enforced through Git hooks:
python tools/setup_hooks.py
NOTE: this is automatically run during setup
This configures:
- 🎨 Code formatting (ruff format)
- 🔍 Linting (ruff check)
- 🏷️ Type checking (mypy)
- 🧪 Testing (pytest)
- 📊 Badge generation (coverage + test badges)
- 🔒 Push validation (ensures quality gates passed)
Development Workflow
Normal Development
git add .
git commit -m "Your changes" # Runs full validation pipeline
git push # Validates commit has passed checks
The hooks runs:
- Formats code with ruff
- Runs linting checks
- Validates type annotations
- Executes test suite
- Updates coverage/test badges
- Adds validation marker to commit
NOTE: They are forced on the main/master branch or you can trigger them manually by adding
[force-hooks]or[verify-hooks]to your commit message Alternatively than can be triggered by environment variableFORCE_HOOKS=1 git commit -m 'feature commit'
Emergency Bypass
git commit --no-verify -m "Emergency fix [skip-hooks]"
git push --no-verify
Testing
# Run tests
hatch run test
# Run tests with detailed output
hatch run pytest -- --show-fail-details tests
# Generate coverage report
hatch run cov
# Generate all reports
hatch run reports
VS Code Integration
The project includes VS Code settings for:
- Ruff integration with auto-fix on save
- MyPy type checking in Problems Panel
- Pytest test discovery and execution
- Task runners for common operations
Setup: After opening the project, VS Code should automatically detect the hatch environment. If not, use
Ctrl+Shift+P→ "Python: Select Interpreter" and choose the hatch virtual environment (usually shows asreereleasewith the hatch path).
Available Tasks
Open the project in VS Code and use Ctrl+Shift+P → "Tasks: Run Task":
- pytest - Run test suite
- pytest (show CLI output on fail) - Run tests with detailed failure output
- pytest (debug logs) - Run tests with verbosity set to DEBUG
- pytest run test under cursor - Run the test at cursor using helper script
- pytest generate reports - Generate coverage and test reports in docs folder
- Fix All Ruff Issues - Auto-fix linting issues
- Format Code - Format code with ruff
- Quality Check (All) - Run complete quality pipeline
- MyPy Type Check - Run MyPy type checking
Debug/Launch Configurations
Use F5 or "Run and Debug" panel:
- Show Help - Display reerelease CLI help
- Quality Check - Run full quality pipeline
- Setup: Demo Monorepo - Create demo monorepo
- Test: List Demo Monorepo - List demo monorepo contexts
- Add Context (demo) - Create demo context in /tmp
- List Contexts (demo) - List contexts in demo directory
- Emit Test Logs - Generate test log output
Quick Commands
Ctrl+Shift+P→ "Python: Configure Tests" (pytest)Ctrl+Shift+P→ "Python: Run All Tests"Ctrl+Shift+P→ "Tasks: Run Task" → Choose from available tasks
Publishing workflow
-
Bump version in
src/reerelease/__about__.py -
Update release notes in release.md
-
Release in 3 automatic steps:
hatch run release-safe
NOTE: you need an API key setuped for test.pypi.org AND pypi.org
Automated release process:
- Version validation (checks git tags + PyPI)
- Quality checks (format, lint, typecheck, tests)
- Build package and validate distribution
- Create git tag and push to origin
- Publish to test-PyPI and then to PyPI if nothing failed
Manual alternative: python3 tools/release.py [--test-pypi]
Project Structure
📁 View complete project structure
reerelease/
├── src/
│ └──reerelease/ # Main package
│ ├── __about__.py # Package version and metadata
│ ├── __init__.py # Package initialization
│ ├── reerelease.py # Main logic and CLI entry
│ ├── errors.py # Custom Exceptions and error types
│ ├── config.py # App global configuration and defaults value
│ ├── cli
│ │ ├── commands/ # CLI command modules
│ │ │ ├── context.py
│ │ │ ├── milestone.py
│ │ │ ├── problem.py
│ │ │ └── task.py
│ │ ├── console.py # Console specific methods
│ │ └── error_codes.py # CLI exit codes
│ ├── core/ # Core dataclasses and functions
│ │ ├── context.py # Memory representation of contextes
│ │ ├── logging.py # Logging configuration
│ │ ├── milestone.py # Memory representation of milestones
│ │ └── task.py # Memory represnetation of tasks
│ ├── service # Middle layer services, contain file io and other complex shared algo
│ │ ├── dsl # Custom DSL
│ │ │ ├── inplace_edit.py # Inplace edition (minimal-churn) functions
│ │ │ ├── memory_manager.py # Parsed memory management
│ │ │ ├── phase1_specs.py # Template annotation parsing phase
│ │ │ ├── phase2_parser.py # Content input phase
│ │ │ ├── phase3_renderer.py # Content output phase
│ │ │ ├── phase4_validator.py # Validation phase
│ │ │ └── pipeline.py # Wrapping oject and simple-to-use API
│ │ ├── context_manager.py # Context management service
│ │ ├── milestone_manager.py # Milestone management service
│ │ └── template_manager.py # Template management and rendering service
│ ├── validators # Static validators
│ │ ├── validate_context.py # Context specific validation
│ │ ├── validate_dsl.py # Validator for the DSL pipeline
│ │ └── validate_milestone.py # Milestone specific validation
│ └── templates/ # Jinja2 templates
│ ├── common/ # Shared template fragments
│ ├── context/ # Context templates
│ ├── domain/ # Domain templates
│ ├── milestone/ # Milestone templates
│ └── task/ # Task templates
├── tests/ # Test suite
│ └── ...
├── tools/ # Development tools
│ ├── release.py # Automated release script
│ ├── run_pytest_node.py # Helper to run pytest for editor integrations
│ ├── setup_demo_monorepo.sh # Demo monorepo setup script
│ ├── setup_hooks.py # Git hooks installer
│ └── update_badge.py # Badge generation script
├── .vscode/ # VS Code configuration
│ ├── settings.json # Editor settings
│ ├── tasks.json # Task definitions
│ └── launch.json # Debug configurations
├── docs/ # Documentation and badges
│ ├── architecture.md # Software architecture description
│ ├── commands.md # Command reference
│ ├── coverage.svg # Tests coverage badge
│ ├── dsl.md # Custom DSL specification and guideline
│ ├── metadata.md # Supported metadata specifications
│ ├── tests.svg # Tests number and success badge
│ └── user_guide.md # Top-level user guide for quick start and understanding
├── pyproject.toml # Python project & tooling configuration
├── README.md # This file
├── release.md # Release log
├── roadmap.md # Planned future version and functionnality
└── license.txt # License
Quality Assurance
This project aims to maintains 100% test coverage and strict code quality through:
- Modern Python tooling: Ruff (linting/formatting), MyPy (type checking)
- Comprehensive testing: pytest with full coverage reporting
- Automated validation: Git hooks ensure all changes pass quality gates
- Badge tracking: Visual indicators of test and coverage status
License
Released under MIT open-source license
Metadata
Release files for reerelease 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| reerelease-0.3.2.tar.gz | 96.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| reerelease-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 176.9 kB
Release files / reerelease-0.3.2.tar.gz
| Download URL | reerelease-0.3.2.tar.gz |
|---|---|
| Size | 96.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2a5de189d089c685a8c11d7d2f28e8c85995fe6e52154faec120acf6f5b96dbc
|
|
BLAKE2b-256 checksum How to use checksums |
d0f7f116e01707122b9820af77839afd3fb72516ad70d5910b05032e7815cbee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / reerelease-0.3.2-py3-none-any.whl
| Download URL | reerelease-0.3.2-py3-none-any.whl |
|---|---|
| Size | 80.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b27a8538f5a7faf3391b20a2dd38cdeae9c8e3a8e1b8d25d9df3f4c16f5d1bfe
|
|
BLAKE2b-256 checksum How to use checksums |
3253e6695c89ee5701b0b4b5ccfa6f9abcf1ea202ae0139edcf5e6165ab0bac8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|