Améliorer la DX de votre projet avec Task

Quable dev team
Quable
Published in
3 min readNov 4, 2022
Taskfile.yml example

Contexte

Dans notre vie de développeur, nous sommes souvent amenés à exécuter un certain nombre de tâches récurrentes, comme par exemple mettre à jour des dépendances, exécuter des migrations de base de données etc.

Ces tâches sont fastidieuses et répétitives.

De plus, au sein d’une entreprise chacun à tendance à avoir ses propres outils et le partage n’est pas systématique.

Chez Quable, l’apparition d’équipes pluridisciplinaires a accentué cette problématique.

Certaines erreurs pouvaient ainsi être rencontrées lors de la réalisation d’une nouvelle fonctionnalité, nécessitant l’exécution d’un script, afin d’assurer le bon fonctionnement de la stack locale (une migration, mise à jour des traductions, etc.).

La centralisation des tâches récurrentes devenait indispensable.

Solutions

Plusieurs solutions ont été envisagées : scripts shell, make, task…

Scripts shell

Avantages :

  • Flexible
  • Arguments natifs

Inconvénients :

  • Syntaxe complexe et différente en fonction du shell (sh, bash, zsh..)
  • Absence de compatibilité cross-platform

Make

Avantages :

  • Cross-platform
  • Capacité de ne pas exécuter les commandes si elles ne sont pas nécessaires

Inconvénients :

  • Syntaxe complexe
  • Documentation indigeste

Task

Avantages :

  • Syntaxe simple (YAML)
  • Cross-platform
  • Parallélisation des tâches
  • Documentation claire et concise

Inconvénients :

  • Impossible de réaliser des conditions

Notre choix

Un TaskFile.yml versionné pour chaque projet et un TaskFile.yml global incluant tous les autres. Grâce à cette architecture, nous avons la possibilité, avec une seule commande, d’exécuter plusieurs tâches sur différents dossiers.

Imaginons, par exemple, un repository monolithique avec deux dossiers :

./Taskfile.yml

version: '3'
includes:
api: './api'
front: './front'
tasks:
# This allows to list all tasks available by typing task
default:
cmds:
- 'task --list'
setup:
# As you can see the key specified in the includes section is the namespace for the commands
- task: api:setup
- task: front:setup

./api/Taskfile.yml

version: '3'
tasks:
setup:
desc: 'Setup the project'
cmds:
- 'php composer install'
lint:
desc: 'Execute php-cs-fixer on the project'
cmds:
- 'php vendor/bin/php-cs-fixer fix --verbose'

./front/Taskfile.yml

version: '3'
tasks:
setup:
desc: 'Setup the project'
cmds:
- 'yarn install'

Dans cet exemple, task setup dans le dossier global, exécutera successivement les tâches setup des dossiers enfants : api et front.

Les tâches setup sont également exécutables individuellement dans chaque dossier.

Pour aller plus loin

Grâce à cet outil, la documentation est simplifiée, ce qui facilite l’onboarding d’un nouveau développeur.

Au-delà du confort pour le développement sur la stack locale, Quable utilise Task dans ses processus d’intégration continue.

--

--