Git Workflow¶
Here’s a fun Git tutorial - this guide assumes familiarity.
Branching Model¶
This workflow is somewhere between legacy-Gitflow and the more modern trunk-based development, consisting of three “core” branches, two of which are build targets for a CI/CD pipeline.
Core branches summarized¶
Branch Name |
Managed By |
Description |
Branch Protections |
CI/CD Build Target |
---|---|---|---|---|
|
Team Lead |
Used for releases; all commits are merged from “develop” and tagged |
Only team lead can merge |
Yes |
|
Team Lead |
Branched off |
All |
Yes |
|
Developers |
Branched off |
None |
No |
Naming developer branches¶
Developers should adhere to the following convention when naming their branches:
<feature/debug>-<description>_<developer initials>
This convention ensures the workflow’s consistency and scales with team size.
Mitigating merge conflicts¶
Developers should be git pull
/git fetch
-ing the latest changes from
origin/develop
to their local develop
and merging it into their
feature
/debug
branches at least once a day (ideally in the morning),
because it minimizes the likelihood of merge conflicts when
issuing pull requests.
Making a pull request¶
When a developer is ready, they initiate a pull request to the lead, and the
lead merges their feature
branch into develop
if the following
conditions are met:
The developer ensured the FPGA design is in a buildable state (team lead can checkout the developer’s branch and confirm by running the build script for the synthesis tool)
The developer updated the documentation and can point to it (team lead can build and view it from the developer’s branch)
Visualizing the topology¶
gitGraph commit branch develop checkout develop branch feature-my_feature_jr commit commit checkout develop merge feature-my_feature_jr id: "dev_CICD_build_1" type: HIGHLIGHT branch debug-made_mistake_jr commit checkout develop merge debug-made_mistake_jr id: "dev_CICD_build_2" type: HIGHLIGHT checkout main merge develop tag:"v1.0" id: "main_CICD_build_1" type: HIGHLIGHT
The CI/CD pipeline is configured to carry out the following tasks upon merges to
develop
or main
:
Invokes the synthesis tool to run the FPGA design’s build script
Invokes Sphinx to generate the documentation
Invokes the simulator to run self-checking simulations (if any)
Note
Naturally, every merge junction on develop
is guaranteed to be buildable as
a result of this model, which makes those commits stable ground to “roll back”
to in the event of a debug effort