Welcome and thank you for considering contributing to this project! Please take a moment to read the basics about working on this project and be aware of our Code-of-Conduct.
We welcome any type of contribution:
- Code: add code through pull requests including new features or bug fixes (check the open issues)
- QA: add issue, label it as
bug
or comments to other issues - Roadmap: contact us if you have ideas to be considered in our roadmap
- Exploitation: write blog posts, tutorials, present the project on public events, ...
If you just want to know how to use the project, see README.md
If you are not sure how to work with Pull Requests, you can find an introduction here: How to Contribute to an Open Source Project on GitHub.
- If you want to add a new feature, add a issue (with label
enhancement
) first so that the community has the chance to discuss it and provide helpful input - Consider the branch naming conventions
- Keep your commit history clean: changes are atomic and the git message format is considered
- Always
rebase
your work on top of the upstream branch to ensure your commit history is clean and linear - Keep the
.gitignore
file up-to-date - Feature added?
- Make sure that the feature is tested and add a new test if needed
mvn test
need to be passedCoding Guidelines
have to be considered: We usesonarlint
and base on thedefault ruleset
Base your work on the master
branch (as the current snapshot) or a current release branch if available.
feature-*
for new featuresfix-*
for bug fixestests-*
when updating test suiterefactor-*
when refactoring code without behavior changesdocs-*
for README.md updates (or similar documents)
Make sure that you have your own user and email setup correctly in git before you commit
Take the time to write good commit messages.
Commit message template:
---- start ----
[short line describing main purpose]
-- empty line --
[description, why this change is made]
-- empty line --
[close/fix #xxxx - representing dedicated github issue ids]
---- end ----
Please add comments to your code changes.
Uss JavaDoc
format in your comments.
Generate the api documentation (outputs to target/site/)
$ mvn clean install
$ mvn site
After you have created your Pull Request, a project maintainer reviews it and decides whether it will be merged or rejected.
Try to avoid large Pull Requests as it will take longer to review them.
Requirements:
Editor Suggestion:
Fork the project on GitHub and clone this fork locally.
$ git clone [email protected]:username/<forkedprojectname>.git
$ cd <forkedprojectname>
$ git remote add upstream https://github.com/<projectname>/<projectname>.git
$ git fetch upstream
Create local branches to hold your changes.
These should be branched directly off of the master
or release-*
branch.
$ git checkout -b my-branch -t upstream/master
Note that your new branch will track changes of the upstream/master now.
To get all required dependencies, run:
$ mvn install
Now you are ready to make changes.
If you have made some code changes, be aware of the coding guidelines.
We use sonarlint
and base on the default ruleset
.
Install the sonarlint
plugin for your IDE, more information you can find here: https://www.sonarlint.org
After you have changed code, check for new sonarlint issues.
Possible rule violations are listed here: https://rules.sonarsource.com/java
Note that the pretest script is also part of the overall test to be passed.
Keep your changes grouped logically within individual commits. This will make the review process easier.
$ git add changed/files
$ git commit -m "Commit message"
Use git rebase
after you have commited a change.
Do NOT use git merge
.
$ git fetch upstream
$ git rebase upstream/master
If there are conflicts, solve them e.g. by using a diff tool like Meld.
Then continue to rebase
$ git rebase --continue
This ensures that your working branch has the latest changes from the upstream repository and your history is clean and linear.
In case you want to abort the rebase process:
$ git rebase --abort
New features should also add new tests.
Unit test are written in JUnit
.
Run the basic tests
before submitting a Pull Request
$ mvn test
All unit tests have to be passed!
Run also integration tests
against local or remote MSB instance:
$ mvn verify -DTESTENV_CUSTOMIP=192.168.0.10
Or define urls for websocket interface, smart object management and flow management:
$ mvn verify -DTESTENV_BROKER_URL=https://ws.15xr.msb.oss.cell.vfk.fraunhofer.de/ \
-DTESTENV_SO_URL=https://so.15xr.msb.oss.cell.vfk.fraunhofer.de/ \
-DTESTENV_FLOW_URL=https://flow.15xr.msb.oss.cell.vfk.fraunhofer.de/ \
More information about testing and coverage reports: Testing
Once you have finished your work prepare your pull request by pushing your working branch to your fork on GitHub.
$ git push origin my-branch
Create a new pull request from your fork on Github. A pull request template will help you to provide all information needed and to check if all requirements are met.
It is likely that you get some comments to your Pull Request and requests for changes by the reviewer. This is part of the review process.
In this case, you can still make changes to the existing Pull Request.
Simply make the changes to your local branch, add a new commit and push to your fork. GitHub will automatically update the pull request.
$ git add changed/files
$ git commit -m "Commit message"
$ git push origin my-branch
Check if a git rebase
is necessary before.
If you have a conflict after a rebase with your remote branch on origin,
and you are the ONLY
one working on it, you can overwrite it on origin by
$ git push --force origin my-branch
The Pull Requests will be successfully merged if:
- Code reviewer accepted the Pull Request
- CI successfully checked the branch of the Pull Request
By contributing to this project, you agree that your contributions will be licensed under its LICENSE.
If you have any questions, add an issue and label it as question