Development Guide
This document outlines the branching strategy and commit message guidelines for the project.
Please follow these rules to ensure smooth collaboration and maintainability.
1) Develop Project
- Setup Your Environment: Before you start making changes, set up your local development environment. Run:
pip install uv && uv sync --dev
- Test the Server: Ensure the server runs correctly on your local machine:
framex run --load-builtin-plugins echo
3、Making Changes:
- Start Coding: Once you’ve confirmed everything is set up correctly, you
can start coding. Make sure to work on a new branch created from the latest
mainordevbranch. - Validate Your Changes: After making your changes, ensure all tests pass:
poe test-all
2) How to Manage a Package with uv
To add a new package to the project, use the uv add command. This will update
the pyproject.toml file and install the new dependency.
Adding a Regular Dependency
To add a package as a regular dependency, run uv add with the package name:
uv add requests
Adding a Development Dependency
To add a package to a specific group like dev, use the --group flag:
uv add pytest –-group dev
Remove a Dependency
To remove a package, use the uv remove command:
uv remove requests
Update a specific dependency package
Use the uv lock --upgrade-package <package> command. For example, to upgrade sqlmodel:
uv lock --upgrade-package sqlmodel
uv sync # or `uv sync --dev`
3) Poe Help
Use poe help to get more help.
USAGE
poe [-h] [-v | -q] [-C PATH] [--ansi | --no-ansi] task [task arguments]
CONFIGURED TASKS
style Auto-fix and format the code using ruff.
lint Check for style and type violations using ruff and mypy.
clean Remove all files generated by builds and tests.
test Run tests quickly using the default Python environment.
test-all Run all tests.
test-ci Run ci tests.
build Build source and wheel package
tag Create a new version tag
publish Publish the package to PyPI
release Build source and wheel package
4) About Branches
Master (master | main)
- The
masterbranch is the stable version of the project. - It contains the official releases ready for production.
- Only administrators are allowed to merge into
master.
Development (dev)
- The
devbranch is used for day-to-day development. - New features and bug fixes should be merged into
dev. - Beta versions are managed and released from the
devbranch for testing before promotion tomaster.
Personal / Feature Branches
- Developers should create a personal branch or feature branch:
- Personal branch: named after the developer, e.g.,
username. - Feature branch: named with a clear prefix, e.g.,
feat-login,fix-bug-xxx.
- Personal branch: named after the developer, e.g.,
- When development is complete, submit a Pull Request (PR) targeting the
devbranch for review.
5) Commit Message Guidelines
All commits must follow the format:
<tag>: <Message>
Allowed Tags
- feat: New features
- fix: Bug fixes
- build: Build process or dependency changes
- chore: Routine tasks with no code changes (e.g., configs)
- ci: Continuous Integration / pipeline changes
- docs: Documentation updates
- perf: Performance improvements
- style: Code style changes (formatting, whitespace, etc.)
- refactor: Code refactoring without functional changes
- test: Adding or updating tests
- update: Minor updates or improvements
Example
feat: add support for plugin configuration loading
fix: resolve bug in cross-plugin API call
docs: update README with setup instructions
6) Versioning Rules
-
Minor version bumps
- Triggered by commits tagged with:
update. - Represents major feature additions, significant enhancements, or a large batch of changes.
- Example: if the current version is
1.1.0, the next release will be1.2.0.
- Triggered by commits tagged with:
-
Patch version bumps
- Triggered by commits tagged with:
feat,fix,perf,refactor,build. feat: small/new feature additions.fix: bug fixes.perf: performance improvements.refactor: internal code refactoring.build: dependency/build-related adjustments.- Example: if the current version is
1.1.0, the next release will be1.1.1.
- Triggered by commits tagged with:
Examples
- Current version:
1.1.0- A commit with
update: improve plugin loading speed→ new version1.2.0 - A commit with
fix: resolve proxy plugin crash→ new version1.1.1
- A commit with
By following these rules, the team ensures consistency, easier reviews, and automated version management.