-
Not Absolute Truths: the information herein is not exhaustively curated and is subject to change.
-
Reference Official Documentation: In case of uncertainty, it's always better to consult the official documentation, relevant books, or content provided by our great professors.
-
Open to Suggestions: Your participation in this project is highly valued. So feel free to open an Issue or Pull Request to propose enhancements to this guide.
One highly recommended resource is Software Engineering at Google, a treasure trove of best practices and insights from Google’s software development experiences. While a detailed summary will be added later, we encourage all contributors to explore this book for a deeper understanding of collaborative software engineering.
Adopting standards in software development is essential for consistency, readability, and collaboration. Standards simplify the complexity of collaborative projects and support automation processes such as Semantic Versioning and Releases.
Understanding Git is crucial for our workflow. While the VS Code extension for Git is a time-saver, knowing how to use Git CLI is fundamental. For quick reference, consult the Git Cheat Sheet.
Relevant Links:
We follow GitHub Flow, a straightforward and effective branch-based workflow. GitHub Flow is a lightweight, branch-based workflow that emphasizes collaboration, review, and prompt integration. It involves creating branches for new features or fixes, implementing changes, opening PRs for review, revising, merging against main, and then deleting the feature branch upon completion. Ultimately, the main
branch is the primary source of truth. For a more in-depth discussion, see Software Engineering at Google book - Version Control and Branch Management Chapter.
Relevant Links:
We adhere to Conventional Commits standards:
<type>: <short summary> ( #<pull-request-reference> )
│ │ |
| | └─⫸ The PR reference number.
| |
│ └─⫸ Summary in present tense. Not capitalized. No period at the end.
│
└─⫸ Commit Type: feat|feat!|fix|fix!|perf|perf!|refactor|refactor!|test|bench|build|ci|docs|style|chore
Commit Types:
Type | Description | Example |
---|---|---|
feat | add a new feature | feat: add linear algebra solver for Computational Mathematics module |
feat! | a breaking change to a feature | feat!: add linear algebra solver for Computational Mathematics module |
fix | a bug fix | fix: correct data preprocessing bug in ML project |
fix! | a breaking change to a bug fix | fix!: correct data preprocessing bug in ML project |
perf | a code change that improves performance | perf: optimize pipeline for reduced training time |
perf! | a breaking change to a performance improvement | perf!: optimize pipeline for reduced training time |
refactor | a code change that neither fixes a bug nor adds a feature | refactor: optimize pipeline for reduced training time |
refactor! | a breaking change to a refactoring | refactor!: optimize pipeline for reduced training time |
test | adding missing tests or correcting existing tests | test: add unit tests for data preprocessing pipeline |
bench | improvements to benchmarks | bench: improve performance of data preprocessing pipeline |
build | changes to build system or external dependencies | build: update dependencies for Data Science module |
ci | changes to CI configuration files and scripts | ci: update CI configuration for Data Science module |
docs | documentation only changes | docs: update README for Modern Programming Methods |
style | changes that do not affect the meaning of the code | style: update code formatting for Data Science module |
chore | changes to the build process or auxiliary tools and libraries | chore: update dependencies for Data Science module |
Commit Rules:
- Follow the commit naming convention.
- Be concise and descriptive.
- Use English.
- Start with a verb in imperative mood.
- Use present tense.
- Avoid ending with a period.
Relevant Links:
Branch names should be descriptive, following this format:
<type>/<issue-reference>/<description>
│ │ |
| | └─⫸ A short description of the branch's purpose.
| |
│ └─⫸ The github issue/ticket number. Use `no-ref` if no issue.
│
└─⫸ Branch Type: feat|feat!|fix|fix!|perf|perf!|refactor|refactor!|test|bench|build|ci|docs|style|chore
Branch Name Examples:
fix/no-ref/update-dependencies
fix/issue-27/fix-data-sync-error
test/no-ref/refactor-math-algorithms
feature/issue-15/implement-regression-analysis
Relevant Links:
PRs are vital for proposing and reviewing changes. Reviewers ensure code quality, while contributors address feedback for merge-readiness. According to Software Engineering at Google - Code Review Chapter, code reviews are key for knowledge sharing and documentation. PR titles should follow the same commit naming convention as before:
<type>: <short summary> ( #<pull-request-reference> )
│ │ |
| | └─⫸ The PR reference number.
| |
│ └─⫸ Summary in present tense. Not capitalized. No period at the end.
│
└─⫸ Commit Type: feat|feat!|fix|fix!|perf|perf!|refactor|refactor!|test|bench|build|ci|docs|style|chore
PR Description Template:
## Why this PR?
- Explain the need.
## What Changes?
- Summarize changes.
## Tests added?
- State test status.
## Breaking changes created?
- Highlight any disruptions.
## Additional context?
- Provide more information.
PR Description Example:
## Why this PR?
- To address performance issues in our ML model training process.
## What Changes?
- Enhanced the DataPreprocessing class in data_processing.py.
## Tests added?
- Comprehensive unit tests were included.
## Breaking changes created?
- None.
## Additional context?
- Related to issue #1234 and reviewed by the data science team.
PR Rules:
- PR titles must follow the commit naming convention.
- PR descriptions should adhere to the template.
- Link PRs to relevant issues.
- Ensure PRs are reviewed by knowledgeable team members.
- Tag PRs appropriately.
- Assign PRs to responsible individuals.
- Link PRs to milestones and projects.
- PRs must pass automated checks.
- Use
Squash and Merge
for merging. - PRs should be up-to-date with
main
.
Relevant Links:
TODO: Provide guidelines for effective issue management.
TODO: Define code style guidelines.
TODO: Detail our CI/CD practices.
TODO: Explain versioning and release management.
TODO: Explain versioning and release management.
TODO: Outline collaboration and communication protocols.
This file was crafted with the assistance of ChatGPT.