simplex-chat/docs/CONTRIBUTING.md

116 lines
3.7 KiB
Markdown
Raw Permalink Normal View History

website: add docs to website (#2080) * website: add fontmatter & improve image URLs where necessary * website: add docs to website * website: add prismjs for code highlighting * website: change npm install position in web.sh * website: fix an image URL in lang/cs/README.md * website: improve image paths in lang/cs/translations.md * website: add responsiveness & improve stylings of docs * website: add dir to navbar in blog & docs * website: remove scroll in mobile dropdown menu * website: remove rfcs & add guide docs to website * website: remove file renaming script from web.sh * website: add menu to docs in nav * website: add hash list & add scroll to headers * website: customize docs frontmatter through JS * website: remove supported_languages.json * website: move merge_translations.js to JS folder * website: add the following changes to docs - add frontmatter to new doc merged from master - add ignoreForWeb property to frontmatter of README.md docs * website: remove package-lock.json from .gitignore * website: add package-lock.json from .gitignore * website: add no docs message to docs dropdown * website: improve the sidebar of docs * website: add revision date to docs * website: add script to add version to docs frontmatter * website: add layout to display message in docs if its version is old * website: improve nav responsiveness * website: remove frontmatter form main README & rfcs * website: remove rfcs from website folder * website: add ignore condition for rfcs in .eleventy * website: remove frontmatter from lang README docs * website: remove README from website's lang docs * website: add guides menu in nav * website: following changes - add docs_dropdown.json - extend reference menu in nav - remove docs menu from nav * website: fix in docs sidebar * website: revert main docs README.md files * website: revert main docs README.md files * website: move scripts out of js that are for build * website: remove displayAt form guide docs * website: create a docs_sidebar.json & shift to that approach * update navigation * website: set navbar * website: add icons to external links * website: change the approach for docs sidebar creation * website: update docs template * website: add some strings to en.json and map them accordingly * remove icon --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-05-01 02:31:23 +05:00
---
title: Contributing guide
revision: 31.01.2023
---
| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/CONTRIBUTING.md), [CZ](/docs/lang/cs/CONTRIBUTING.md), [PL](/docs/lang/pl/CONTRIBUTING.md) |
# Contributing guide
## Compiling with SQLCipher encryption enabled
Add `cabal.project.local` to project root with the location of OpenSSL headers and libraries and flag setting encryption mode:
```
cp scripts/cabal.project.local.mac cabal.project.local
# or
# cp scripts/cabal.project.local.linux cabal.project.local
```
## OpenSSL on MacOS
MacOS comes with LibreSSL as default, OpenSSL must be installed to compile SimpleX from source.
OpenSSL can be installed with `brew install openssl@3.0`
You will have to add `/opt/homebrew/opt/openssl@3.0/bin` to your PATH in order to have things working properly
## Project branches
**In simplex-chat repo**
- `stable` - stable release of the apps, can be used for updates to the previous stable release (GHC 9.6.3).
2023-11-08 12:50:56 +00:00
- `stable-android` - used to build stable Android core library with Nix (GHC 8.10.7) - only for Android armv7a.
- `master` - branch for beta version releases (compatible with both GHC 9.6.3 and 8.10.7).
2023-11-08 12:50:56 +00:00
- `master-android` - used to build beta Android core library with Nix (GHC 8.10.7) - only for Android armv7a.
2023-09-27 22:19:20 +01:00
**In simplexmq repo**
- `master` - compatible with both GHC 9.6.3 and 8.10.7.
## Development & release process
1. Make PRs to `master` branch _only_ for both simplex-chat and simplexmq repos.
2. To build core libraries for Android, iOS and windows:
2023-11-08 12:50:56 +00:00
- merge `master` branch to `master-android` branch.
- push to GitHub.
3. All libraries should be built from `master` branch, Android armv7a - from `master-android` branch.
2023-09-27 22:19:20 +01:00
4. To build Desktop and CLI apps, make tag in `master` branch, APK files should be attached to the release.
2023-09-27 22:19:20 +01:00
5. After the public release to App Store and Play Store, merge:
- `master` to `stable`
2023-11-08 12:50:56 +00:00
- `master` to `master-android` (and compile/update code)
- `master-android` to `stable-android`
6. Independently, `master` branch of simplexmq repo should be merged to `stable` branch on stable releases.
## Branches and PRs
Use change scope (or comma separated scopes) as the first word in the PR names, followed by the colon. Commit name itself should be lowercase, in present tense.
The PR names in simplex-chat repo are used in release notes, they should describe the solved problem and not the change. Possible PR scopes:
- ios
- android
- desktop
- core
- docs
- website
- ci
We squash PRs, do not rewrite branch history after the review.
For some complex features we create feature branches that will be merged once ready - do not make commits directly to them, make PRs to feature branches.
## Differences between GHC 8.10.7 and GHC 9.6.3
1. The main difference is related to `DuplicateRecordFields` extension.
It is no longer possible in GHC 9.6.3 to specify type when using selectors, instead OverloadedRecordDot extension and syntax are used that need to be removed in GHC 8.10.7:
```haskell
{-# LANGUAGE DuplicateRecordFields #-}
-- use this in GHC 9.6.3 when needed
{-# LANGUAGE OverloadedRecordDot #-}
-- GHC 9.6.3 syntax
let x = record.field
-- GHC 8.10.7 syntax removed in GHC 9.6.3
let x = field (record :: Record)
```
It is still possible to specify type when using record update syntax, use this pragma to suppress compiler warning:
```haskell
-- use this in GHC 9.6.3 when needed
{-# OPTIONS_GHC -fno-warn-ambiguous-fields #-}
let r' = (record :: Record) {field = value}
```
2. Most monad functions now have to be imported from `Control.Monad`, and not from specific monad modules (e.g. `Control.Monad.Except`).
```haskell
-- use this in GHC 9.6.3 when needed
import Control.Monad
```
[This PR](https://github.com/simplex-chat/simplex-chat/pull/2975/files) has all the differences.