---
# System prepended metadata

title: L'auto-update d'une application electron

---

# L'auto-update d'une application electron
## 3 étapes

1. Build la nouvelle version de l'app depuis la CI
2. Stocker cette version sur un provider (Gitlab package registry)
3. Récupérer depuis le client la nouvelle version de l'app 

## Build nouvelle version de l'app depuis la CI

### Actuellement mis en place

La mise à jour de l'application se fait manuellement depuis un ordinateur MacOs et peut donc uniquement livrée une application utilisable sur Mac. 
Le fichier produit .dmg est ensuite livré sur slack et les utilisateurs (Manon / Anthony) télécharge la nouvelle version si nécessaire. 

### Ce qui pourrait être mis en place sur la CI pour build l'application pour MacOs/Linux (recette + prod)

#### Nouveau Personal Access Token => permet à electron builder de mettre à jour une release sur Gitlab
```
autoUpdater.requestHeaders = { "PRIVATE-TOKEN": "Personal access Token" }
```

#### gitlab-ci.yml

Le stage "build" dans la CI va lancer les commandes suivantes:
1. Installer les dépendances: 
```
script: 
    - npm install
```
2. Build l'application
```
    - npm run build === "vue-cli-service build"
```
3.  Crée une release de l'application 
```
    - npm run electron:build === "vue-cli-service electron:build"
```
4. Télécharger le package de la release vers le stockage artifacts
```
    - mv dist/my-electron-app-*.*.*.zip dist/my-electron-app.zip
    - mv dist/my-electron-app.zip $CI_PROJECT_DIR/build/

artifacts:
    paths:
      - build/
```

5. 4 job build au total pour la recette et la prod + mac /linux (image mac/linux)

### Publish application

Définir où publier les releases : 
```
autoUpdater.autoDownload = true;

autoUpdater.setFeedURL({
    provider: "generic",
    url: "https://gitlab.com/_example_repo_/-/jobs/artifacts/master/raw/dist?job=build"
});


autoUpdater.checkForUpdates();

```

### Fetch 
Voir comment chaque version arrive à récupérer le bon fichier
