glvis

Release Build License Doxygen License License

# How to Contribute The GLVis team welcomes contributions at all levels: bugfixes; code improvements; simplifications; new visualization capabilities; improved documentation; etc. GLVis is distributed under the terms of the BSD-3 license. All new contributions must be made under this license. If you plan on contributing to GLVis, consider reviewing the [issue tracker](https://github.com/glvis/glvis/issues) first to check if a thread already exists for your desired feature or the bug you ran into. Use a pull request (PR) toward the `glvis:master` branch to propose your contribution. If you are planning significant code changes or have questions, you may want to open an [issue](https://github.com/glvis/glvis/issues) before issuing a PR. In addition to technical contributions, we are also interested in your results and [simulation images](https://glvis.org/gallery/), which you can share via a pull request in the [glvis/web](https://github.com/glvis/web) repo. See the [Quick Summary](#quick-summary) section for the main highlights of our GitHub workflow. For more details, consult the following sections and refer back to them before issuing pull requests: - [Quick Summary](#quick-summary) - [Code Overview](#code-overview) - [GitHub Workflow](#github-workflow) - [GLVis Organization](#glvis-organization) - [New Feature Development](#new-feature-development) - [Developer Guidelines](#developer-guidelines) - [Pull Requests](#pull-requests) - [Pull Request Checklist](#pull-request-checklist) - [Releases](#releases) - [Release Checklist](#release-checklist) - [LLNL Workflow](#llnl-workflow) - [Automated Testing](#automated-testing) - [Contact Information](#contact-information) Contributing to GLVis requires knowledge of Git and, likely, OpenGL and/or finite elements. If you are new to Git, see the [GitHub learning resources](https://help.github.com/articles/git-and-github-learning-resources/). To learn more about the finite element method, see this [MFEM page](https://mfem.org/fem). *By submitting a pull request, you are affirming the [Developer's Certificate of Origin](#developers-certificate-of-origin-11) at the end of this file.* ## Quick Summary - We encourage you to [join the GLVis organization](#glvis-organization) and create development branches off `glvis:master`. - Please follow the [developer guidelines](#developer-guidelines), in particular with regards to documentation and code styling. - Pull requests should be issued toward `glvis:master`. Make sure to check the items off the [Pull Request Checklist](#pull-request-checklist). - When your contribution is fully working and ready to be reviewed, add the `ready-for-review` label. - PRs are treated similarly to journal submission with an "editor" assigning two reviewers to evaluate the changes. - The reviewers have 3 weeks to evaluate the PR and work with the author to fix issues and implement improvements. - We use [milestones](https://github.com/glvis/glvis/milestones) to coordinate the work on different PRs toward a release. - Don't hesitate to [contact us](#contact-information) if you have any questions. ### Code Overview #### Source code structure: The GLVis library uses object-oriented design principles which reflect, in code, the independent mathematical concepts of meshing, linear algebra and finite element spaces and operators. The GLVis source code has the following structure: ``` . ├── lib │ └── gl │ └── shaders ├── share └── tests ``` ## GitHub Workflow The GLVis GitHub organization: https://github.com/glvis, is the main developer hub for the GLVis project. If you plan to make contributions or would like to stay up-to-date with changes in the code, *we strongly encourage you to [join the GLVis organization](#glvis-organization)*. This will simplify the workflow (by providing you additional permissions), and will allow us to reach you directly with project announcements. ### GLVis Organization #### Getting started (GitHub) Before you can start, you need a GitHub account, here are a few suggestions: + Create the account at: [github.com/join](https://github.com/join). + For easy identification, please add your full name and maybe a picture of you at: https://github.com/settings/profile. + To receive notification, set a primary email at: https://github.com/settings/emails. + For password-less pull/push over SSH, add your SSH keys at: https://github.com/settings/keys. #### Joining - [Contact us](#contact-information) for an invitation to join the GLVis GitHub organization. You will receive an invitation email, which you can directly accept. Alternatively, *after logging into GitHub*, you can accept the invitation at the top of https://github.com/glvis. - Consider making your membership public by going to https://github.com/orgs/glvis/people and clicking on the organization visibility drop box next to your name. - Project discussions and announcements will be posted at https://github.com/orgs/glvis/teams/everyone. #### Structure - The GLVis source code is in the [glvis](https://github.com/glvis/glvis) repository. - The website and corresponding documentation are in the [web](https://github.com/glvis/web) repository. ### New Feature Development - A new feature should be important enough that at least one person, the author, is willing to work on it and be its champion. - The author creates a branch for the new feature (with suffix `-dev`), off the `master` branch, or another existing feature branch, for example: ``` # Clone assuming you have setup your ssh keys on GitHub: git clone git@github.com:glvis/glvis.git # Alternatively, clone using the "https" protocol: git clone https://github.com/glvis/glvis.git # Create a new feature branch starting from "master": git checkout master git pull git checkout -b feature-dev # Work on "feature-dev", add local commits # ... # (One time only) push the branch to github and setup your local # branch to track the github branch (for "git pull"): git push -u origin feature-dev ``` - **We prefer that you create the new feature branch inside the GLVis organization as opposed to in a fork.** This allows everyone in the community to collaborate in one central place. - If you prefer to work in your fork, please [enable upstream edits](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/). - Never use the `next` branch to start a new feature branch! - The typical feature branch name is `new-feature-dev`, e.g. `pumi-dev`. While not frequent in GLVis, other suffixes are possible, e.g. `-fix`, `-doc`, etc. ### Developer Guidelines - *Keep the code lean and as simple as possible* - Well-designed simple code is frequently more general and powerful. - Lean code base is easier to understand by new collaborators. - New features should be added only if they are necessary or generally useful. - Introduction of language constructions not currently used in GLVis should be justified and generally avoided (to maintain portability to various systems and compilers, including early access hardware). - We prefer basic C++ and the C++03 standard, to keep the code readable by a large audience and to make sure it compiles anywhere. - *Keep the code general and reasonably efficient* - The main goal is fast prototyping for research and application development. - When in doubt, generality wins over efficiency. - Respect the needs of different users (current and/or future). - *Keep things separate and logically organized* - General usage features go in GLVis (implemented in as much generality as possible), non-general features go into external apps. - Inside GLVis, compartmentalize between linalg, fem, mesh, GLVis, etc. - Contributions that are project-specific or have external dependencies are allowed (if they are of broader interest), but should be `#ifdef`-ed and not change the code by default. - Code specifics - All significant new classes, methods and functions have Doxygen-style documentation in source comments. - Consistent code styling is enforced with `make style` in the top-level directory. This requires [Artistic Style](http://astyle.sourceforge.net) version 3.1 and MFEM's style configuration file, typically located in `../mfem/config/mfem.astylerc`. - When manually resolving conflicts during a merge, make sure to mention the conflicted files in the commit message. ### Pull Requests - When your branch is ready for other developers to review / comment on the code, create a pull request towards `glvis:master`. - Pull request typically have titles like: `Description [new-feature-dev]` for example: `Parallel Unstructured Mesh Infrastructure (PUMI) integration [pumi-dev]` Note the branch name suffix (in square brackets). - Titles may contain a prefix in square brackets to emphasize the type of PR. Common choices are: `[DON'T MERGE]`, `[WIP]` and `[DISCUSS]`, for example: `[DISCUSS] Hybridized DG [hdg-dev]` - If the PR is still a work in progress, add the `WIP` label to it and optionally the `[WIP]` prefix in the title. - Add a description, appropriate labels and assign yourself to the PR. The GLVis team will add reviewers as appropriate. - List outstanding TODO items in the description, see PR #222 for an example. - When your contribution is fully working and ready to be reviewed, add the `ready-for-review` label. - PRs are treated similarly to journal submission with an "editor" assigning two reviewers to evaluate the changes. The reviewers have 3 weeks to evaluate the PR and work with the author to implement improvements and fix issues. ### Pull Request Checklist Before a PR can be merged, it should satisfy the following: - [ ] Code builds. - [ ] Code passes `make style`. - [ ] Update `CHANGELOG`: - [ ] Is this a new feature users need to be aware of? - [ ] Does it make sense to create a new section in the `CHANGELOG` to group with other related features? - [ ] Update `INSTALL`: - [ ] Had a new optional library been added? If so, what range of versions of this library are required? (*Make sure the external library is compatible with our BSD license, e.g. it is not licensed under GPL!*) - [ ] Have the version ranges for any required or optional libraries changed? - [ ] Does `make` or `cmake` have a new target? - [ ] Did the requirements or the installation process change? *(rare)* - [ ] Update `.gitignore`: - [ ] Check if `make distclean; git status` shows any files that were generated from the source by the project (not an IDE) but we don't want to track in the repository. - [ ] Add new patterns (just for the new files above) and re-run the above test. - [ ] New capability: - [ ] All significant new classes, methods and functions have Doxygen-style documentation in source comments. - [ ] Consider saving cool simulation pictures with the new capability in the Confluence gallery (LLNL only) or submitting them, via pull request, to the gallery section of the `glvis/web` repo. - [ ] If this is a major new feature, consider mentioning it in the short summary inside `README` *(rare)*. - [ ] List major new classes in `doc/CodeDocumentation.dox` *(rare)*. - [ ] Update this checklist, if the new pull request affects it. ### Releases - Releases are just tags in the `master` branch, e.g. https://github.com/glvis/glvis/releases/tag/v3.4, and have a version that ends in an even "patch" number, e.g. `v3.4.2` or `v3.4` (by convention `v3.4` is the same as `v3.4.0`.) Between releases, the version ends in an odd "patch" number, e.g. `v3.4.1`. - We use [milestones](https://github.com/glvis/glvis/milestones) to coordinate the work on different PRs toward a release, see for example the [v3.4 release](https://github.com/glvis/glvis/milestone/1?closed=1). - After a release is complete, the `next` branch is recreated, e.g. as follows (replace `3.4` with current release): - Rename the current `next` branch to `next-pre-v3.4`. - Create a new `next` branch starting from the `v3.4` release. - Local copies of `next` can then be updated with `git fetch origin next && git checkout -B next origin/next`. ### Release Checklist - [ ] Update the GLVis version in the following files: - [ ] `CHANGELOG` - [ ] `README.md` - [ ] `vcpkg.json` - [ ] `share/Info.plist` - [ ] `share/Info.cmake.plist.in` - [ ] Check that version requirements for each of GLVis's dependencies are documented in `INSTALL` and up-to-date - [ ] Update the `CHANGELOG` to organize all release contributions - [ ] Review the whole source code once over - [ ] Ask GLVis-based applications to test the pre-release branch - [ ] Test on additional platforms and compilers - [ ] Tag the repository: ``` git tag -a v3.1 -m "Official release v3.1" git push origin v3.1 ``` - [ ] Create the release tarball and push to `glvis/releases`. - [ ] Recreate the `next` branch as described in previous section. - [ ] Update and push documentation to `glvis/doxygen`. - [ ] Update URL shortlinks: - [ ] Create a shortlink at [http://bit.ly/](http://bit.ly/) for the release tarball, e.g. https://glvis.github.io/releases/glvis-3.1.tgz. - [ ] (LLNL only) Add and commit the new shortlink in the `links` and `links-glvis` files of the internal `glvis/downloads` repo. - [ ] Add the new shortlinks to the GLVis packages in `spack`, `homebrew/science`, `VisIt`, etc. - [ ] Update website in `glvis/web` repo: - Update version and shortlinks in `src/index.md` and `src/download.md`. - Use [cloc-1.62.pl](http://cloc.sourceforge.net/) and `ls -lh` to estimate the SLOC and the tarball size in `src/download.md`. ## LLNL Workflow ### Mirroring on Bitbucket - The GitHub `master` and `next` branches are mirrored to the LLNL institutional Bitbucket repository as `gh-master` and `gh-next`. - `gh-master` is merged into LLNL's internal `master` through pull requests; write permissions to `master` are restricted to ensure this is the only way in which it gets updated. - We never push directly from LLNL to GitHub. - Versions of the code on LLNL's internal server, from most to least stable: - GLVis official release on glvis.org -- Most stable, tested in many apps. - `glvis:master` -- Recent development version, guaranteed to work. - `glvis:gh-master` -- Stable development version, passed testing, you can use it to build your code between releases. - `glvis:gh-next` -- Bleeding-edge development version, may be broken, use at your own risk. ## Contact Information - Contact the GLVis team by posting to the [GitHub issue tracker](https://github.com/glvis/glvis). Please perform a search to make sure your question has not been answered already. ## [Developer's Certificate of Origin 1.1](https://developercertificate.org/) By making a contribution to this project, I certify that: (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.