dsfx/docs/internals/commits.md

155 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Commit Strategy
The project utilizes convetional commits to standardize commit messages across the codebase. This
document outlines the guidelines for writing commit messages that adhere to the Conventional Commits
specification.
---
## Commit Message Structure
Every commit message **MUST** follow this structure:
```
type(scope): subject
[body]
[footer]
```
- The header (first line) **must not exceed 100 characters**.
- The body (if provided) should explain the **what** and the **why** behind the change.
- The footer is reserved for any breaking changes or referencing issues.
---
## Allowed Commit Types
Use one of the following types to describe your commits:
- **feat**: A new feature for the user.
- **fix**: A bug fix.
- **docs**: Documentation changes (in-code or external docs).
- **style**: Changes that do not affect the code meaning (formatting, semicolons, white-space, etc.).
- **refactor**: A code change that neither fixes a bug nor adds a feature.
- **perf**: A code change that improves performance.
- **test**: Adding missing tests or correcting existing tests.
- **build**: Changes affecting the build system or external dependencies.
- **ci**: Changes to the Continuous Integration configuration files and scripts.
- **chore**: Maintenance tasks (updating auxiliary tools or routines).
- **revert**: Reverts a previous commit (use the prefix “Revert:” in the subject).
---
## Allowed Scopes
Our projects structure suggests a set of scopes that reflect the affected areas. When you add a scope, choose one that best describes where your change applies. Below are our recommended scopes:
### Command-line Tools
- **cmd/dsfx** Core DSFX application commands.
- **cmd/dsfxctl** Client-side commands (for dsfxctl).
- **cmd/dsfxnode** Node or peer functionality.
### Client & Peer
- **internal/client** Client functionality (dsfxctl).
- **internal/peer** Peer and node operations (dsfxnode).
### Core Libraries (located in `internal/lib`)
- **assert** Assertion helpers.
- **buffer** Buffer utilities (length-prefixed buffers).
- **crypto**
- **encryption** AEAD encryption and decryption routines.
- **identity** Ed25519 key generation, signing, and verification.
- **keyexchange** ECDH key exchange routines.
- **disk** File system abstractions.
- **frame** Network frame handling.
- **handshake** Handshake protocol implementation.
- **logging** Internal logging and context-based utilities.
- **network** Network addresses, connections, listener/dialer functionalities.
- **storage** Scoped storage interfaces.
- **system** System-level operations and environment access.
### Simulation
- **internal/sim** In-memory file system and simulated system tools.
### Tools
- **internal/tool** Auxiliary tools (e.g., benchmarks, key generators).
### Documentation
- **docs** Documentation improvements or changes.
_Note:_ When a commit affects multiple areas, pick the scope that best represents the overall change; you may also leave it empty.
---
## Examples
Here are a few examples of acceptable commit messages:
- **Feature example:**
```
feat(client): add new file upload progress indicator
Introduces a visual progress indicator for file uploads in the dsfxctl client.
```
- **Bug fix example:**
```
fix(handshake): correct nonce handling in authentication message
Adjusts nonce extraction to fix a potential off-by-one error during handshake.
```
- **Documentation update example:**
```
docs: update internal documentation for conventional commits
Added a new internal doc explaining our Conventional Commits guidelines.
```
- **Refactor example:**
```
refactor(network): simplify dial and connection setup logic
Consolidated redundant code in network dialers for improved maintainability.
```
- **Performance improvement example:**
```
perf(disk): optimize file write performance in SimDisk
Reduced simulated disk latency by refining timeout computations.
```
---
## Breaking Changes
If a commit introduces a backward-incompatible change, include a `BREAKING CHANGE:` token in the footer. For example:
```
feat(core): update authentication protocol
BREAKING CHANGE: The client handshake now requires additional parameters.
```
---
## Conclusion
Adopting Conventional Commits is a step toward ensuring a clear revision history and facilitating automated changelog generation. Keep your commit messages short, descriptive, and consistent with these guidelines.
Place this document in your internal docs folder (e.g., `/docs/internal/CONVENTIONAL_COMMITS.md`) and use it as a reference for all contributors.