View Source Contributing to TypedStruct
TypedStruct is written in Elixir.
For branching management, this project uses
git-flow. The main branch is
reserved for releases: the development process occurs on develop and feature
branches. Please never commit to main.
You can easily set up a development environment featuring all the dependencies,
including Elixir and git-flow, by using Nix. This is
detailed below.
Setup
Local repository
Fork the repository.
Clone your fork to a local repository:
$ git clone https://github.com/you/typedstruct.git $ cd typedstructAdd the main repository as a remote:
$ git remote add upstream https://github.com/ejpcmac/typedstruct.gitCheckout
develop:$ git checkout develop
Development environment (without Nix)
Install an Elixir environment, and optionally install git-flow.
Development environment (with Nix)
Install Nix by running the script and following the instructions:
$ curl https://nixos.org/nix/install | shOptionally install direnv to automatically setup the environment when you enter the project directory:
$ nix-env -i direnvIn this case, you also need to add to your
~/.<shell>rc:eval "$(direnv hook <shell>)"Make sure to replace
<shell>by your shell, namelybash,zsh, …In the project directory, if you did not install direnv, start a Nix shell:
$ cd typedstruct $ nix-shellIf you opted to use direnv, please allow the
.envrcinstead of running a Nix shell manually:$ cd typedstruct $ direnv allowIn this case, direnv will automatically update your environment to behave like a Nix shell whenever you enter the project directory.
Git-flow
If you want to use git-flow and use the standard project configuration, please
run:
$ ./.gitsetup
Building the project
Fetch the project dependencies:
$ cd typedstruct $ mix deps.getRun the static analyzers:
$ mix check
All the tests should pass.
Workflow
To make a change, please use this workflow:
Checkout
developand apply the last upstream changes (use rebase, not merge!):$ git checkout develop $ git fetch --all --prune $ git rebase upstream/developFor a tiny patch, create a new branch with an explicit name:
$ git checkout -b <my_branch>Alternatively, if you are working on a feature which would need more work, you can create a feature branch with
git-flow:$ git flow feature start <my_feature>Note: always open an issue and ask before starting a big feature, to avoid it not beeing merged and your time lost.
Work on your feature (don’t forget to write typespecs and tests; you can check your coverage with
mix coveralls.htmland opencover/excoveralls.html):# Some work $ git commit -am "feat: my first change" # Some work $ git commit -am "refactor: my second change" ...When your feature is ready, feel free to use interactive rebase so your history looks clean and is easy to follow. Then, apply the last upstream changes on
developto prepare integration:$ git checkout develop $ git fetch --all --prune $ git rebase upstream/developIf there were commits on
developsince the beginning of your feature branch, integrate them by rebasing if your branch has few commits, or merging if you had a long-lived branch:$ git checkout <my_feature_branch> $ git rebase developNote: the only case you should merge is when you are working on a big feature. If it is the case, we should have discussed this before as stated above.
Run the tests and static analyzers to ensure there is no regression and all works as expected:
$ mix checkIf it’s all good, open a pull request to merge your branch into the
developbranch on the main repository.
Coding style
Please format your code with mix format or your editor and follow
this style guide.
All contributed code must be documented and functions must have typespecs. In general, take your inspiration from the existing code.
Please name your commits using Conventional Commits.