Browse Source

backup formation 2020

master
arthur.dambrine 2 years ago
commit
61c3a806af
  1. 184
      01_poste_de_travail/01_ligne_de_commande.md
  2. 41
      01_poste_de_travail/02_editeur.md
  3. 70
      02_git/01_index.md
  4. 77
      02_git/02_exercice.md
  5. 21
      03_bonnes_pratiques/01_les_outils.md
  6. 32
      03_bonnes_pratiques/02_code.md
  7. 78
      04_gitlab_ci/01_index.md
  8. 9
      05_divers/01_gitlab_tooling.md
  9. 22
      05_divers/02_ssh.md
  10. 65
      05_divers/03_test_api.md
  11. 80
      README.md
  12. BIN
      resources/best-pratices-slides.key
  13. BIN
      resources/best-pratices-slides.pdf
  14. BIN
      resources/ci-slides.key
  15. BIN
      resources/ci-slides.pdf
  16. BIN
      resources/git-slides.key
  17. BIN
      resources/git-slides.pdf
  18. BIN
      resources/tests-slides.key
  19. BIN
      resources/tests-slides.pdf

184
01_poste_de_travail/01_ligne_de_commande.md

@ -0,0 +1,184 @@
# Ligne de commande
Je ne connais pas WSL. Mais voici ce que j'attends d'une ligne de commande correctement configurée.
- Prompt avec nom de branches + modifications en cours
Libre à chacun de choisir s'il souhaite quelque chose de léger ou non.
- Autocomplétion Git
- Quelques alias Git (lol, st, co...)
Ceux-là, ceux de "Oh my zsh", peu importe.
```
[alias]
st = status
co = checkout
lol = log --oneline --decorate --graph
lola = log --oneline --decorate --graph --all
amend = commit --amend --no-edit
last = log -1 HEAD
inprogress = branch --no-merged dev
changelog = log --format=%s --no-merges --reverse
```
- Alias gti=git ^^
- z/autojump/...
N'importe quelle commande qui vous permet de sauter dans un projet sans chercher son chemin.
[autojump](https://github.com/wting/autojump)
- jenv/fnm|nvm
C'est à dire un moyen d'avoir un environnement "souple" et non pas s'appuyer sur l'unique version globale.
- Un minimum de configuration/connaissance Vim [On en reparle.]
- Connaître des raccourcis clavier
## Raccourcis clavier Unix
| Commande | Effet |
| ---------- | -------------------------------------------------------------- |
| `Ctrl + r` | Recherche dans les commandes précédentes |
| `Ctrl + a` | Début de ligne |
| `Ctrl + e` | Fin de ligne |
| `Ctrl + k` | Supprime jusqu'à la fin de la ligne |
| `Ctrl + w` | Supprime le "mot" avant le curseur |
| `Ctrl + y` | Colle le texte supprimé avec les 2 commandes précédentes |
| `Ctrl + d` | Quitte le shell en cours (utile pour sortir d'une session ssh) |
## Modifier un fichier
`vim`, `nano` ou même `ed` pour intervenir sur les serveurs sans UI.
L'intérêt de Vim, c'est que les connaissances sont transférables dans less et dans git.
### Configuration
Dans le fichier `~/.vimrc`
```
set number " Show current line number
set relativenumber " Show relative line numbers
```
Ce qui donne quelque chose comme ça :
```
4 # Formation pour l'AMSOM
3
2 Dates : 5, 6, 7, 8 Janvier 2020
1
5 ## Thèmes
1
2 - Environnement et outils du développeur Web
3 - Git & Gitlab
```
### Navigation
| Commande | Effet |
| -------------------- | -------------------------------------- |
| `gg` | Aller au début du fichier |
| `Shift + g` | Aller à la fin du fichier |
| `:<line-number>` | Se rendre à un numéro de ligne |
| `:<relative-number>` | Se rendre à un numéro de ligne relatif |
| `/<pattern>` | Recherche du pattern |
| `n` | Prochaine occurence du pattern |
| `:q` | Quitter |
### Edition
Attention aux modes !
Avant de taper du texte, pensez à passer en mode "insertion" via `i` et avant d'utiliser les commandes pensez à en sortir via `esc`
| Commande | Effet |
| --------------------- | ----------------------------------------------------------------------------------------------- |
| `:wq` | Sauvegarder et quitter |
| `:m<relative-number>` | Déplace la ligne courante sous la ligne citée |
| `dd` | Supprime la ligne en cours (et copie) |
| `d10` | Supprime 10 lignes |
| `u` | Undo |
| `ciw` | Supprime le mot (w) en cours et passe en mode insertion (peut-être dérivé en `ci(` par exemple) |
| `:%s/Git/Kit` | Remplace toutes les occurences de Git par Kit |
Le copier-coller dans Vim est un art que je ne maîtrise pas, ci-dessous les deux commandes de bases.
| Commande | Effet |
| -------- | ----------------------- |
| `yy` | Copie la ligne en cours |
| `p` | Colle la copie |
[Pour en savoir plus](https://vim.fandom.com/wiki/Copy,_cut_and_paste)
## Les outils Unix
### Lire un fichier
```
less <file>
```
Contrairement à `cat` permet la navigation dans le fichier. Les commandes sont les mêmes que pour `vim`.
### Chercher dans un fichier
```
grep MyException logs/error.log
```
### Afficher les dernières lignes d'un fichier
```
tail logs/error.log
```
En mode "watch" avec une vue élargie
```
tail -f -n 20 logs/access.log
```
### Extraire des données
`sed` est une commande qui n'est pas évidente, mais il faut l'avoir en tête et ne pas hésitez à "googler" son usage au besoin.
### Combinaisons via `|`
Avec le fichier `fake.log` suivant
```
ezorihzeoh numcompte : 12345
oeihroeih reoirhoeirh oiehro ziehrozeflksnlsdb
eoirhedcdaz numcompte : 38787
oeihoe oeirh oeihr oeir oihe
zepzplcns numcompte : 12345
eeropijpzejk zeorj zepo rzef ozerh z
eoiheola numcompte : 38787
sqldkfhzohsdohzeorih
eorihonenc numcompte : 98765
```
```
grep numcompte fake.log | sed -E 's/.*numcompte : ([0-9]+).*/\1/' | sort | uniq
```
Donne
```
12345
38787
98765
```
## Pour aller plus loin
- tmux
Personnellement, je n'en suis pas encore là, mais c'est très souvent cité comme "must-have".

41
01_poste_de_travail/02_editeur.md

@ -0,0 +1,41 @@
# Editeur de code
Nous nous ne parlerons que de VS Code, mais il n'y a pas de contre-indications à utiliser autre chose (Sublime Text, Atom, Emacs, Vim, ...).
Je vous laisse adapter les conseils à votre éditeur favori.
## Accès via le terminal
J'ouvre mes projets uniquement via le terminal. (La combinaison de ça avec `z` est un grand gain de temps.)
```
code .
```
## Plugins
- GitLens
Pour Git, je suis plutôt partisan du "tout ligne de commande", mais j'ai entendu du bien de ce plugin.
Personnellement, quand je suis sur Emacs j'ai Magit, alors j'utilise "edamagit" dans VS Code. Un des avantages (très Emacsien), c'est de rester dans son éditeur de code et de ne pas naviguer entre 36 outils.
- Gitlab Workflow
Je l'utilise uniquement pour l'option "Créer une nouvelle Merge Request sur la branche en cours". Encore une fois, dans l'objectif de rester concentrer.
- Live Share
Nécessaire en ces temps de confinement.
- PHP DocBlocker/PHP Intelephense/PHP Sniffer & Beautifier
Le dernier remplace correctement Prettier pour le PHP.
- Prettier
Pour CSS et JS.
- UUID Generator
Pour créer un UUID dans un test par exemple.

70
02_git/01_index.md

@ -0,0 +1,70 @@
# Git
## Savez-vous (vraiment) utiliser Git ?
[Slides](../resources/git-slides.key)
[Exercice](./02_exercice.md)
## Petites astuces de configuration
- De meilleurs [diffs](https://github.com/so-fancy/diff-so-fancy)
- `git config --global push.default simple`
Plus utile, puisque par défaut pour git 2.0.
## Formalisme des messages de commit
```
Première ligne courte, c'est le "titre".
// Une ligne vide
Le corps du message pour donner des détails expliqués le POURQUOI du commit.
```
Si vous souhaitez un formalisme officiel, le plus connu est celui issu du projet [Angular](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-commit-message-format).
## Conflits et fusion
Pas de grandes leçons sur les stratégies pour résoudre des conflits, ...
Mais une des règles de base est d'avoir un historique assez linéaire et de résoudre les conflits sur votre branche locale et pas dans Gitlab sur la Merge Request.
- `git pull --rebase`
- `git rebase dev`
## Branches
- Branche dev ?
- "Short-living branches"
- Pourquoi faire une MR ? Qu'attendre d'une MR ? (Exercice)
## Qui a fait la boulette ?
```
git blame
```
## Git, un système distribué
- Pourquoi `origin` ?
- C'est quoi un remote exactement ?
## Branche master vs main
Depuis quelques temps, la branche par défaut sur Github est `main`.
[Explications](https://github.com/github/renaming)
## Références
Tuto interactif - [lien](https://learngitbranching.js.org/)
Devoxx FR 2014 - Git++ : Passez au niveau supérieur de la gestion de version - [vidéo](https://www.youtube.com/watch?v=m0_C2cfM9IM)
Git Better - [vidéo](https://www.youtube.com/watch?v=jtEthlTz1Q0)
Savez-vous (vraiment) utiliser Git ? - [lien](https://github.com/Charlynux/presentations/tree/master/201902_DoYouActuallyKnowGit)

77
02_git/02_exercice.md

@ -0,0 +1,77 @@
# Exercice
## Repository
Créer un repository distant pour plusieurs avec un fichier README.md à la racine.
Chaque membre clone ce repository.
## Commandes locales
L'objectif est de jouer avec les commandes suivantes.
```
git status
git show <a-commit>
```
Faites des modifications sur le fichier README.md
```
git diff
git add -p
git diff --staged
git reset -- <a-file>
```
Effectuez quelques commits
```
git reset --soft HEAD~1
git commit --amend
git rebase -i <a-commit>~1
```
```
git reset --hard <a-commit>
```
Observez le résultat de cette commande.
```
git reflog ou git log -g
```
Quelques commandes supplémentaires
```
git cherry-pick <a-commit>
git revert <a-commit>
git branch <branch-name>
git checkout -b <branch-name>
git stash
git stash pop
```
Faites des modifications sur une autre branche et sur votre master. Et réalignez l'historique avec la commande suivante.
```
git rebase master
```
Pour trouver le commit à l'origine d'un bug.
```
git bisect
```

21
03_bonnes_pratiques/01_les_outils.md

@ -0,0 +1,21 @@
# Bonnes pratiques - Les outils
## Composer/NPM/Maven, même combat
[Rapide normalement]
- Intégration de scripts "utilitaires" dans le JSON (pour Composer et NPM)
## Linter vs Prettier
## PHP Stan
On ne l'utilise pas (encore), mais ça peut-être un bon complément.
[Doc](https://github.com/phpstan/phpstan)
## Tests automatisés
[PHPUnit](https://phpunit.de/)
[Behat](https://docs.behat.org/en/latest/)

32
03_bonnes_pratiques/02_code.md

@ -0,0 +1,32 @@
# Bonnes pratiques - Le code
## Tests automatisés
### Pourquoi ? Comment ? Quand ?
[Slides](../resources/tests-slides.key)
Pour plus de références : [Lien](https://github.com/Charlynux/tester-douter)
### Exercice
Kata, à choisir parmi :
- Roman Numerals Kata
- Fizz Buzz Kata
- Gilded Rose Kata
[Détails](https://kata-log.rocks)
## Bonnes pratiques et Pattern de développement
C'est assez large, mais il y a des choses à dire autour de :
- OO
- Les boucles FOR, c'est pour les faibles - [Lien](https://github.com/Charlynux/boucles-for-faibles)
- DRY or not
- Tiny controllers, Big models
- Lien avec les tests
- SQL > PHP
[Slides](./resources/best-pratices-slides.pdf)

78
04_gitlab_ci/01_index.md

@ -0,0 +1,78 @@
# Gitlab CI
## Tests & co
Maintenant qu'on a des process de vérification, on peut les faire tourner "tout le temps".
[Slides](./resources/ci-slides.pdf)
Exemple de GitlabCI
```
image: edbizarro/gitlab-ci-pipeline-php:7.4-alpine
services:
- mysql:5.7
before_script:
- composer install -n --prefer-dist
variables:
# For MySQL service
MYSQL_DATABASE: "gitlab_test"
MYSQL_ROOT_PASSWORD: "test"
# For CakePHP App
DATABASE_HOST: "mysql"
DATABASE_DB: "gitlab_test"
DATABASE_TEST_DB: "gitlab_test"
DATABASE_USER: "root"
DATABASE_PASSWORD: "test"
MAIL_FROM: "gitlabci@cef.fr"
cache:
paths:
- ./vendor/
job:runtests:
stage: test
script:
- composer run test -- --log-junit junit.xml
artifacts:
reports:
junit: junit.xml
job:codesniffer:
stage: test
script:
- composer run cs-check -- --report=junit --report-file=codesniffer.xml
artifacts:
reports:
junit: codesniffer.xml
```
## Déploiement
[Joel Test](https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/) - Question #2
Exemple de GitlabCI vers Dokku
```
job:deploy:
stage: deploy
image: ilyasemenov/gitlab-ci-git-push
services: []
before_script: []
environment:
name: staging
url: https://$DOKKU_APP_NAME.tests.iteracode.com
script:
- git-push dokku@tests.iteracode.com:$DOKKU_APP_NAME
only:
- dev
```
### Build Docker image on Gitlab CI
[Doc officielle](https://docs.gitlab.com/ee/ci/docker/using_docker_build.html)
[Build + Deploy](https://gist.github.com/t3easy/3ef49a8848338a9cd457f95034a6a16e)

9
05_divers/01_gitlab_tooling.md

@ -0,0 +1,9 @@
# Gitlab Tooling
- Wiki
- Gitlab Pages [Doc officielle](https://docs.gitlab.com/ee/user/project/pages/)
- Issues
- Time spent
- Lien avec les commits

22
05_divers/02_ssh.md

@ -0,0 +1,22 @@
## SSH
- Clés SSH publiques
Disponibles sur Gitlab (ex. https://gitlab.com/Charlynux.keys)
- ~/.ssh/config
```
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ecdsa
Host some-name
HostName 111.111.111.111
User root
Host another-name
HostName 222.222.222.222
User ubuntu
IdentityFile ~/.ssh/id_rsa
```

65
05_divers/03_test_api.md

@ -0,0 +1,65 @@
# Tester des API
## Postman
- Collections
- Variables
- Tests
## jq
[dispo sur Windows](https://stedolan.github.io/jq/download/)
"sed for JSON data"
### Extraction de dates
```cmd
cat ~/Documents/maquigny.json| jq '.meetings|map(.estimated_date)|sort|.[]' | uniq
```
### Calculs de crédit/débit depuis un fichier de log
```cmd
jq --slurp --arg kindCredit 'credit' --arg kindDebit 'debit'
'def sum(kind): .entry_movements
| map(select(.operation_kind==kind))
| map(.amount_in_cents)
| add; .[]
| { name: .entry_name, credit: sum($kindCredit), debit: sum($kindDebit) }
| { name : .name, delta : (.credit - .debit)} '
```
## ngrok
### Solution rapide
La ligne de commande vous permet de créer un tunnel rapidement.
```
ngrok http http://192.168.33.10:80
```
### Avec un fichier de configuration
Vous pouvez aussi créer un fichier `~/.ngrok2/ngrok.yml` qui contiendra vos différentes configurations (à l'instar de `~/.ssh/config`).
```
tunnels:
homestead:
proto: http
addr: homestead.test
host_header: homestead.test
```
`addr` indique l'adresse que vous voulez exposer.
`host_header` permet au serveur de savoir qu'on l'a appelé via "homestead.test", ce qui peut être utile si vous avez plusieurs sites sur la même IP.
Pour les configurations plus avancées, vous pouvez vous reporter à la [documentation officielle](https://ngrok.com/docs#config).
Dans ce cas, la commande sera :
```
ngrok start homestead
```

80
README.md

@ -0,0 +1,80 @@
# Formation pour l'AMSOM
Dates : 5, 6, 7, 8 Janvier 2020
## Thèmes
- Environnement et outils du développeur Web
- Git & Gitlab
## Points d'intérêts remontés par le client
### Environnement et outils du développeur Web
- Tester des API (+++)
- Outils : VS Code (+)
- Serveur local virtuel : Homestead (-)
- Ligne de commande (+)
- Jour 2 (+++)
[Lien](https://academie.iteracode.fr/product/environnement-et-outils-du-developpeur-web/)
### Git & Gitlab
- Introduction/Principes (-)
- Commandes de base (+++)
- Branches (+++)
- Merge Requests (+++)
- Intégration continue (+++)
- Déploiement continu (+++)
- Outils intégrés (+++)
[Lien](https://academie.iteracode.fr/product/git-gitlab/)
## Stratégie de formation
Le programme de la formation n'est pas figé. Si vous souhaitez passer plus de temps sur un sujet, approfondir avec un exercice supplémentaire, ... tout est possible.
L'objectif est que cette formation vous soit profitable.
## Programme
Une grande partie des actions du jour 2 prennent tout leur sens lorsque l'on dispose d'un serveur d'intégration continue. De même, avant d'entamer les commandes Git, il est souhaitable d'avoir une ligne de commande correctement configurée.
Afin de profiter au maximum des différents sujets, nous allons donc naviguer entre les deux formations.
### Mardi
- Configuration du poste de travail
- [Ligne de commande](./01_poste_de_travail/01_ligne_de_commande.md)
- [Editeur](./01_poste_de_travail/02_editeur.md)
- Présentation rapide de Homestead
- [Savez-vous (vraiment) utiliser Git ?](./02_git/01_index.md)
- [Git Tips + Branches](./02_git/01_index.md)
### Mercredi
- Exercice "Merge Requests"
- Divers
- [Gitlab Tooling](./05_divers/01_gitlab_tooling.md)
- [SSH](./05_divers/02_ssh.md)
- [Tester des API](./05_divers/03_test_api.md)
- Bonnes pratiques - [Les outils](./03_bonnes_pratiques/01_les_outils.md)
### Jeudi
- Bonnes pratiques - [Les tests](./03_bonnes_pratiques/02_code.md)
- Gitlab CI - [Les tests](./04_gitlab_ci/01_index.md)
### Vendredi
- Bonnes pratiques - [Le code](./03_bonnes_pratiques/02_code.md)
- Gitlab CI - [Le déploiement](./04_gitlab_ci/01_index.md)

BIN
resources/best-pratices-slides.key

Binary file not shown.

BIN
resources/best-pratices-slides.pdf

Binary file not shown.

BIN
resources/ci-slides.key

Binary file not shown.

BIN
resources/ci-slides.pdf

Binary file not shown.

BIN
resources/git-slides.key

Binary file not shown.

BIN
resources/git-slides.pdf

Binary file not shown.

BIN
resources/tests-slides.key

Binary file not shown.

BIN
resources/tests-slides.pdf

Binary file not shown.
Loading…
Cancel
Save