Development Process
Our project development process is characterized by agility, collaboration, and, most importantly, respect. We firmly believe in harnessing the collective ingenuity of our team, recognizing that each individual contributes invaluable insights to our codebase, our development process is completely managed on Github, using Github based projects.
Product Definition on Home
Home repo serves a special role in the organization, it's the starting point of all development.
- It links to all products & components
- Put only stories, identified with tag
type_storyin the home repo
To streamline our development workflow, we have adopted the GitHub-style projects framework, with all repositories linked to the ThreeFold Grid (tfgrid) product (e.g., version 3.6.0).
- Various views, such as StoryCards for a high-level overview, repository-specific views, and prioritized views, enhance project visibility.
- All repositories are managed within a centralized project, ensuring unified control and coordination.
- Milestones, aligned with semantic versioning, serve as a means to categorize and organize issues, providing versioning per component.
- Each product is clearly outlined in a dedicated project section within the "home" repository.
- The home page in the home repository serves as a hub linking to individual product pages.
- Products are associated with relevant components slated for the upcoming release.
- Product release milestones are clearly marked on the product page.
- Release notes, accessible through each product, offer a historical overview with links to specific components used in each release.
- Interlinked relationships between products and components, as well as links to third-party products with specified version numbers, provide comprehensive tracking.
- Components are meticulously monitored within the same product project.
- A commitment to semantic versioning is mandated for all components.
Github Project
When creating a new project, please use the grid template project (private repository) available at https://github.com/orgs/threefoldtech/projects/205.
Github project columns
No Status- Stakeholder or project owner suggests a feature/story/bug to be resolved in this release
Accepted- The project owner accepts the item, the issue will be worked on and he commits to solve within the release
- Once accepted = then escalation is needed if it can not be done in time
In progress- The issue is being worked on
Blocked- We are using the Kanban way of thinking - something in this swimlane needs to be resolved asap, can be e.g. a question
- Means issue cannot be completed, attention from e.g. stakeholders is needed
Verification: work is being verified- The team delivered the feature/bug/story
- Stakeholders need to agree that the issue has been resolved appropriately
- Project owner can never go from 'Verification' to 'Done' without approval from stakeholders (often represented by QA team)
Done- Everyone agreed (project owner and stakeholders) agreed that the issue was done ok
Project Special Columns
Some projects require special columns like the following
Pending Review: Work is done, waiting for review; no need for daily progress updates.Pending Deployment: If deployment is needed for QA testing on the staging instance.
Repository
Creating a repository involves establishing a foundation for collaborative development. Follow these guidelines to ensure consistency and best practices in repository creation.
Naming
- Choose a clear and descriptive name for the repository.
- Use lowercase letters and hyphens for improved readability.
README
- Include a comprehensive README.md file.
- Provide essential information about the project, including setup instructions, dependencies, and usage guidelines.
License
- Include a LICENSE file specifying the project's licensing terms, threefoldtech is using Apache2 License.
Github Templates
- Use github templates to provide proper template for issues bug_report or feature request
- Use github templates to provide proper template for pull requests
Expected Workflows
- Set up a continuous integration (CI) pipeline using a tool like GitHub Actions.
- Include linting, tests and code quality checks in the CI process.
- Set up automation to deployment on staging, and production server
- Building docker images
- Building flists
- Pushing to the hub
- Publishing packages
Issues
Consider the following for Effective Issue Reporting
-
Title:
- Provide a clear and concise title that summarizes the issue.
-
Description:
- Offer a detailed description of the issue, including what you expected to happen and what actually occurred.
- Provide steps to reproduce the issue, if possible.
- Include any error messages received.
-
Environment:
- Specify the environment in which the issue occurred (e.g., operating system, browser, version).
-
Attachments:
- Attach relevant files or screenshots to help visualize the problem.
-
Issue Type:
- Label the issue with an appropriate type (e.g., bug, feature request, question).
-
Priority:
- If applicable, assign a priority level to indicate the urgency of the issue.
-
Version Information:
- Include information about the version of the software or application where the issue was encountered.
-
Labels:
- Apply relevant labels to categorize the issue (e.g., priority levels, type of issue).
-
Reproducibility:
- Clearly state whether the issue is reproducible and under what conditions.
-
Additional Context:
- Provide any additional context that might help in understanding and addressing the issue.
-
Assigned:
- If known, assign the issue to the responsible team member or developer.
-
Discussion:
- Engage in discussions with the development team and other stakeholders to gather insights and potential solutions.
By following these guidelines, you contribute to a more efficient issue resolution process, enabling developers and the team to address concerns promptly and effectively.
Issue Labels
See issue labels
Branch Names in Issue titles
Each issue has the name of a branch in the title as [development_something], the name 'development' can be skipped and its the default or previous could also be written as [something] but don't forget branch is development_... If not specified, it is to be fixed/developed on development.
Milestones for Issues
We use milestones for version numbers e.g 1.4.2 means this issue is going to be part of the release of 1.4.2 of the component.
It's very important that nobody works on any issue in milestones not part of the global project plan
- No milestone means need to be sorted
- Number e.g
1.4.2means
So issues with no milestones can only be in 1 condition: new and not sorted out yet where (repo) it belongs