Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add documentation on coding conventions #306

Merged
merged 1 commit into from
May 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions docs/Contributing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: JANA: Multi-threaded HENP Event Reconstruction
---

<center>
<table border="0" width="100%" align="center">
<TH width="20%"><A href="index.html">Welcome</A></TH>
<TH width="20%"><A href="Tutorial.html">Tutorial</A></TH>
<TH width="20%"><A href="Howto.html">How-to guides</A></TH>
<TH width="20%"><A href="Explanation.html">Principles</A></TH>
<TH width="20%"><A href="Reference.html">Reference</A></TH>
</table>
</center>

Contributing to JANA2
=====================

## Coding Conventions

- Use `std::shared_ptr` and `std::unique_ptr` internally, but don't make them be part of the API. Instead, pass a lightweight wrapper object that encapsulates the ownership model. For example, use `JComponent::Service` instead of `std::shared_ptr<JService>`.

- Use `#pragma once` instead of traditional header guards

- Methods that are part of the API are always in `PascalCase()`; methods that are not part of the contract with the user _may_ be `snake_cased`, though new code should make everything Pascal-cased. Member variables are snake-cased and prefixed with `m_`. Indent using 4 spaces, not tabs.


## Cutting a release

1. Figure out the version number. Use semver: the first number is a "major" version number that has nothing to do with the fact that this is "JANA2".
Use release candidates when necessary. The version number convention is `v{MAJOR}.{MINOR}.{PATCH}-rc{CANDIDATE}`.

2. Update the root CMakeLists.txt to use that version number. Update the documentation at `docs/Download.md` to include a link to where the new release will be available on GitHub. Commit these changes.

3. Create a tag pointing to the commit you just made. The tag should have the same name as the CMake version, prefixed with a 'v'. Push to GitHub. Don't force push this tags, because people downstream have CI tools that cache their dependencies using the tag name instead of the hash. Instead, just cut a new release candidate.

4. Cut a release on GitHub, pointing to that tag. If it is a release candidiate, mark it as a prerelease.

5. Figure out the SHA256 of the release tarball on Github:
```bash
shasum -a 256 $PATH_TO_JANA_TARBALL
```

5. Pull-request an update to the eicrecon spack repository. The repository is here:

https://github.com/eic/eic-spack


Add a line to `packages/jana2/package.py` that associates the release version with the checksum you calculated in (5), e.g.:

```python
version("2.2.1-rc1", sha256="7b65ce967d9c0690e22f4450733ead4acebf8fa510f792e0e4a6def14fb739b1")
```
Note that the spack version identifier does _not_ have a 'v' prefix.

1 change: 1 addition & 0 deletions docs/Howto.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Table of contents
15. Build and filter events ("L1 and L2 triggers")
16. Process subevents
17. Migrate from JANA1 to JANA2
18. [Contributing to JANA2](Contributing.html)


Using the JANA CLI
Expand Down
Loading