# How to contribute

## 1. For everyone

You can help us in many ways:

Without beeing a developer
- By [opening an issue](https://gitlab.com/ryzen-controller-team/ryzen-controller/issues/new) when:
  - you found a bug
  - have a suggestion
  - or just to tell us thanks
- By testing new features an give feedbacks
  - on merge requests labeled `[to-test]`, take a look at the pipelines, you'll see some some green "bubbles". The one named _installers_ allow you to download artifacts.

If you have some developer/IT knowledge
- By doing code reviews:
  - on merge requests labeled `[to-review]`, by commenting the code.
  - on the [whole codebase](https://gitlab.com/ryzen-controller-team/ryzen-controller/tree/v2-react/src), by [opening an issue](https://gitlab.com/ryzen-controller-team/ryzen-controller/issues/new)

If you want to be a part of Ryzen Controller Team, ask to become a member by [opening an issue](https://gitlab.com/ryzen-controller-team/ryzen-controller/issues/new) ;)

## 2. To members or Ryzen Controller Team

### 2.1. Git workflow

This project is fast forward commit only. It means the [commit graph](https://gitlab.com/ryzen-controller-team/ryzen-controller/-/network/master) will stay on one line. It also means that every merge request must be up-to-date with the target branch before beeing merged.

This allow us to avoid any side effect due to merge commits.

A little article about this: [A git workflow using rebase](https://medium.com/singlestone/a-git-workflow-using-rebase-1b1210de83e5)

#### 2.1.1. Quick example

```bash
git clone git@gitlab.com:ryzen-controller-team/ryzen-controller.git ryzencontroller
cd ryzencontroller
git checkout -b my-bugfix
# Doing stuff with files
git add .
git commit -m "fix: Ensure people know what to do."
git push origin my-bugfix
```
Then you'll see a like to create a merge request

### 2.2. Automation

This project contains a [`.gitlab-ci.yml`](https://gitlab.com/ryzen-controller-team/ryzen-controller/blob/master/.gitlab-ci.yml) file.

This file allow us to auotmatically test, build, package and publish Ryzen Controller app.

It's executed for each merge request update and each week on the master branch.

Here a list of what's done by stage.

#### 2.2.1. Tests

Some jobs to enhance gitlab features like [code quality review](https://docs.gitlab.com/ee/user/project/merge_requests/code_quality.html), [security dashboard](https://gitlab.com/ryzen-controller-team/ryzen-controller/security/dashboard/), [Static Application Security Testing](https://docs.gitlab.com/ee/user/application_security/sast/).

And a release-check ([sample job](https://gitlab.com/ryzen-controller-team/ryzen-controller/-/jobs/400164480)), this analyse commit list to detect if a new version must be released.

#### 2.2.2. Install

`yarn install --frozen-lockfile`: https://yarnpkg.com/lang/en/docs/cli/install/#toc-yarn-install-frozen-lockfile

Don’t generate a yarn.lock lockfile and fail if an update is needed.

#### 2.2.3. Build

`yarn build`: Compile projects files into `build/` folder, production ready.

#### 2.2.4. Installers

`yarn dist-pack-all`: Create a electron package and the installers that goes with it.

#### 2.2.5. Release note

Only executed on scheduled pipelines

`create-rpm-link`, `create-deb-link`, `create-exe-link`: Create bitly links so we can count downloads =)
`update-changelog`: Update [CHANGELOG.md](https://gitlab.com/ryzen-controller-team/ryzen-controller/blob/master/CHANGELOG.md) files, will be used for the release description.

#### 2.2.6. Release

Only executed on scheduled pipelines

`publish`: Will create a new [release](https://gitlab.com/ryzen-controller-team/ryzen-controller/-/releases)
`no-publish`: Avoid the red flag when no release has to be published.