À propos du projet
itch est l'application de bureau pour jouer aux jeux d'itch.io. Son objectif affiché est de permettre aux utilisateurs de télécharger et d'exécuter des jeux, de recevoir des notifications de mise à jour et de garder les jeux à jour, sans remplacer le site web itch.io lui-même.
Architecture
L'application est une application Electron avec une conception multi-processus. Le processus principal (Node.js) gère l'état avec Redux, la logique métier et la coordination avec les composants compagnons ; il utilise un motif « reactor » pour les effets de bord des actions Redux. Le processus de rendu est une interface React dont l'état est synchronisé depuis le processus principal via electron-redux.
Deux composants compagnons en Go le soutiennent :
- butler : un démon qui gère les téléchargements, installations, mises à jour et lancements de jeux, conserve une base de données SQLite des données d'installation et communique avec l'application via RPC sur TCP. Il est lancé comme processus enfant lié au cycle de vie de l'application.
- itch-setup : un exécutable qui gère l'installation initiale sur toutes les plateformes et gère les vérifications de mise à jour automatique et les redémarrages.
Gestion des versions (broth)
L'application gère les versions de butler et itch-setup via un système appelé broth, un service qui sert de proxy à l'API itch.io pour fournir des URL de téléchargement fixes pour les binaires et les ressources. Les binaires sont hébergés sous broth.itch.zone avec des identifiants de plateforme tels que linux-amd64, darwin-arm64 et windows-386. Localement, les versions sont stockées dans un répertoire broth (par exemple ~/.config/itch/broth/ sous Linux), avec les binaires extraits, les téléchargements temporaires et un marqueur .chosen-version.
La sélection de version utilise des contraintes semver définies dans src/main/broth/formulas.ts (butler ^15.20.0, itch-setup ^1.8.0). L'application récupère un point de terminaison /versions et choisit la version la plus récente satisfaisant la contrainte ; les builds canary utilisent des canaux -head sans contraintes. Au démarrage, elle valide la version choisie, vérifie les nouvelles versions des composants lorsque la version de l'application a changé, télécharge et extrait avec vérification CRC32, exécute un contrôle de cohérence, puis met à jour le marqueur et nettoie les anciennes versions. Une dérogation de développement (BROTH_USE_LOCAL=butler) permet d'utiliser un butler construit localement.
Liaisons butlerd
La communication avec butler utilise un protocole JSON-RPC 2.0 appelé butlerd. Les définitions TypeScript des requêtes, notifications et types de données se trouvent dans src/common/butlerd/messages.ts et sont générées automatiquement à partir des définitions de types Go à l'aide d'un outil appelé generous. Le code généré dépend du paquet npm @itchio/butlerd, qui fournit l'environnement d'exécution pour lancer le démon, se connecter via TCP et échanger des messages JSON-RPC. Les liaisons peuvent être régénérées avec npm run sync-butler lorsque le dépôt butler est extrait comme répertoire frère.
itch vs. kitch
La base de code prend en charge deux variantes : itch (stable) et kitch (canary), installables côte à côte. La variante est déterminée par le tag git au moment de la compilation : un tag se terminant par -canary produit kitch, sinon itch. Le développement local s'exécute toujours comme kitch car le nom dans package.json est par défaut « kitch » ; l'empaquetage de production le remplace par « itch » pour les builds non-canary. Les différences incluent les protocoles d'URL (itchio:// et itch:// contre kitchio:// et kitch://), les canaux broth (régulier contre -head), les contraintes semver (présentes contre aucune), les identifiants de bundle macOS, les icônes de la barre des tâches et des fenêtres, et les noms des artefacts.
Développement et tests
Le développement nécessite npm install, puis npm start pour exécuter en mode développement avec surveillance et reconstruction. D'autres scripts incluent npm run ts-check pour la vérification des types et npm run compile pour construire les ressources. Les tests d'intégration utilisent ChromeDriver pour contrôler l'application Electron et exercer des flux tels que la connexion, l'installation de jeux et la navigation dans l'interface. Ils nécessitent Go (le lanceur de tests est écrit en Go), un affichage (xvfb sur le CI Linux) et une clé API itch.io provenant d'un compte de test. La version de ChromeDriver doit correspondre à la version d'Electron ; lorsque la version d'Electron dans package.json change, integration-tests/versions.go doit être mis à jour en conséquence. Les tests peuvent s'exécuter contre un build empaqueté (npm run integration-tests) ou la version de développement (node release/test.js --test-dev).
Licence et projets associés
itch est publié sous la licence MIT. Le README mentionne également Mitch, un client Android lancé par d'autres développeurs.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.