Files
FreshRSS/docs/fr/developers/01_First_steps.md
Benjamin Reich 8f07199777 add multi arch docker build (#5808)
* Add multi arch container build

Co-authored-by: EdJoPaTo <rfc-conform-git-commit-email@funny-long-domain-label-everyone-hates-as-it-is-too-long.edjopato.de>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

* using label from github action

* dont remove static labels and split docker readme in seperate action

* pin 3rd party action to a commit

* enable pushing to dockerhub

* Update .github/workflows/build-images.yml

Co-authored-by: EdJoPaTo <github@edjopato.de>

* remove not needed checkout

* set github token permissions

* Update .github/workflows/push-dockerhub-readme.yml

* update docker readme to match new tags

* Apply suggestions from code review

* fix suffix for alpine image

* fix suffix for alpine image

* push images only at upstream repo

* push images only at upstream repo

* push images only at upstream repo

* tag latest-alpine as alpine

* tag latest-alpine as alpine

* remove no needed falvor

* keep falvor for build

* Clean more things

* Rename action
To use same default name than https://github.com/actions/starter-workflows/blob/main/ci/docker-publish.yml

* Rename readme action
To use same default name than https://github.com/peter-evans/dockerhub-description/blob/main/.github/workflows/dockerhub-description.yml

* Use default name for dockerhub-description
https://github.com/peter-evans/dockerhub-description/blob/main/.github/workflows/dockerhub-description.yml
Plus minor wording

* Experiment with build-args

* Debug

* Add checkout back

* Revert back to metadata-action

* Remove quotes in version

* Try to fix variables

* Experiment with automatic label values again

* Delete last Docker Hub hooks

* Use only git SHA for org.opencontainers.image.revision
https://specs.opencontainers.org/image-spec/annotations/#pre-defined-annotation-keys

* Comment out semver for now
Might be enabled later if desired

* Enable major semver

---------

Co-authored-by: EdJoPaTo <rfc-conform-git-commit-email@funny-long-domain-label-everyone-hates-as-it-is-too-long.edjopato.de>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Co-authored-by: EdJoPaTo <github@edjopato.de>
2023-11-05 22:46:01 +01:00

289 lines
7.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Premier pas
## Configurer son environnement (Docker)
FreshRSS est construit en PHP et utilise le framework Minz. Les
dépendancessont directement incluses dans le code source, donc vous navez
pas besoin dutiliser Composer.
Il existe plusieurs façons de configurer votre environnement
dedéveloppement. La méthode la plus simple et la plus supportée est basée
surDocker. Cest la solution qui est documentée ci-dessous. Si vous avez
déjà unenvironnement PHP fonctionnel, vous nen avez probablement pas
besoin.
Nous supposons ici que vous utilisez une distribution GNU/Linux, capable
dexécuter Docker. Sinon, vous devrez adapter les commandes en conséquence.
Les commandes qui suivent doivent être exécutées dans une console. Ils
commencent par `$` quand les commandes doivent être exécutées en tant
quutilisateur normal, et par `#` quand elles doivent être exécutées en tant
quutilisateur root. Vous navez pas besoin de taper ces caractères. Un
chemin daccès peut être indiqué devant ces caractères pour vous aider à
identifier où ils doivent être exécutés. Par exemple, `app$ echo 'Hello
World'` indique que vous devez exécuter la commande `echo` dans le
répertoire `app/`.
Tout dabord, vous devez installer
[Docker](https://docs.docker.com/install/linux/docker-ce/ubuntu/).
Une fois que cest fait, clonez le dépôt de code de la manière suivante :
```sh
git clone https://github.com/FreshRSS/FreshRSS.git
cd FreshRSS
```
Notez que, pour contribuer, vous devrez dabord « forker » ce dépôt de code
(ou dépôt de code référent) et cloner votre « fork » à la place de ce
dépôt. Adaptez les commandes en conséquence.
Ensuite, la seule commande que vous devez connaître est la suivante :
```sh
make start
```
Cela peut prendre un certain temps pour que Docker télécharge limage
utilisée. Dans le cas où la commande échoue pour un problème de droit, il
faudra soit ajouter votre utilisateur au groupe `docker`, soit relancer la
commande en la préfixant par `sudo`.
**Vous pouvez maintenant accéder à FreshRSS à [http://localhost:8080](http://localhost:8080).** Suivez simplement le processus dinstallation et sélectionnez la base de données SQLite.
Vous pouvez arrêter les conteneurs en tapant <kbd>Control</kbd> + <kbd>c</kbd> ou avec la commande suivante, dans un autre terminal:
```sh
make stop
```
Si la configuration vous intéresse, les commandes `make` sont définies dans
le fichier [`Makefile`](/Makefile).
Si vous avez besoin dutiliser une image Docker identifiée par un tag
différent (par défaut `alpine`), vous pouvez surcharger de la manière
suivante la variable denvironnement `TAG` au moment de lexécution de la
commande :
```sh
TAG=alpine make start
```
Vous pouvez trouver la liste complète des tags disponibles [sur le hub
Docker](https://hub.docker.com/r/freshrss/freshrss/tags).
Si vous voulez construire limage Docker, vous pouvez lancer la commande
suivante :
```sh
make build
```
La valeur de la variable `TAG` peut contenir nimporte quelle valeur (par
exemple `local`). Vous pouvez cibler une architecture spécifique en ajoutant
`-alpine` à la fin du tag (par exemple `local-alpine`).
## Architecture du projet
> **À FAIRE**
## Extensions
Si vous souhaitez créer votre propre extension FreshRSS, consultez la
[documentation de lextension](03_Backend/05_Extensions.md).
## Style de codage
Si vous désirez contribuer au code, il est important de respecter le style
de codage suivant. Le code actuel ne le respecte pas entièrement mais il est
de notre devoir à tous de le changer dès que loccasion se présente.
Aucune nouvelle contribution ne respectant pas ces règles ne sera acceptée
tant que les corrections nécessaires ne sont pas appliquées.
### Espaces, tabulations et autres caractères blancs
#### Indentation
Lindentation du code doit être faite impérativement avec des tabulations.
#### Alignement
Une fois lindentation faite, il peut être nécessaire de faire un alignement
pour simplifier la lecture. Dans ce cas, il faut utiliser les espaces.
```php
$resultat = une_fonction_avec_un_nom_long($param1, $param2,
$param3, $param4);
```
#### Fin de ligne
Le caractère de fin de ligne doit être un saut de ligne (LF) qui est le
caractère de fin de ligne des systèmes *NIX. Ce caractère ne doit pas être
précédé par des caractères blanc.
Il est possible de vérifier la présence de caractères blancs en fin de ligne
grâce à Git avec la commande suivante :
```sh
# commande à lancer avant lajout des fichiers dans lindex
git diff --check
# commande à lancer après lajout des fichiers dans lindex mais avant le commit
git diff --check --cached
```
#### Fin de fichier
Chaque fichier doit se terminer par une ligne vide.
#### Le cas de la virgule, du point et du point-virgule
Il ny a pas despace avant ces caractères, il y en a un après.
#### Le cas des opérateurs
Chaque opérateur est entouré despaces.
```php
if ($a == 10) {
// faire quelque chose
}
echo $a ? 1 : 0;
```
#### Le cas des parenthèses
Il ny a pas despaces entre des parenthèses. Il ny a pas despaces avant
une parenthèse ouvrante sauf si elle est précédée dun mot-clé. Il ny a pas
despaces après une parenthèse fermante sauf si elle est suivie dune
accolade ouvrante.
```php
if ($a == 10) {
// faire quelque chose
}
if ((int)$a == 10) {
// faire quelque chose
}
```
#### Le cas des fonctions chainées
Ce cas se présente le plus souvent en Javascript. Quand on a des fonctions
chainées, des fonctions anonymes ainsi que des fonctions de rappels, il est
très facile de se perdre. Dans ce cas là, on ajoute une indentation
supplémentaire pour toute linstruction et on revient au même niveau pour
une instruction de même niveau.
```javascript
// Première instruction
shortcut.add(shortcuts.mark_read, function () {
//...
}, {
'disable_in_input': true
});
// Deuxième instruction
shortcut.add("shift+" + shortcuts.mark_read, function () {
//...
}, {
'disable_in_input': true
});
```
### Longueur des lignes
Les lignes ne doivent pas dépasser 80 caractères. Il est cependant autorisé
exceptionnellement de dépasser cette limite sil nest pas possible de la
respecter mais en aucun cas, les lignes ne doivent dépasser les 100
caractères.
Dans le cas des fonctions, les paramètres peuvent être déclarés sur
plusieurs lignes.
```php
function ma_fonction($param_1, $param_2,
$param_3, $param_4) {
// faire quelque chose
}
```
### Nommage
Lensemble des éléments du code (fonctions, classes, méthodes et variables)
doivent être nommés de manière à décrire leur usage de façon concise.
#### Fonctions et variables
Les fonctions et les variables doivent suivre la convention "snake case".
```php
// une fontion
function nom_de_la_fontion() {
// faire quelque chose
}
// une variable
$nom_de_la_variable;
```
#### Méthodes
Les méthodes doivent suivre la convention "lower camel case".
```php
private function nomDeLaMethode() {
// faire quelque chose
}
```
#### Classes
Les classes doivent suivre la convention "upper camel case".
```php
abstract class NomDeLaClasse {}
```
### Encodage
Les fichiers doivent être encodés en UTF-8.
### Compatibilité PHP
Assurez-vous que votre code fonctionne avec une version de PHP aussi
ancienne que celle que FreshRSS supporte officiellement.
### Divers
#### Le cas des opérateurs sur plusieurs lignes
Les opérateurs doivent être en fin de ligne dans le cas de conditions sur
plusieurs lignes.
```php
if ($a == 10 ||
$a == 20) {
// faire quelque chose
}
```
#### Fin de fichier PHP
Si le fichier ne contient que du PHP, il ne doit pas comporter de balise
fermante.
#### Tableaux
Lors de lécriture de tableaux sur plusieurs lignes, tous les éléments
doivent être suivis dune virgule (même le dernier).
```php
$variable = [
"valeur 1",
"valeur 2",
"valeur 3",
];
```